Dokumentacja API
Wywołuj wszystkie możliwości AI przez klucz API, płatność za użycie, integracja w kilka linii kodu.
Uwierzytelnianie
Wszystkie żądania API muszą zawierać nagłówek Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Uzyskaj klucz API na stronie „Klucze API" w konsoli. Jeden klucz na konto. Reset w konsoli; stary klucz natychmiast unieważniony.
Tworzenie zadania
https://nsfwrouter.xyz/api/v1/tasks/create
Wyślij zadanie AI do klastra GPU. Zadania asynchroniczne, zwracają ID. Wyniki przez API zapytania lub Webhook.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| tool_id | int | Tak | ID narzędzia, z listy narzędzi |
| params | object | Tak | Parametry zadania, obiekt JSON, pola zależne od narzędzia |
| webhook_url | string | Nie | URL callback dla powiadomienia o ukończeniu |
| priority | int | Nie | Priorytet zadania 1-10, domyślnie 5 |
| idempotency_key | string | Nie | Klucz idempotencji, zapobiega duplikatom |
| execution_options | object | Nie | Opcje wykonania, obiekt 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"
}
}
Saldo jest sprawdzane przed wywołaniem. Niewystarczające saldo = błąd insufficient_coins. Monety są pobierane po pomyślnym wysłaniu.
Szczegóły zadania
https://nsfwrouter.xyz/api/v1/tasks/query
Szczegóły i status po ID. Podczas przetwarzania najnowszy status z klastra GPU. Powtórzone zapytania w 10 sekund zwracają cache z bazy bez zapytań zdalnych.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| id | int | Tak | ID zadania |
{
"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 | Znaczenie |
|---|---|
| 0 | Przetwarzanie |
| 1 | Ukończono |
| -1 | Anulowano |
| -2 | Błąd |
Lista zadań
https://nsfwrouter.xyz/api/v1/tasks
Stronicowane zapytanie o zadania bieżącego konta, z filtrami po narzędziu, statusie i okresie.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| page | int | Nie | Numer strony, domyślnie 1 |
| page_size | int | Nie | Rozmiar strony, domyślnie 20, max 50 |
| tool_id | int | Nie | Filtruj po narzędziu |
| status | int | Nie | Filtruj po statusie (0/1/-1/-2) |
| days | int | Nie | Okres w dniach, domyślnie 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
}
}
| Pole | Typ | Opis |
|---|---|---|
| type | string | Typ wyniku: image lub video |
| url | string | URL CDN pliku wynikowego |
| file_name | string | Nazwa pliku |
| file_size | int | Rozmiar pliku (bajty) |
| mime_type | string | Typ MIME, np. image/png, video/mp4 |
| width | int | Szerokość (piksele) |
| height | int | Wysokość (piksele) |
Saldo konta
https://nsfwrouter.xyz/api/v1/account/balance
Sprawdź saldo monet, łączne doładowania i łączne zużycie bieżącego konta.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Callback Webhook
Jeśli podano webhook_url, po ukończeniu, błędzie lub anulowaniu wysyłany jest POST na ten URL. Treść to 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
}
}
Twój serwer musi zwrócić HTTP 2xx. Przy non-2xx lub timeout (10 sek) system ponawia do 5 razy z wykładniczym backoff (60s → 120s → 240s → 480s → 960s).
Kody błędów
Wszystkie błędy używają ujednoliconego formatu: {"code": kod, "message": "identyfikator", "data": {}}
| Kod błędu | message | Opis |
|---|---|---|
| 20001 | api_key_required | Nie podano klucza API |
| 20001 | invalid_api_key | Nieprawidłowy klucz API |
| 20001 | ip_not_allowed | IP nie na whiteliście |
| 20001 | permission_denied | Brak dostępu |
| 30001 | tool_not_found | Narzędzie nie znalezione |
| 30001 | task_not_found | Zadanie nie znalezione |
| 30001 | insufficient_coins | Niewystarczająca liczba monet |
| 30001 | task_submit_failed | Wysłanie zadania nie powiodło się |
| 30001 | task_query_failed | Zapytanie o zadanie nie powiodło się |
| 30001 | task_already_exists | Zadanie już istnieje (idempotencja) |
| 40001 | tool_id_required | Brak parametru tool_id |
| 40001 | param_error | Błąd parametrów |
| 40001 | webhook_url_invalid | Nieprawidłowy format webhook_url |
| 40001 | params_must_be_json_object_or_array | params musi być obiektem lub tablicą JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options musi być obiektem lub tablicą JSON |
| Zakres | Kategoria |
|---|---|
| 1xxxx | Błąd systemu |
| 2xxxx | Błąd uwierzytelniania |
| 3xxxx | Błąd logiki biznesowej |
| 4xxxx | Błąd parametrów |
| 5xxxx | Błąd zależności zewnętrznej |