Documentação da API
Chame todas as capacidades de IA com sua chave de API, pagamento por uso, integre com poucas linhas de código.
Autenticação
Todas as requisições à API devem incluir o header Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Obtenha sua chave de API na página "Chaves de API" do console. Uma chave por conta. Para redefinir, use o console; a chave antiga é invalidada imediatamente.
Criar tarefa
https://nsfwrouter.xyz/api/v1/tasks/create
Envie uma tarefa de IA ao cluster GPU. As tarefas são assíncronas e retornam um ID. Obtenha resultados via API de consulta ou Webhook.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| tool_id | int | Sim | ID da ferramenta, da lista de ferramentas |
| params | object | Sim | Parâmetros da tarefa, objeto JSON, campos dependem da ferramenta |
| webhook_url | string | Não | URL de callback para notificação de conclusão |
| priority | int | Não | Prioridade da tarefa 1-10, padrão 5 |
| idempotency_key | string | Não | Chave de idempotência, evita envios duplicados |
| execution_options | object | Não | Opções de execução, 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"
}
}
O saldo é verificado antes da chamada. Saldo insuficiente = erro insufficient_coins. As moedas são deduzidas ao enviar a tarefa com sucesso.
Consultar detalhe da tarefa
https://nsfwrouter.xyz/api/v1/tasks/query
Consulte detalhes e status por ID. Durante o processamento, o status mais recente é obtido do cluster GPU. Consultas repetidas em 10 segundos retornam cache do banco sem requisições remotas.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | int | Sim | ID da tarefa |
{
"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 | Processando |
| 1 | Concluído |
| -1 | Cancelado |
| -2 | Falhou |
Lista de tarefas
https://nsfwrouter.xyz/api/v1/tasks
Consulta paginada das tarefas da conta atual, com filtros por ferramenta, status e período.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | int | Não | Número da página, padrão 1 |
| page_size | int | Não | Tamanho da página, padrão 20, máximo 50 |
| tool_id | int | Não | Filtrar por ferramenta |
| status | int | Não | Filtrar por status (0/1/-1/-2) |
| days | int | Não | Período em dias, padrão 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 | Descrição |
|---|---|---|
| type | string | Tipo de resultado: image ou video |
| url | string | URL CDN do arquivo de resultado |
| file_name | string | Nome do arquivo |
| file_size | int | Tamanho do arquivo (bytes) |
| mime_type | string | Tipo MIME, ex: image/png, video/mp4 |
| width | int | Largura (pixels) |
| height | int | Altura (pixels) |
Saldo da conta
https://nsfwrouter.xyz/api/v1/account/balance
Consulte o saldo de moedas, recarga total e consumo total da conta atual.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Callback Webhook
Se webhook_url for fornecido, um POST é enviado a essa URL quando a tarefa termina, falha ou é cancelada. O corpo é 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
}
}
Seu servidor deve retornar HTTP 2xx. Em caso de não-2xx ou timeout (10 seg), o sistema retenta até 5 vezes com backoff exponencial (60s → 120s → 240s → 480s → 960s).
Códigos de erro
Todas as respostas de erro usam formato unificado: {"code": código, "message": "identificador", "data": {}}
| Código de erro | message | Descrição |
|---|---|---|
| 20001 | api_key_required | Chave de API não fornecida |
| 20001 | invalid_api_key | Chave de API inválida |
| 20001 | ip_not_allowed | IP não está na whitelist |
| 20001 | permission_denied | Permissão negada |
| 30001 | tool_not_found | Ferramenta não encontrada |
| 30001 | task_not_found | Tarefa não encontrada |
| 30001 | insufficient_coins | Saldo de moedas insuficiente |
| 30001 | task_submit_failed | Envio de tarefa falhou |
| 30001 | task_query_failed | Consulta de tarefa falhou |
| 30001 | task_already_exists | Tarefa já existe (idempotência) |
| 40001 | tool_id_required | Parâmetro tool_id ausente |
| 40001 | param_error | Erro de parâmetro |
| 40001 | webhook_url_invalid | Formato de webhook_url inválido |
| 40001 | params_must_be_json_object_or_array | params deve ser um objeto ou array JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options deve ser um objeto ou array JSON |
| Faixa | Categoria |
|---|---|
| 1xxxx | Erro de sistema |
| 2xxxx | Erro de autenticação |
| 3xxxx | Erro de lógica de negócio |
| 4xxxx | Erro de parâmetro |
| 5xxxx | Erro de dependência externa |