Documentación API

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

POST 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ámetros de la petición
Parámetro Tipo Obligatorio Descripción
tool_idintID de herramienta, se obtiene del listado
paramsobjectParámetros de la tarea, objeto JSON, los campos dependen de la herramienta
webhook_urlstringNoURL de callback para notificación de finalización
priorityintNoPrioridad de la tarea 1-10, por defecto 5
idempotency_keystringNoClave de idempotencia, evita envíos duplicados
execution_optionsobjectNoOpciones de ejecución, objeto JSON
Ejemplo de petición
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"
  }'
Ejemplo de respuesta
{
  "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

GET 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ámetros de consulta
Parámetro Tipo Obligatorio Descripción
idintID de tarea
Ejemplo de respuesta
{
  "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
    }
  }
}
Valores de estado de tarea
status Significado
0Procesando
1Completado
-1Cancelado
-2Fallido

Lista de tareas

GET 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ámetros de consulta
Parámetro Tipo Obligatorio Descripción
pageintNoNúmero de página, por defecto 1
page_sizeintNoTamaño de página, por defecto 20, máximo 50
tool_idintNoFiltrar por herramienta
statusintNoFiltrar por estado (0/1/-1/-2)
daysintNoRango de días de consulta, por defecto 30
Ejemplo de respuesta
{
  "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
  }
}
Descripción de campos de task_output_json
Campo Tipo Descripción
typestringTipo de resultado: image o video
urlstringURL CDN del archivo de resultado
file_namestringNombre del archivo
file_sizeintTamaño del archivo (bytes)
mime_typestringTipo MIME, ej: image/png, video/mp4
widthintAncho (píxeles)
heightintAlto (píxeles)

Saldo de cuenta

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

Consulta el saldo de monedas, la recarga total y el consumo total de la cuenta actual.

Ejemplo de respuesta
{
  "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.

Cabeceras de la petición callback
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Cuerpo de la petición 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
  }
}

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
20001api_key_requiredNo se proporcionó API Key
20001invalid_api_keyAPI Key no válida
20001ip_not_allowedIP no en la lista blanca
20001permission_deniedPermiso denegado
30001tool_not_foundHerramienta no encontrada
30001task_not_foundTarea no encontrada
30001insufficient_coinsSaldo de monedas insuficiente
30001task_submit_failedEnvío de tarea fallido
30001task_query_failedConsulta de tarea fallida
30001task_already_existsLa tarea ya existe (idempotencia)
40001tool_id_requiredFalta el parámetro tool_id
40001param_errorError de parámetros
40001webhook_url_invalidFormato de webhook_url no válido
40001params_must_be_json_object_or_arrayparams debe ser un objeto o array JSON
40001execution_options_must_be_json_object_or_arrayexecution_options debe ser un objeto o array JSON
Rangos de códigos de error
Rango Categoría
1xxxxError de sistema
2xxxxError de autenticación
3xxxxError de lógica de negocio
4xxxxError de parámetros
5xxxxError de dependencia externa