Visão geral da API REST
A API REST do Nodaro executa workflows e nós avulsos, consulta jobs periodicamente, envia mídia e gerencia entidades por HTTPS, com JSON e um token Bearer.
A API REST do Nodaro é a interface HTTP do Nodaro: ela executa workflows e nós avulsos, informa o status dos jobs deles, armazena a sua mídia e gerencia personagens, predefinições e espaços de trabalho. Requisições e respostas são JSON por HTTPS, e toda requisição leva um token Bearer. A mesma API atende o Nodaro Cloud e as instalações self-hosted, e o SDK para TypeScript e a CLI são clientes leves dela.
URL base
| Onde o Nodaro roda | URL base |
|---|---|
| Nodaro Cloud | https://app.nodaro.ai |
| Uma instalação self-hosted | O endereço da própria instalação, por exemplo http://localhost:3000 em uma instalação padrão da Community Edition |
Todo caminho começa com /v1/, por exemplo https://app.nodaro.ai/v1/nodes. Alguns endpoints existem só no Nodaro Cloud, como os de créditos e de organizações, e respondem 404 nas outras edições. Cada página informa quando um endpoint é limitado.
Autenticação
Envie Authorization: Bearer <token> em toda requisição. Use um token de API pessoal (ndr_…) de Configurações › Tokens de API para a sua própria conta. Use um token de acesso OAuth (ndr_app_…) quando o seu produto age em nome de outros usuários do Nodaro, ou o JWT da sua sessão em uma instalação da Community Edition. Alguns endpoints de descoberta, como GET /v1/nodes e GET /v1/models, não precisam de token. Leia Autenticação para criar um token.
A sua primeira chamada
Este exemplo gera uma imagem com um nó e lê o resultado. A geração é assíncrona: a primeira chamada retorna o ID de um job, e você consulta o job periodicamente até ele ser concluído.
export NODARO_API_KEY="ndr_..."
# 1. Start the job
curl -s -X POST https://app.nodaro.ai/v1/generate-image \
-H "Authorization: Bearer $NODARO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a snow leopard on a mountain ridge at dawn",
"provider": "nano-banana-pro",
"aspectRatio": "16:9"
}'
# {"jobId":"0f1a9c2e-5b7d-4e8a-9c31-6d2f8b4a7e10"}
# 2. Poll the job until its status is "completed"
curl -s https://app.nodaro.ai/v1/jobs/0f1a9c2e-5b7d-4e8a-9c31-6d2f8b4a7e10/status \
-H "Authorization: Bearer $NODARO_API_KEY"{
"data": {
"id": "0f1a9c2e-5b7d-4e8a-9c31-6d2f8b4a7e10",
"status": "completed",
"progress": 100,
"output_data": { "imageUrl": "https://…/0f1a9c2e.png" },
"error_message": null
}
}import { createClient, StaticTokenAuth } from '@nodaro/sdk'
const client = createClient({
baseUrl: 'https://app.nodaro.ai',
auth: new StaticTokenAuth(process.env.NODARO_API_KEY!),
})
// Starts the job and polls it until it finishes.
const output = await client.nodes.runAndWait('generate-image', {
prompt: 'a snow leopard on a mountain ridge at dawn',
provider: 'nano-banana-pro',
aspectRatio: '16:9',
})
console.log(output.imageUrl)nodaro nodes run generate-image \
--param prompt="a snow leopard on a mountain ridge at dawn" \
--param provider=nano-banana-pro \
--param aspectRatio=16:9 \
--watch --json | jq -r '.output_data.imageUrl'O mesmo padrão executa qualquer nó de geração: POST /v1/<node-type> com as configurações do nó e, depois, a consulta periódica do job. Veja Executar um único nó.
Convenções de requisição e resposta
- Entra JSON, sai JSON. Envie os corpos como JSON com
Content-Type: application/json. Os uploads de arquivos são a exceção: eles usammultipart/form-data. - Os IDs são UUIDs. Um ID malformado responde
400 validation_error. - A maioria das respostas vem dentro de
data. Uma leitura retorna{ "data": … }, e uma exclusão ou um cancelamento retorna{ "success": true }. Os endpoints legados de workflow em/v1/api/retornam o payload diretamente. - As gerações retornam o ID de um job.
POST /v1/<node-type>responde com{ "jobId": "…" }, às vezes comadjustmentsouwarningsao lado. - As listas usam cursores. Uma lista retorna um cursor, normalmente
nextCursor(nextemGET /v1/jobs). Envie esse cursor de volta como?cursor=para obter a próxima página. Um cursornullsignifica que não há mais linhas. Os cursores são opacos: nunca analise nem monte um. - Dois estilos de campo. Os objetos de job usam snake_case, como
output_dataecreated_at. Workflows, execuções e a maioria dos outros recursos usam camelCase. - As respostas crescem. Novos campos aparecem com o tempo. Ignore os campos que você não conhece em vez de falhar por causa deles.
- Os erros têm um só formato. Uma chamada com falha retorna um status HTTP e
{ "error": { "code": "…", "message": "…" } }. Decida o tratamento porcode. Veja Erros.
Dois cabeçalhos opcionais mudam como uma requisição é tratada:
| Cabeçalho | O que faz |
|---|---|
X-Nodaro-Workspace | Age em um espaço de trabalho de uma organização: define em qual espaço de trabalho uma lista lê e onde uma criação vai parar. Veja Espaços de trabalho. |
X-Nodaro-Client | Registra qual cliente criou um job: sdk/<version>, cli/<version> ou extension/<name>. Veja Identificar o seu cliente. |
Síncrono ou assíncrono
A maior parte do trabalho no Nodaro leva de segundos a minutos, então a API é assíncrona. Uma rota de geração responde na hora com um jobId, e uma execução de workflow responde 202 Accepted com um executionId. Depois, você consulta periodicamente o job ou a execução, a cada 2 a 5 segundos, até chegar a um status final. Para um workflow que deve terminar em menos de um minuto, POST /v1/api/run?wait=true mantém a conexão aberta por até 600 segundos e retorna o resultado. Algumas rotas respondem de forma síncrona, como os nós de texto inline, o processamento de mídia gratuito e a chamada de LLM com saída estruturada. Leia Síncrono ou assíncrono para ver os detalhes.
Endpoints por área
Executar
| Página | O que cobre | Principais endpoints |
|---|---|---|
| Workflows | Executar um workflow salvo, com ou sem entradas, e gerenciar workflows | POST /v1/workflows/:id/run, POST /v1/api/run, GET /v1/api/schema |
| Nós | Executar um nó sem workflow e descobrir nós, modelos e seletores | POST /v1/<node-type>, GET /v1/nodes, GET /v1/models |
| Jobs | Status e resultados de jobs, consulta periódica em lote, cancelamento e controle das execuções do Gerar vídeo Pro (Generate Video Pro) | GET /v1/jobs/:id/status, POST /v1/jobs/batch-status |
| Execuções | O status e o histórico das execuções de workflow | GET /v1/workflow-executions/:id, GET /v1/workflows/:id/executions |
| Envio de arquivos | Enviar imagens, vídeo e áudio, ou copiar uma URL para o armazenamento | POST /v1/upload, POST /v1/save-to-storage |
| Webhooks | Iniciar um workflow por uma chamada HTTP ou por um agendamento, e enviar resultados para fora | POST /v1/webhooks/:token, POST /v1/workflow-triggers |
Recursos
| Página | O que cobre | Principais endpoints |
|---|---|---|
| Personagens | Personagens, candidatos a retrato, expressões, poses e movimento | /v1/characters, POST /v1/generate-character |
| Objetos | Adereços, produtos e veículos, com a imagem principal e as variações | /v1/objects, POST /v1/generate-object |
| Locais | Lugares, com a imagem principal e as variações | /v1/locations, POST /v1/generate-location |
| Criaturas | Criaturas, com a imagem principal e as variações | /v1/creatures |
| Predefinições | As suas predefinições de nós e o catálogo integrado, somente leitura | GET /v1/node-presets, GET /v1/node-presets/factory |
| Comunidade | Explorar e clonar personagens, locais e objetos compartilhados | GET /v1/community/browse |
| Pipelines | Pipelines de História → vídeo (Story → Video) | POST /v1/pipelines/:id/branch |
| Assistente de prompt | Melhorar o prompt de um nó de geração | POST /v1/prompt-helper/wizard |
| Recast | Gerar de novo um vídeo analisado com o seu próprio elenco | POST /v1/recast |
| Produções do Studio | Produções tomada a tomada | /v1/studio/productions |
| Voz e mídia | Vozes, modificação de voz, dublagem, importação de mídia e ferramentas de áudio | /v1/voices, /v1/download-video, /v1/transcribe |
| Treinamento de personagem | Treinar um modelo com um personagem | POST /v1/characters/:id/train |
| Cenas 3D | Cenas 3D editáveis e a Renderização 3D Pro (3D Render Pro) | POST /v1/3d-scene/generate, POST /v1/pro-3d-render |
Conta
| Página | O que cobre | Principais endpoints |
|---|---|---|
| Espaços de trabalho e organizações | Agir em um espaço de trabalho, organizações, membros, convites e uso | /v1/orgs, /v1/workspaces |
| Créditos | Saldo, transações e consultas de custo | GET /v1/credits/balance, GET /v1/credits/transactions |
Referência
| Página | O que cobre |
|---|---|
| Erros | O envelope de erro, todos os códigos de erro e as dicas de falha dos jobs |
| Limites de taxa | Limites por token, limites por rota e como lidar com o 429 |
| Especificação OpenAPI | A especificação legível por máquina em GET /v1/openapi.json e clientes em outras linguagens |
Limites e erros
Um token de API pessoal permite 30 requisições por minuto por padrão, até no máximo 120, nos endpoints de execução e de listagem de workflows. Algumas rotas têm limites próprios. As consultas periódicas de status não contam para o limite do token. Um 429 significa que você deve diminuir o ritmo e tentar de novo com backoff. Um 4xx significa que você deve corrigir a requisição antes de tentar de novo, e um 5xx costuma ser temporário. Leia Limites de taxa e Erros.
Clientes para a sua linguagem
- TypeScript e JavaScript:
npm install @nodaro/sdk. O SDK encapsula estes endpoints com tipos, erros tipados e funções auxiliares de consulta periódica. - Terminal e CI:
npm install -g @nodaro/cli. A CLI executa workflows, apps e nós avulsos, com--watche--json. - Qualquer outra linguagem: gere um cliente a partir da especificação OpenAPI ou envie requisições HTTPS simples.
- Assistentes de IA: conecte o servidor MCP em vez de escrever código.
Perguntas frequentes
Páginas relacionadas
Autenticação
Workflows
Nós
Jobs
Erros
Última atualização
Desenvolvedores
Desenvolva no Nodaro com a API REST, o SDK para TypeScript e a CLI. Use tokens de API ou OAuth, gere clientes pelo OpenAPI e conecte agentes de IA via MCP.
Autenticação
Autentique chamadas à API do Nodaro com token de API pessoal, token de app OAuth ou JWT de sessão, e crie, limite, vincule e revogue os seus tokens de API.