Документація API

Документація API

Викликайте всі можливості ШІ через API-ключ, оплата за факт, інтеграція у кілька рядків коду.

Автентифікація

Всі запити до API повинні містити заголовок Authorization.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

Отримайте API-ключ на сторінці «API-ключі» в консолі. Один ключ на акаунт. Для скидання використовуйте консоль; старий ключ негайно анулюється.

Створення завдання

POST https://nsfwrouter.xyz/api/v1/tasks/create

Відправте завдання ШІ в GPU-кластер. Завдання асинхронні, повертають ID. Результати через API запиту або Webhook.

Параметри запиту
Параметр Тип Обов'язковий Опис
tool_idintТакID інструменту, зі списку інструментів
paramsobjectТакПараметри завдання, JSON-об'єкт, поля залежать від інструменту
webhook_urlstringНіURL колбеку для сповіщення про завершення
priorityintНіПріоритет завдання 1-10, за замовчуванням 5
idempotency_keystringНіКлюч ідемпотентності, запобігає дублікатам
execution_optionsobjectНіОпції виконання, JSON-об'єкт
Приклад запиту
curl -X POST https://nsfwrouter.xyz/api/v1/tasks/create \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_id": 1,
    "params": {
      "image": "https://example.com/photo.jpg",
      "prompt": "a beautiful landscape"
    },
    "webhook_url": "https://your-server.com/webhook"
  }'
Приклад відповіді
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

Баланс перевіряється перед викликом. Недостатньо коштів = помилка insufficient_coins. Коїни списуються при успішній відправці.

Запит деталей завдання

GET https://nsfwrouter.xyz/api/v1/tasks/query

Запитайте деталі і статус за ID. Під час обробки останній статус береться з GPU-кластера. Повторні запити протягом 10 секунд повертають кеш БД без віддалених запитів.

Параметри запиту
Параметр Тип Обов'язковий Опис
idintТакID завдання
Приклад відповіді
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 1,
      "task_output_json": [
        {
          "type": "image",
          "url": "https://cdn.example.com/outputs/abc123.png",
          "file_name": "abc123.png",
          "file_size": 1024000,
          "mime_type": "image/png",
          "width": 1024,
          "height": 1024
        }
      ],
      "consume_coins": 5,
      "created_at": 1718200000,
      "completed_at": 1718200015
    }
  }
}
Значення статусу завдання
status Значення
0Обробка
1Завершено
-1Скасовано
-2Помилка

Список завдань

GET https://nsfwrouter.xyz/api/v1/tasks

Пагінований запит завдань поточного акаунта, з фільтрами за інструментом, статусом і періодом.

Параметри запиту
Параметр Тип Обов'язковий Опис
pageintНіНомер сторінки, за замовчуванням 1
page_sizeintНіРозмір сторінки, за замовчуванням 20, максимум 50
tool_idintНіФільтр за інструментом
statusintНіФільтр за статусом (0/1/-1/-2)
daysintНіПеріод у днях, за замовчуванням 30
Приклад відповіді
{
  "code": 0,
  "message": "success",
  "data": {
    "list": [
      {
        "id": 123,
        "tool_id": 1,
        "status": 1,
        "task_output_json": [
          {
            "type": "image",
            "url": "https://cdn.example.com/outputs/abc123.png",
            "file_name": "abc123.png",
            "file_size": 1024000,
            "mime_type": "image/png",
            "width": 1024,
            "height": 1024
          }
        ],
        "error": null,
        "consume_coins": 5,
        "created_at": 1718200000,
        "completed_at": 1718200015
      },
      {
        "id": 122,
        "tool_id": 3,
        "status": 0,
        "task_output_json": [],
        "error": null,
        "consume_coins": 10,
        "created_at": 1718199000,
        "completed_at": 0
      }
    ],
    "page": 1,
    "page_size": 20
  }
}
Опис полів task_output_json
Поле Тип Опис
typestringТип результату: image або video
urlstringCDN-URL файлу результату
file_namestringІм'я файлу
file_sizeintРозмір файлу (байт)
mime_typestringMIME-тип, напр.: image/png, video/mp4
widthintШирина (пікселі)
heightintВисота (пікселі)

Баланс акаунта

GET https://nsfwrouter.xyz/api/v1/account/balance

Запит балансу коїнів, загальної суми поповнення і витрат поточного акаунта.

Приклад відповіді
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Webhook-колбэк

Якщо вказано webhook_url, при завершенні, помилці або скасуванні відправляється POST на цей URL. Тіло — JSON.

Заголовки запиту колбеку
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Тіло запиту колбеку
{
  "event": "task.finished",
  "task": {
    "id": 123,
    "status": 1,
    "task_output_json": [
      {
        "type": "image",
        "url": "https://cdn.example.com/outputs/abc123.png",
        "file_name": "abc123.png",
        "file_size": 1024000,
        "mime_type": "image/png",
        "width": 1024,
        "height": 1024
      }
    ],
    "consume_coins": 5,
    "created_at": 1718200000,
    "completed_at": 1718200015
  }
}

Ваш сервер повинен повернути HTTP 2xx. При non-2xx або таймауті (10 сек) система повторює до 5 разів з експоненційною затримкою (60с → 120с → 240с → 480с → 960с).

Коди помилок

Всі помилки використовують єдиний формат: {"code": код, "message": "ідентифікатор", "data": {}}

Код помилки message Опис
20001api_key_requiredAPI-ключ не надано
20001invalid_api_keyНедійсний API-ключ
20001ip_not_allowedIP не у whitelist
20001permission_deniedДоступ заборонено
30001tool_not_foundІнструмент не знайдено
30001task_not_foundЗавдання не знайдено
30001insufficient_coinsНедостатньо коїнів
30001task_submit_failedВідправка завдання не вдалась
30001task_query_failedЗапит завдання не вдався
30001task_already_existsЗавдання вже існує (ідемпотентність)
40001tool_id_requiredВідсутній параметр tool_id
40001param_errorПомилка параметрів
40001webhook_url_invalidНевірний формат webhook_url
40001params_must_be_json_object_or_arrayparams має бути JSON-об'єктом або масивом
40001execution_options_must_be_json_object_or_arrayexecution_options має бути JSON-об'єктом або масивом
Діапазони кодів помилок
Діапазон Категорія
1xxxxСистемна помилка
2xxxxПомилка автентифікації
3xxxxПомилка бізнес-логіки
4xxxxПомилка параметрів
5xxxxПомилка зовнішньої залежності