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
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ètre | Type | Requis | Description |
|---|---|---|---|
| tool_id | int | Oui | ID de l'outil, obtenu depuis la liste des outils |
| params | object | Oui | Paramètres de la tâche, objet JSON, les champs dépendent de l'outil |
| webhook_url | string | Non | URL de callback pour la notification de fin |
| priority | int | Non | Priorité de la tâche 1-10, par défaut 5 |
| idempotency_key | string | Non | Clé d'idempotence, évite les soumissions en double |
| execution_options | object | Non | Options d'exécution, objet 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"
}
}
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
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ètre | Type | Requis | Description |
|---|---|---|---|
| id | int | Oui | ID de tâche |
{
"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 | Signification |
|---|---|
| 0 | En traitement |
| 1 | Terminé |
| -1 | Annulé |
| -2 | Échec |
Liste des tâches
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ètre | Type | Requis | Description |
|---|---|---|---|
| page | int | Non | Numéro de page, par défaut 1 |
| page_size | int | Non | Taille de page, par défaut 20, maximum 50 |
| tool_id | int | Non | Filtrer par outil |
| status | int | Non | Filtrer par statut (0/1/-1/-2) |
| days | int | Non | Plage de jours, par défaut 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
}
}
| Champ | Type | Description |
|---|---|---|
| type | string | Type de résultat : image ou video |
| url | string | URL CDN du fichier résultat |
| file_name | string | Nom du fichier |
| file_size | int | Taille du fichier (octets) |
| mime_type | string | Type MIME, ex : image/png, video/mp4 |
| width | int | Largeur (pixels) |
| height | int | Hauteur (pixels) |
Solde du compte
https://nsfwrouter.xyz/api/v1/account/balance
Consultez le solde de jetons, la recharge totale et la consommation totale du compte courant.
{
"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.
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
}
}
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 |
|---|---|---|
| 20001 | api_key_required | Clé API non fournie |
| 20001 | invalid_api_key | Clé API invalide |
| 20001 | ip_not_allowed | IP non dans la liste blanche |
| 20001 | permission_denied | Permission refusée |
| 30001 | tool_not_found | Outil introuvable |
| 30001 | task_not_found | Tâche introuvable |
| 30001 | insufficient_coins | Solde de jetons insuffisant |
| 30001 | task_submit_failed | Échec de la soumission de tâche |
| 30001 | task_query_failed | Échec de la requête de tâche |
| 30001 | task_already_exists | La tâche existe déjà (idempotence) |
| 40001 | tool_id_required | Paramètre tool_id manquant |
| 40001 | param_error | Erreur de paramètre |
| 40001 | webhook_url_invalid | Format de webhook_url invalide |
| 40001 | params_must_be_json_object_or_array | params doit être un objet ou tableau JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options doit être un objet ou tableau JSON |
| Plage | Catégorie |
|---|---|
| 1xxxx | Erreur système |
| 2xxxx | Erreur d'authentification |
| 3xxxx | Erreur de logique métier |
| 4xxxx | Erreur de paramètre |
| 5xxxx | Erreur de dépendance externe |