Documentación API
Llama a todas las capacidades de IA con tu API Key, pago por uso, integra con unas líneas de código.
Autenticación
Todas las peticiones API deben incluir la cabecera Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Obtén tu API Key desde la página "Claves API" de la consola. Una clave por cuenta. Para restablecerla, usa la consola; la clave anterior se invalida inmediatamente.
Crear tarea
https://nsfwrouter.xyz/api/v1/tasks/create
Envía una tarea de IA al clúster GPU para su ejecución. Las tareas se procesan asíncronamente y devuelven un ID. Obtén los resultados vía API de consulta o Webhook.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| tool_id | int | Sí | ID de herramienta, se obtiene del listado |
| params | object | Sí | Parámetros de la tarea, objeto JSON, los campos dependen de la herramienta |
| webhook_url | string | No | URL de callback para notificación de finalización |
| priority | int | No | Prioridad de la tarea 1-10, por defecto 5 |
| idempotency_key | string | No | Clave de idempotencia, evita envíos duplicados |
| execution_options | object | No | Opciones de ejecución, objeto 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"
}
}
Se verifica el saldo antes de llamar. Si es insuficiente se devuelve insufficient_coins. Las monedas se descuentan al enviar la tarea correctamente.
Consultar detalle de tarea
https://nsfwrouter.xyz/api/v1/tasks/query
Consulta detalles y estado de la tarea por ID. Durante el procesamiento, se obtiene el último estado del clúster GPU. Repetir consultas en 10 segundos devuelve caché de la base de datos sin peticiones remotas.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| id | int | Sí | ID de tarea |
{
"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 | Significado |
|---|---|
| 0 | Procesando |
| 1 | Completado |
| -1 | Cancelado |
| -2 | Fallido |
Lista de tareas
https://nsfwrouter.xyz/api/v1/tasks
Consulta paginada de las tareas de la cuenta actual, admite filtrado por herramienta, estado y rango de fechas.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| page | int | No | Número de página, por defecto 1 |
| page_size | int | No | Tamaño de página, por defecto 20, máximo 50 |
| tool_id | int | No | Filtrar por herramienta |
| status | int | No | Filtrar por estado (0/1/-1/-2) |
| days | int | No | Rango de días de consulta, por defecto 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
}
}
| Campo | Tipo | Descripción |
|---|---|---|
| type | string | Tipo de resultado: image o video |
| url | string | URL CDN del archivo de resultado |
| file_name | string | Nombre del archivo |
| file_size | int | Tamaño del archivo (bytes) |
| mime_type | string | Tipo MIME, ej: image/png, video/mp4 |
| width | int | Ancho (píxeles) |
| height | int | Alto (píxeles) |
Saldo de cuenta
https://nsfwrouter.xyz/api/v1/account/balance
Consulta el saldo de monedas, la recarga total y el consumo total de la cuenta actual.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Callback Webhook
Si se proporciona webhook_url al crear la tarea, se enviará un POST a esa URL cuando la tarea se complete, falle o cancele. El cuerpo es 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
}
}
Tu servidor debe devolver un código HTTP 2xx para confirmar la recepción. Si responde non-2xx o hay timeout (10 segundos), el sistema reintentará hasta 5 veces con backoff exponencial (60s → 120s → 240s → 480s → 960s).
Códigos de error
Todas las respuestas de error usan un formato unificado: {"code": código, "message": "identificador", "data": {}}
| Código de error | message | Descripción |
|---|---|---|
| 20001 | api_key_required | No se proporcionó API Key |
| 20001 | invalid_api_key | API Key no válida |
| 20001 | ip_not_allowed | IP no en la lista blanca |
| 20001 | permission_denied | Permiso denegado |
| 30001 | tool_not_found | Herramienta no encontrada |
| 30001 | task_not_found | Tarea no encontrada |
| 30001 | insufficient_coins | Saldo de monedas insuficiente |
| 30001 | task_submit_failed | Envío de tarea fallido |
| 30001 | task_query_failed | Consulta de tarea fallida |
| 30001 | task_already_exists | La tarea ya existe (idempotencia) |
| 40001 | tool_id_required | Falta el parámetro tool_id |
| 40001 | param_error | Error de parámetros |
| 40001 | webhook_url_invalid | Formato de webhook_url no válido |
| 40001 | params_must_be_json_object_or_array | params debe ser un objeto o array JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options debe ser un objeto o array JSON |
| Rango | Categoría |
|---|---|
| 1xxxx | Error de sistema |
| 2xxxx | Error de autenticación |
| 3xxxx | Error de lógica de negocio |
| 4xxxx | Error de parámetros |
| 5xxxx | Error de dependencia externa |