Documentation API

Documentation API

Appelez toutes les capacités IA via votre clé API, paiement à l'usage, intégrez en quelques lignes de code.

Authentification

Toutes les requêtes API doivent inclure l'en-tête Authorization.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

Obtenez votre clé API depuis la page « Clés API » de la console. Une clé par compte. Pour la réinitialiser, utilisez la console ; l'ancienne clé est immédiatement invalidée.

Créer une tâche

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

Soumettez une tâche IA au cluster GPU pour exécution. Les tâches sont asynchrones et renvoient un ID. Obtenez les résultats via l'API de requête ou Webhook.

Paramètres de la requête
Paramètre Type Requis Description
tool_idintOuiID de l'outil, obtenu depuis la liste des outils
paramsobjectOuiParamètres de la tâche, objet JSON, les champs dépendent de l'outil
webhook_urlstringNonURL de callback pour la notification de fin
priorityintNonPriorité de la tâche 1-10, par défaut 5
idempotency_keystringNonClé d'idempotence, évite les soumissions en double
execution_optionsobjectNonOptions d'exécution, objet JSON
Exemple de requête
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"
  }'
Exemple de réponse
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

Le solde du compte est vérifié avant l'appel. Solde insuffisant = erreur insufficient_coins. Les jetons sont débités dès la soumission réussie.

Consulter le détail d'une tâche

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

Consultez les détails et le statut d'une tâche par ID. Pendant le traitement, le dernier statut est récupéré du cluster GPU. Les requêtes répétées dans les 10 secondes renvoient le cache de la base de données sans requête distante.

Paramètres de requête
Paramètre Type Requis Description
idintOuiID de tâche
Exemple de réponse
{
  "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
    }
  }
}
Valeurs de statut de tâche
status Signification
0En traitement
1Terminé
-1Annulé
-2Échec

Liste des tâches

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

Requête paginée des tâches du compte courant, avec filtrage par outil, statut et plage de dates.

Paramètres de requête
Paramètre Type Requis Description
pageintNonNuméro de page, par défaut 1
page_sizeintNonTaille de page, par défaut 20, maximum 50
tool_idintNonFiltrer par outil
statusintNonFiltrer par statut (0/1/-1/-2)
daysintNonPlage de jours, par défaut 30
Exemple de réponse
{
  "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
  }
}
Description des champs task_output_json
Champ Type Description
typestringType de résultat : image ou video
urlstringURL CDN du fichier résultat
file_namestringNom du fichier
file_sizeintTaille du fichier (octets)
mime_typestringType MIME, ex : image/png, video/mp4
widthintLargeur (pixels)
heightintHauteur (pixels)

Solde du compte

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

Consultez le solde de jetons, la recharge totale et la consommation totale du compte courant.

Exemple de réponse
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Callback Webhook

Si webhook_url est fourni lors de la création, une requête POST est envoyée à cette URL quand la tâche se termine, échoue ou est annulée. Le corps est en JSON.

En-têtes de la requête callback
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Corps de la requête 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
  }
}

Votre serveur doit renvoyer un code HTTP 2xx pour confirmer la réception. En cas de réponse non-2xx ou de timeout (10 secondes), le système réessaie jusqu'à 5 fois avec un backoff exponentiel (60s → 120s → 240s → 480s → 960s).

Codes d'erreur

Toutes les réponses d'erreur utilisent un format unifié : {"code": code_erreur, "message": "identifiant", "data": {}}

Code d'erreur message Description
20001api_key_requiredClé API non fournie
20001invalid_api_keyClé API invalide
20001ip_not_allowedIP non dans la liste blanche
20001permission_deniedPermission refusée
30001tool_not_foundOutil introuvable
30001task_not_foundTâche introuvable
30001insufficient_coinsSolde de jetons insuffisant
30001task_submit_failedÉchec de la soumission de tâche
30001task_query_failedÉchec de la requête de tâche
30001task_already_existsLa tâche existe déjà (idempotence)
40001tool_id_requiredParamètre tool_id manquant
40001param_errorErreur de paramètre
40001webhook_url_invalidFormat de webhook_url invalide
40001params_must_be_json_object_or_arrayparams doit être un objet ou tableau JSON
40001execution_options_must_be_json_object_or_arrayexecution_options doit être un objet ou tableau JSON
Plages de codes d'erreur
Plage Catégorie
1xxxxErreur système
2xxxxErreur d'authentification
3xxxxErreur de logique métier
4xxxxErreur de paramètre
5xxxxErreur de dépendance externe