API документация

API документация

Извиквайте всички AI функции чрез API ключ, плащане по използване, интеграция в няколко реда.

Удостоверяване

Всички API заявки трябва да съдържат хедър Authorization.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

Вземете API ключ от страницата „API ключове" в конзолата. Един ключ на профил. Нулиране в конзолата; старият веднага се анулира.

Създаване на задача

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

Изпратете AI задача към GPU клъстер. Задачите са асинхронни, връщат ID. Резултати чрез API или Webhook.

Параметри на заявка
Параметър Тип Задължителен Описание
tool_idintДаID на инструмент, от списъка
paramsobjectДаПараметри на задача, JSON обект, полетата зависят от инструмента
webhook_urlstringНеURL callback за известие при завършване
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 сек връщат DB cache.

Параметри на запитване
Параметър Тип Задължителен Описание
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 callback

Ако е зададен webhook_url, се изпраща POST при завършване, неуспех или отказ. Body е JSON.

Хедъри на callback заявка
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Body на callback заявка
{
  "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 или timeout (10 сек), системата опитва до 5 пъти с експоненциален backoff.

Кодове на грешки

Всички отговори за грешки използват формат: {"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Грешка във външна зависимост