Geração de mídia (vídeo, imagens, música)
O NordRouter pode gerar imagens, vídeos e músicas usando a mesma chave sk-nr-… e o mesmo saldo das modelos de texto. Você paga pelo uso, sem tokens nem pacotes.
Solicitações somente pelo backend, não pelo navegador
Não é possível acessar /media/* diretamente pelo navegador: a solicitação não passará pela verificação de CORS e terminará com Failed to fetch.
Isso é intencional. O endpoint exige sua chave no cabeçalho Authorization, e tudo o que chega ao navegador fica visível para qualquer pessoa que abrir as ferramentas do desenvolvedor: sua chave será exposta e outras pessoas poderão gastar seu saldo. Nenhum cabeçalho em fetch protege contra isso.
A arquitetura correta:
navegador → seu servidor (a chave fica aqui) → nordrouter.comO arquivo gerado é disponibilizado por um link comum, que você pode usar diretamente em <img src> ou <video src> na página, sem precisar configurar nada.
Como funciona
A geração é assíncrona (vídeos e músicas levam de alguns segundos a alguns minutos):
- Crie uma tarefa —
POST /media/generatecom o modelo e os parâmetros. - Aguarde o resultado — consulte
GET /media/job/:idaté questatussejadone. - Obtenha o arquivo — usando
result_url(um link paranordrouter.com).
1. Criar uma tarefa
curl https://nordrouter.com/media/generate \
-H "Authorization: Bearer sk-nr-YOUR-KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "image/nano-banana-2",
"input": { "prompt": "уютная хижина в зимнем лесу, акварель", "resolution": "2k" }
}'Resposta:
{ "id": "beefb531-…", "model": "image/nano-banana-2", "status": "processing",
"poll": "https://nordrouter.com/media/job/beefb531-…" }Os erros sempre têm o mesmo formato: { "error": "texto explicativo", "code": "missing_param" }. Use code para ramificações no código (invalid_input, missing_param, unknown_model, insufficient_balance, rate_limited, no_auth…), e error para exibição ao usuário.
2. Aguardar o resultado
curl https://nordrouter.com/media/job/beefb531-…{ "id": "beefb531-…", "status": "done",
"result_url": "https://nordrouter.com/media/file/beefb531-…",
"cost_usd": 0.052, "error": null }status: processing → done (ou failed). O arquivo fica disponível em result_url.
🎵 Suno gera duas faixas por tarefa: a primeira fica em
result_url, e a segunda, emresult_url_2(no mesmo formato de link). O preço é por tarefa e já inclui as duas faixas.
Webhooks (em vez de polling)
Se não quiser consultar o status, informe o campo callback_url em POST /media/generate e enviaremos o resultado automaticamente por uma solicitação POST quando a tarefa for concluída:
curl https://nordrouter.com/media/generate \
-H "Authorization: Bearer sk-nr-YOUR-KEY" -H "Content-Type: application/json" \
-d '{
"model": "image/nano-banana-2",
"input": { "prompt": "…" },
"callback_url": "https://your-server.com/webhooks/nordrouter",
"callback_secret": "ваш-секрет"
}'Quando a tarefa passar para done/failed, será enviada para callback_url uma solicitação POST com o mesmo corpo retornado por GET /media/job/:id, além do campo event:
{ "event": "media.completed", "id": "beefb531-…", "status": "done",
"result_url": "https://nordrouter.com/media/file/beefb531-…", "cost_usd": 0.052, "error": null }event: media.completed ou media.failed.
Verificação da assinatura. Se você definir callback_secret, o cabeçalho X-NR-Signature conterá sha256=<hmac> — HMAC-SHA256 do corpo da solicitação, usando seu segredo. Confira a assinatura para confirmar que a solicitação veio de nós:
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, request.headers["X-NR-Signature"])Requisitos e confiabilidade:
callback_urldeve usarhttps://e ser um endereço público (IP interno/privado será rejeitado com erro 400).- Até 4 tentativas de entrega, com intervalos crescentes; responda com
2xx, caso contrário, tentaremos novamente. - O webhook não substitui o polling: você pode combiná-los ou usar
GET /media/job/:idcomo alternativa.
Saiba mais
O ciclo de vida da tarefa, a verificação da assinatura com exemplos e a confiabilidade da entrega estão na página Tarefas e webhooks.
3. Lista de modelos e preços
GET /media/models retorna os modelos disponíveis, seus parâmetros e o custo estimado:
{ "models": [
{ "id": "image/nano-banana-2", "type": "image",
"fields": [ {"name":"prompt","type":"textarea"}, {"name":"resolution","type":"select","options":["1k","2k","4k"]},
{"name":"safety_filter","type":"bool","default":true} ],
"est_usd": 0.052 }
], "retention_days": 14 }Referência completa
Todos os modelos, com os parâmetros input e os preços, estão na página Mídia: todos os modelos e cobrança.
Modelos
Estão disponíveis 95 modelos — a lista completa e atualizada, com parâmetros e preços, está sempre em GET /media/models. Principais famílias:
| Tipo | Família | Modos | ≈ preço |
|---|---|---|---|
| 🖼 Imagens | Nano Banana / 2 / Pro (image/nano-banana*) | texto→imagem, edição, até 4K | a partir de $0.025 |
| 🖼 | Imagen 4 Fast / Ultra (image/imagen4*) | texto→imagem | a partir de $0.025 |
| 🖼 | GPT Image 1.5 / 2 (image/gpt-image-*) | texto→imagem, edição, até 4K | a partir de $0.025 |
| 🖼 | Flux 2 Pro / Flex (image/flux2-*) | texto→imagem, edição | a partir de $0.03 |
| 🖼 | Seedream v4 / 4.5 / 5 Lite (image/seedream-*) | texto→imagem, edição | a partir de $0.04 |
| 🖼 | Ideogram v3 / Character (image/ideogram-*) | texto, remix, personagem | a partir de $0.02 |
| 🖼 | Qwen / Wan Image / Grok / Z-Image | texto→imagem, edição | a partir de $0.01 |
| 🛠 Utilitários | Topaz / Recraft (image/*upscale*, image/recraft-remove-bg) | aumento de resolução até 8K, remoção de fundo | a partir de $0.01 |
| 🎬 Vídeo | Veo 3.1 Lite / Fast / Quality (video/veo-3.1-*) | texto/foto→vídeo | a partir de $0.19 |
| 🎬 | Kling 2.1 → 3.0 (video/kling-*) | texto/foto→vídeo, movimento, avatares, até 4K e 15s | a partir de $0.16 |
| 🎬 | Wan 2.2 → 2.7 (video/wan-*) | texto/foto/vídeo→vídeo, fala→vídeo | a partir de $0.25 |
| 🎬 | Seedance 1.5 / 2 / Fast / Mini (video/seedance-*) | texto/foto→vídeo, até 4K, áudio | a partir de $0.06 |
| 🎬 | Hailuo 02 / 2.3 (video/hailuo-*) | texto/foto→vídeo | a partir de $0.08 |
| 🎬 | HappyHorse 1.0 / 1.1 (video/happyhorse-*) | texto/foto/referência→vídeo, edição de vídeo | a partir de $0.70 |
| 🎬 | Grok Video / 1.5 (video/grok-*) | texto/foto→vídeo, até 30s | a partir de $0.06 |
| 🎬 | Gemini Omni (video/gemini-omni) | vídeo com áudio, até 4K | a partir de $0.39 |
| 🗣 Avatares | Kling Avatar, OmniHuman, InfiniteTalk, Lip Sync | foto+áudio→vídeo com fala | a partir de $0.19 |
| 🎵 Música | Suno V6 / V6 Wild / V6 Mini (music/suno-*) | texto/estilo→2 faixas, cover, continuação, vocais, faixas, sons | ~$0.08 |
| 🎙 Síntese de voz | ElevenLabs Turbo / Multilingual (audio/elevenlabs-*) | texto→fala, isolamento de voz | a partir de $0.04 / 1000 caracteres |
Parâmetros
Os parâmetros dependem do modelo — a lista exata está em /media/models (campo fields: nome, tipo, opções, valor padrão). Os nomes seguem um padrão único (snake_case), e os valores usam letras minúsculas. Parâmetros comuns:
prompt— descrição (para todos os modelos generativos).resolution—1k/2k/4k(imagens) ou480p/720p/768p/1080p/4k(vídeo). O preço depende da resolução.aspect_ratio—1:1,16:9,9:16etc.; modelos com seleção de tamanho oferecem1:1-hd.duration— duração do vídeo em segundos (na maioria,5/10; no Kling 3.0 e Wan 2.7, até15; no Grok, até30). O vídeo é cobrado por segundo.audio— faixa de áudio no vídeo (true/false). Com áudio, o preço é maior — a estimativa em/media/estimateconsidera isso.mode/quality/render_mode— nível de qualidade (Kling 3.0standard/pro/4k, GPT Imagemedium/high, Ideogramfast/balanced/quality).safety_filter— filtro de conteúdo 18+ (ativado por padrão).enhance_prompt— o próprio modelo acrescenta detalhes ao prompt (Qwen, Flux 3).file_format— formato do arquivo (png/jpegpara imagens,glb/obj/fbx/stl/usdzpara 3D).image— imagem de entrada (edição, foto→vídeo; envie um link direto ou faça upload via/media/upload).video_url/audio_url— vídeo/áudio de entrada (edição de vídeo, sincronização labial, avatares).
Música: title, style, instrumental, version (v6, v6-wild, v6-mini), advanced (ajuste preciso: título, estilo e duração duration personalizados), exclude_styles, vocal (female/male), continue_from (a partir de qual segundo continuar); para sons — loop, bpm, tonality; separação em faixas — mode (vocals, stems, track) e track (qual faixa extrair). Ajustes finos de estilo: style_weight, weirdness, audio_weight (0…1).
Síntese de voz: text, voice (nome curto da voz em options, por exemplo, james, bella, Zephyr), speed; nos modelos Gemini — style, pace, accent, voice_description, scene, temperature. Diálogo com duas vozes:
{ "model": "audio/gemini-3.1-flash-tts",
"input": {
"voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
"dialogue": [ { "speaker": 1, "text": "Olá! Hoje recebemos…" }, { "speaker": 2, "text": "Obrigado pelo convite." } ]
} }O preço exato de uma configuração específica antes da execução é informado por POST /media/estimate com os mesmos model + input.
Os nomes antigos dos parâmetros também funcionam
Em 19 de outubro de 2026, os parâmetros passaram a ter nomes e valores padronizados (snake_case, valores em minúsculas). Se a sua integração envia nomes e valores da versão anterior da documentação, não é necessário alterar nada: o servidor também os aceita, e o resultado e o preço são os mesmos. Em /media/models e nesta documentação, aparecem apenas os novos.
🧊 Modelos 3D
Geração 3D a partir de texto ou foto. A saída inclui GLB (além de OBJ, FBX, STL, USDZ, USD e 3MF em modelos diferentes) e uma imagem de pré-visualização: a tarefa retorna vários arquivos, cada um com sua própria extensão.
A chamada é igual à das outras mídias: POST /media/generate e consulta de status com GET /media/job/{id}.
curl -X POST https://nordrouter.com/media/generate -H "Authorization: Bearer $NR_KEY" -H "Content-Type: application/json" -d '{"model":"3d/tripo-text","input":{"prompt":"caneca de cerâmica com esmalte fosco"}}'| id | entrada | ≈ preço | características |
|---|---|---|---|
3d/tripo-text, 3d/tripo-image | texto, foto | a partir de $0.31 | mais barato de todos, malha quad, PBR |
3d/hunyuan-rapid-text, -image | texto, foto | a partir de $0.43 | rápido, 5 formatos de arquivo |
3d/seed3d-image | foto | a partir de $0.50 | GLB, OBJ, USD, USDZ |
3d/hunyuan-pro-text, -image | texto, foto | a partir de $0.71 | até 1,5 milhão de polígonos |
3d/meshy-text, -image, -multi-image | texto, foto, até 4 ângulos | a partir de $0.94 | texturas de até 8K, pose de personagem |
Foto como textura. Os modelos 3d/meshy-* aceitam uma imagem separada (texture_photo) ou uma descrição textual do material (texture_text): a textura é definida independentemente da geometria. O 3d/meshy-multi-image recebe até quatro ângulos do mesmo objeto, o que resulta em uma geometria mais precisa.
O preço só é conhecido após a geração
A geração 3D é cobrada de acordo com os recursos efetivamente utilizados, então o valor exato só é conhecido depois que o modelo é processado. Reservamos o custo máximo possível e, quando o processamento termina, cobramos o valor real e devolvemos a diferença. O valor final fica sempre visível no campo cost_usd.
No Studio, esses modelos são identificados por um selo, e a geração só começa após sua confirmação.
O processamento demora. A geração 3D leva de meio minuto a vários minutos, mais tempo do que uma imagem ou um vídeo curto. Não é necessário manter a tarefa aberta: o status é salvo e há webhooks.
Custo e armazenamento
- O valor é descontado do seu saldo em USD com base no custo real da geração; o valor exato aparece em
cost_usdapós a conclusão. - Gerações malsucedidas não são cobradas; o valor reservado é devolvido automaticamente.
- Os arquivos ficam armazenados nos nossos servidores por tempo limitado (consulte
retention_daysem/media/models); faça o download para mantê-los.