Документация 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Ошибка внешней зависимости