Documentație API
Apelează toate funcțiile AI prin cheia API, plătești per utilizare, integrează în câteva linii.
Autentificare
Toate cererile API trebuie să conțină header-ul Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Obține cheia API în pagina „Chei API" din consolă. O cheie per cont. Reset în consolă; cea veche se anulează imediat.
Creare sarcină
https://nsfwrouter.xyz/api/v1/tasks/create
Trimite o sarcină AI către clusterul GPU. Sarcinile sunt asincrone, returnează ID. Rezultate prin API sau Webhook.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tool_id | int | Da | ID instrument, din lista |
| params | object | Da | Parametri sarcină, obiect JSON, câmpuri depind de instrument |
| webhook_url | string | Nu | URL callback pentru notificare finalizare |
| priority | int | Nu | Prioritate 1-10, implicit 5 |
| idempotency_key | string | Nu | Cheie idempotență, previne duplicate |
| execution_options | object | Nu | Opțiuni execuție, obiect 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"
}
}
Sold verificat înainte de apel. Insuficient = eroare insufficient_coins. Monede deduse la trimitere reușită.
Interogare sarcină
https://nsfwrouter.xyz/api/v1/tasks/query
Interoghează detalii și status după ID. În timpul procesării, statusul se ia de la cluster. Interogări repetate în 10 sec returnează cache DB.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| id | int | Da | ID sarcină |
{
"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 | Semnificație |
|---|---|
| 0 | Procesare |
| 1 | Finalizat |
| -1 | Anulat |
| -2 | Eșuat |
Listă sarcini
https://nsfwrouter.xyz/api/v1/tasks
Interogare paginată a sarcinilor contului, cu filtre pe instrument, status și perioadă.
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| page | int | Nu | Număr pagină, implicit 1 |
| page_size | int | Nu | Mărime pagină, implicit 20, max 50 |
| tool_id | int | Nu | Filtru după instrument |
| status | int | Nu | Filtru după status (0/1/-1/-2) |
| days | int | Nu | Perioadă în zile, implicit 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
}
}
| Câmp | Tip | Descriere |
|---|---|---|
| type | string | Tip rezultat: image sau video |
| url | string | URL CDN pentru fișier |
| file_name | string | Nume fișier |
| file_size | int | Mărime (bytes) |
| mime_type | string | Tip MIME, ex. image/png, video/mp4 |
| width | int | Lățime (pixeli) |
| height | int | Înălțime (pixeli) |
Sold cont
https://nsfwrouter.xyz/api/v1/account/balance
Verifică soldul monedelor, total încărcat și total consumat.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Webhook callback
Dacă se setează webhook_url, se trimite POST la finalizare, eșec sau anulare. Body 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
}
}
Serverul tău trebuie să returneze HTTP 2xx. La non-2xx sau timeout (10s), se reîncearcă de 5 ori cu backoff exponențial.
Coduri eroare
Toate erorile folosesc format: {"code": cod, "message": "identificator", "data": {}}
| Cod eroare | message | Descriere |
|---|---|---|
| 20001 | api_key_required | Cheie API lipsă |
| 20001 | invalid_api_key | Cheie API invalidă |
| 20001 | ip_not_allowed | IP nu e în whitelist |
| 20001 | permission_denied | Acces refuzat |
| 30001 | tool_not_found | Instrument negăsit |
| 30001 | task_not_found | Sarcină negăsită |
| 30001 | insufficient_coins | Monede insuficiente |
| 30001 | task_submit_failed | Trimitere sarcină eșuată |
| 30001 | task_query_failed | Interogare sarcină eșuată |
| 30001 | task_already_exists | Sarcină existentă (idempotență) |
| 40001 | tool_id_required | Parametru tool_id lipsă |
| 40001 | param_error | Eroare parametri |
| 40001 | webhook_url_invalid | Format webhook_url invalid |
| 40001 | params_must_be_json_object_or_array | params trebuie să fie obiect sau array JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options trebuie să fie obiect sau array JSON |
| Interval | Categorie |
|---|---|
| 1xxxx | Eroare sistem |
| 2xxxx | Eroare autentificare |
| 3xxxx | Eroare logică business |
| 4xxxx | Eroare parametri |
| 5xxxx | Eroare dependență externă |