Documentazione API

Documentazione API

Chiama tutte le capacità IA con la tua chiave API, pagamento a consumo, integra in poche righe di codice.

Autenticazione

Tutte le richieste API devono includere l'header Authorization.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

Ottieni la chiave API dalla pagina "Chiavi API" della console. Una chiave per account. Per reimpostarla, usa la console; la vecchia viene invalidata immediatamente.

Crea attività

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

Invia un'attività IA al cluster GPU. Le attività sono asincrone e restituiscono un ID. Ottieni i risultati via API di query o Webhook.

Parametri della richiesta
Parametro Tipo Obbligatorio Descrizione
tool_idintID strumento, dalla lista strumenti
paramsobjectParametri attività, oggetto JSON, campi dipendenti dallo strumento
webhook_urlstringNoURL di callback per notifica di completamento
priorityintNoPriorità attività 1-10, default 5
idempotency_keystringNoChiave di idempotenza, previene duplicati
execution_optionsobjectNoOpzioni di esecuzione, oggetto JSON
Esempio di richiesta
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"
  }'
Esempio di risposta
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

Il saldo viene verificato prima della chiamata. Saldo insufficiente = errore insufficient_coins. Le coin vengono scalate al successo della sottomissione.

Consulta dettaglio attività

GET https://nsfwrouter.xyz/api/v1/tasks/query

Consulta dettagli e stato per ID. Durante l'elaborazione, lo stato più recente viene recuperato dal cluster GPU. Query ripetute entro 10 secondi restituiscono cache del DB senza richieste remote.

Parametri di query
Parametro Tipo Obbligatorio Descrizione
idintID attività
Esempio di risposta
{
  "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
    }
  }
}
Valori di stato attività
status Significato
0In elaborazione
1Completato
-1Annullato
-2Fallito

Lista attività

GET https://nsfwrouter.xyz/api/v1/tasks

Query paginata delle attività dell'account corrente, con filtri per strumento, stato e intervallo di date.

Parametri di query
Parametro Tipo Obbligatorio Descrizione
pageintNoNumero pagina, default 1
page_sizeintNoDimensione pagina, default 20, max 50
tool_idintNoFiltra per strumento
statusintNoFiltra per stato (0/1/-1/-2)
daysintNoIntervallo in giorni, default 30
Esempio di risposta
{
  "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
  }
}
Descrizione campi task_output_json
Campo Tipo Descrizione
typestringTipo risultato: image o video
urlstringURL CDN del file risultato
file_namestringNome file
file_sizeintDimensione file (byte)
mime_typestringTipo MIME, es: image/png, video/mp4
widthintLarghezza (pixel)
heightintAltezza (pixel)

Saldo account

GET https://nsfwrouter.xyz/api/v1/account/balance

Consulta saldo coin, ricarica totale e consumo totale dell'account.

Esempio di risposta
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Callback Webhook

Se webhook_url viene fornito, al completamento, fallimento o annullamento viene inviato un POST a quell'URL. Il body è JSON.

Header della richiesta callback
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Body della richiesta 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
  }
}

Il tuo server deve rispondere con HTTP 2xx. In caso di risposta non-2xx o timeout (10 sec), il sistema ritenta fino a 5 volte con backoff esponenziale (60s → 120s → 240s → 480s → 960s).

Codici di errore

Tutte le risposte di errore usano un formato unificato: {"code": codice, "message": "identificatore", "data": {}}

Codice errore message Descrizione
20001api_key_requiredChiave API non fornita
20001invalid_api_keyChiave API non valida
20001ip_not_allowedIP non in whitelist
20001permission_deniedPermesso negato
30001tool_not_foundStrumento non trovato
30001task_not_foundAttività non trovata
30001insufficient_coinsSaldo coin insufficiente
30001task_submit_failedSottomissione attività fallita
30001task_query_failedQuery attività fallita
30001task_already_existsAttività già esistente (idempotenza)
40001tool_id_requiredParametro tool_id mancante
40001param_errorErrore di parametro
40001webhook_url_invalidFormato webhook_url non valido
40001params_must_be_json_object_or_arrayparams deve essere un oggetto o array JSON
40001execution_options_must_be_json_object_or_arrayexecution_options deve essere un oggetto o array JSON
Range codici di errore
Range Categoria
1xxxxErrore di sistema
2xxxxErrore di autenticazione
3xxxxErrore di logica di business
4xxxxErrore di parametro
5xxxxErrore di dipendenza esterna