API-dokumentation
Anropa alla AI-funktioner via din API-nyckel, betala per användning, integrera med några rader kod.
Autentisering
Alla API-förfrågningar måste innehålla headern Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Hämta din API-nyckel på sidan "API-nycklar" i konsolen. En nyckel per konto. För att återställa, använd konsolen; den gamla ogiltigförklaras omedelbart.
Skapa uppgift
https://nsfwrouter.xyz/api/v1/tasks/create
Skicka en AI-uppgift till GPU-klustret. Uppgifter är asynkrona och returnerar ett ID. Få resultat via fråge-API eller Webhook.
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
| tool_id | int | Ja | Verktygs-ID, från verktygslistan |
| params | object | Ja | Uppgiftsparametrar, JSON-objekt, fält beroende på verktyg |
| webhook_url | string | Nej | Callback-URL för slutförandemeddelande |
| priority | int | Nej | Uppgiftsprioritet 1-10, standard 5 |
| idempotency_key | string | Nej | Idempotency-nyckel, förhindrar dubbletter |
| execution_options | object | Nej | Utförandealternativ, JSON-objekt |
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 kontrolleras före anrop. Otillräckligt saldo = fel insufficient_coins. Mynt dras av vid lyckad inlämning.
Fråga uppgiftsdetaljer
https://nsfwrouter.xyz/api/v1/tasks/query
Fråga detaljer och status per ID. Under bearbetning hämtas senaste status från GPU-klustret. Upprepade frågor inom 10 sekunder returnerar DB-cache utan fjärrförfrågningar.
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
| id | int | Ja | Uppgifts-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 | Betydelse |
|---|---|
| 0 | Bearbetar |
| 1 | Slutförd |
| -1 | Avbruten |
| -2 | Misslyckades |
Uppgiftslista
https://nsfwrouter.xyz/api/v1/tasks
Paginerad fråga av aktuellt kontos uppgifter, med filter på verktyg, status och period.
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
| page | int | Nej | Sidnummer, standard 1 |
| page_size | int | Nej | Sidstorlek, standard 20, max 50 |
| tool_id | int | Nej | Filtrera på verktyg |
| status | int | Nej | Filtrera på status (0/1/-1/-2) |
| days | int | Nej | Period i dagar, standard 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
}
}
| Fält | Typ | Beskrivning |
|---|---|---|
| type | string | Resultattyp: image eller video |
| url | string | CDN-URL för resultatfil |
| file_name | string | Filnamn |
| file_size | int | Filstorlek (bytes) |
| mime_type | string | MIME-typ, t.ex. image/png, video/mp4 |
| width | int | Bredd (pixlar) |
| height | int | Höjd (pixlar) |
Kontosaldo
https://nsfwrouter.xyz/api/v1/account/balance
Kontrollera mynt-saldo, total påladdning och total förbrukning för aktuellt konto.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Webhook-callback
Om webhook_url anges skickas en POST till den URL:en när uppgiften slutförs, misslyckas eller avbryts. Body är 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
}
}
Din server måste returnera HTTP 2xx. Vid non-2xx eller timeout (10 sek) försöker systemet igen upp till 5 gånger med exponentiell backoff (60s → 120s → 240s → 480s → 960s).
Felkoder
Alla felsvar använder ett enhetligt format: {"code": felkod, "message": "identifierare", "data": {}}
| Felkod | message | Beskrivning |
|---|---|---|
| 20001 | api_key_required | API-nyckel inte angiven |
| 20001 | invalid_api_key | Ogiltig API-nyckel |
| 20001 | ip_not_allowed | IP inte på whitelist |
| 20001 | permission_denied | Åtkomst nekad |
| 30001 | tool_not_found | Verktyg hittades inte |
| 30001 | task_not_found | Uppgift hittades inte |
| 30001 | insufficient_coins | Otillräckligt mynt-saldo |
| 30001 | task_submit_failed | Uppgiftsinlämning misslyckades |
| 30001 | task_query_failed | Uppgiftsfråga misslyckades |
| 30001 | task_already_exists | Uppgift finns redan (idempotens) |
| 40001 | tool_id_required | Parameter tool_id saknas |
| 40001 | param_error | Parameterfel |
| 40001 | webhook_url_invalid | Ogiltigt webhook_url-format |
| 40001 | params_must_be_json_object_or_array | params måste vara ett JSON-objekt eller array |
| 40001 | execution_options_must_be_json_object_or_array | execution_options måste vara ett JSON-objekt eller array |
| Intervall | Kategori |
|---|---|
| 1xxxx | Systemfel |
| 2xxxx | Autentiseringsfel |
| 3xxxx | Affärslogikfel |
| 4xxxx | Parameterfel |
| 5xxxx | Externt beroendefel |