Skip to content

API de mídia — imagens, vídeo e música ​

Gere imagens, vídeos e músicas com a mesma chave sk-nr-… e usando o mesmo saldo das modelos de texto. Cobrança unificada, pagamento pelo uso, sem assinaturas nem pacotes.

  • Base: https://nordrouter.com (ou https://global-api.nordrouter.com para redes internacionais).
  • Autenticação: cabeçalho Authorization: Bearer sk-nr-… (ou X-API-Key: sk-nr-…).
  • Formato: JSON, geração assíncrona (criar uma tarefa → consultar o status → obter o arquivo).

Endpoints ​

MétodoFinalidade
POST /media/generateCriar uma tarefa de geração
GET /media/job/:idStatus e resultado da tarefa
POST /media/estimateConsultar previamente o preço da configuração
GET /media/modelsLista legível por máquina de modelos e parâmetros
POST /media/uploadEnviar um arquivo de mídia de origem
GET /media/file/:idArquivo pronto (link em result_url)

Ciclo de vida da solicitação ​

1. Criar uma tarefa

bash
curl https://nordrouter.com/media/generate \
  -H "Authorization: Bearer sk-nr-YOUR-KEY" -H "Content-Type: application/json" \
  -d '{ "model": "video/kling-2.6-i2v",
        "input": { "prompt": "movimento suave de aproximação da câmera", "image": "https://…/photo.png", "duration": "5", "audio": true } }'
json
{ "id": "b1f2…", "model": "video/kling-2.6-i2v", "status": "processing", "poll": "https://nordrouter.com/media/job/b1f2…" }

2. Consultar o status (a cada 3–5 s)

bash
curl https://nordrouter.com/media/job/b1f2…
json
{ "id": "b1f2…", "status": "done", "result_url": "https://nordrouter.com/media/file/b1f2…", "cost_usd": 0.55, "error": null }

3. Obter o arquivo — pelo result_url. O link usa nordrouter.com (sua marca); os arquivos ficam armazenados por 14 dias e depois são excluídos. Baixe-os ou transfira-os para seu próprio armazenamento com antecedência.

Envio de arquivos de mídia de origem

Os campos image, image2, audio_url e video_url aceitam links públicos diretos. Os modelos com o campo attachments aceitam um array de objetos retornados por POST /media/upload: envie { "data": "data:audio/mpeg;base64,…", "name": "track.mp3" } e depois passe toda a resposta do endpoint de upload em input.attachments. Para Suno, você também pode passar um URL público em input.source_url; para mashup, passe dois URLs em input.source_urls.

Cobrança ​

Os débitos são feitos no seu saldo em dólares (o mesmo usado pelas modelos de texto), após a conclusão da geração, exatamente no valor indicado nas tabelas abaixo.

  • Reserva → valor final. Ao criar a tarefa, uma estimativa do custo é reservada; após a conclusão, o valor é recalculado com base no resultado real, e o excedente é devolvido ao saldo.
  • Vídeo — cobrança por segundo. O preço aumenta com a duração e a resolução; ativar o áudio custa mais. As tabelas indicam o preço «a partir de» para as configurações padrão; a indicação /seg representa a tarifa por segundo.
  • Erros não são cobrados. Se a tarefa terminar com o status failed, a reserva é devolvida integralmente. Você paga apenas por gerações bem-sucedidas.
  • Consulte o preço exato com antecedência — POST /media/estimate com os mesmos valores de model + input retorna { "usd": … } antes do início.
  • O saldo é recarregado em rublos (≈ $1 = 89–96 ₽); depois, tudo é calculado em USD.

Catálogo de modelos ​

Preço: para vídeo, tarifa por segundo (/seg); total = tarifa × duração (a resolução e o áudio também podem alterar o valor). Para os demais, preço por geração com as configurações padrão. POST /media/estimate retorna o custo exato de qualquer configuração.

Pode haver mais campos em input: a lista legível por máquina (tipos, opções, valores padrão e intervalos de duração) é sempre retornada por GET /media/models. Os campos obrigatórios são marcados com *. Você pode enviar outros campos do modelo (negative_prompt, seed, cfg_scale…) diretamente em input.

Nomes anteriores dos parâmetros ​

Em 19 de outubro de 2026, os parâmetros receberam nomes e valores padronizados: snake_case e valores em minúsculas (por exemplo, version: "v6-wild", resolution: "720p", audio: true). Os nomes e valores da versão anterior da documentação continuam sendo aceitos — não é necessário alterar integrações anteriores: a tarefa, o resultado e o preço permanecem os mesmos. Em GET /media/models, MCP e nesta documentação, são usados somente os novos nomes. Se a solicitação incluir tanto o nome anterior quanto o novo para um mesmo parâmetro, o novo prevalece.

🖼 Imagens ​

modelModoParâmetros de inputArquivoPreço
image/nano-bananatexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|3:2|2:3|21:9|auto, safety_filter=boolPNG$0.025
image/nano-banana-2texto→imagemprompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3|21:9, resolution=1k|2k|4k, image=url, safety_filter=boolPNG$0.050
image/nano-banana-2-litetexto→imagemprompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3, image=url, safety_filter=boolPNG$0.025
image/nano-banana-protexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|21:9|auto, resolution=1k|2k|4k, image=url, safety_filter=boolPNG$0.11
image/imagen4-fasttexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.025
image/imagen4texto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.050
image/imagen4-ultratexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.075
image/gpt-image-1.5texto→imagemprompt *, aspect_ratio=1:1|2:3|3:2, quality=medium|high, safety_filter=boolPNG$0.025
image/gpt-image-1.5-editedição de imagemprompt *, image=url *, aspect_ratio=3:2|1:1|2:3, quality=medium|high, safety_filter=boolPNG$0.025
image/gpt-image-2texto→imagemprompt *, aspect_ratio=1:1|3:2|2:3|16:9|9:16|4:3|3:4, resolution=1k|2k|4kPNG$0.006
image/gpt-image-2-editedição de imagemprompt *, image=url *, aspect_ratio=auto|1:1|3:2|2:3|16:9|9:16, resolution=1k|2k|4k, safety_filter=boolPNG$0.037
image/flux2-protexto→imagemprompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1k|2k, safety_filter=boolPNG$0.031
image/flux2-pro-editedição de imagemprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1k|2k, safety_filter=boolPNG$0.031
image/flux2-flextexto→imagemprompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1k|2k, safety_filter=boolPNG$0.087
image/flux2-flex-editedição de imagemprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1k|2k, safety_filter=boolPNG$0.087
image/seedream-editedição de imagemprompt *, image=url *, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, resolution=1k|2k|4k, safety_filter=boolPNG$0.037
image/seedream-4.5-editedição de imagemprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, safety_filter=boolPNG$0.044
image/seedream-5-lite-editedição de imagemprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, safety_filter=boolPNG$0.037
image/seedream-5.0-pro-editedição de imagemprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2|21:9, quality=basic|high, safety_filter=boolPNG$0.044
image/ideogram-v3texto→imagemprompt *, render_mode=fast|balanced|quality, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, style=auto|general|realistic|design, safety_filter=boolPNG$0.044
image/ideogram-editedição de imagemprompt *, image=url *, render_mode=fast|balanced|quality, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, safety_filter=boolPNG$0.044
image/ideogram-characteredição de imagemprompt *, image=url *, render_mode=fast|balanced|quality, style=auto|realistic|fiction, safety_filter=boolPNG$0.11
image/qwentexto→imagemprompt *, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, safety_filter=boolPNG$0.031
image/qwen-editedição de imagemprompt *, image=url *, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, safety_filter=boolPNG$0.037
image/qwen-i2iedição de imagemprompt *, image=url *, safety_filter=boolPNG$0.031
image/qwen2-editedição de imagemprompt *, image=url *, aspect_ratio=16:9|1:1|3:4|4:3|9:16|3:2|2:3, safety_filter=boolPNG$0.037
image/groktexto→imagemprompt *, aspect_ratio=1:1|2:3|3:2|16:9|9:16, pro=bool, safety_filter=boolPNG$0.025
image/grok-editedição de imagemprompt *, image=url *, safety_filter=boolPNG$0.025
image/z-imagetexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.006
image/wan-2.7texto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1k|2k|4k, image=url, safety_filter=boolPNG$0.031
image/wan-2.7-protexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1k|2k|4k, image=url, safety_filter=boolPNG$0.075
image/seedream-5.0-protexto→imagemprompt *JPG$0.013
image/gemini-3.1-flashtexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1k|2k|4kPNG$0.013
image/gemini-3-protexto→imagemprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1k|2k|4kPNG$0.031

🎬 Vídeo ​

modelModoParâmetros de inputArquivoPreço
video/veo-3.1-fasttexto→vídeoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.38
video/veo-3.1-qualitytexto→vídeoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$1.56
video/veo-3.1-litetexto→vídeoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.19
video/gemini-omnitexto→vídeoprompt *, duration=4|6|8|10 *, aspect_ratio=16:9|9:16, resolution=720p|1080p|4k, image=url, safety_filter=boolMP4$0.66
video/gemini-omni-flashtexto→vídeoprompt *, attachments=upload[]MP4$0.13
video/kling-3.0texto→vídeoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, mode=standard|pro|4k, audio=bool, image=url, image2=url, safety_filter=boolMP4$0.11/seg
video/kling-t2vtexto→vídeoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.11/seg
video/kling-turbo-i2vfoto→vídeoprompt *, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.11/seg
video/kling-2.6-t2vtexto→vídeoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, audio=bool, safety_filter=boolMP4$0.34
video/kling-2.6-i2vfoto→vídeoprompt *, image=url *, duration=5|10, audio=bool, safety_filter=boolMP4$0.34
video/kling-2.5-t2vtexto→vídeoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, safety_filter=boolMP4$0.26
video/kling-2.5-i2vfoto→vídeoprompt *, image=url *, image2=url, duration=5|10, safety_filter=boolMP4$0.26
video/kling-i2vfoto→vídeoprompt *, image=url *, image2=url, duration=5|10, safety_filter=boolMP4$0.31
video/kling-2.1-standardfoto→vídeoprompt *, image=url *, duration=5|10, safety_filter=boolMP4$0.16
video/kling-2.1-master-t2vtexto→vídeoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, safety_filter=boolMP4$1.00
video/kling-2.1-master-i2vfoto→vídeoprompt *, image=url *, duration=5|10, safety_filter=boolMP4$1.00
video/kling-motionvídeo→vídeoimage=url *, video_url *, prompt, mode=standard|proMP4$1.25
video/kling-avataravatar (foto+áudio)image=url *, audio_url *, prompt *MP4$0.75
video/kling-avatar-proavatar (foto+áudio)image=url *, audio_url *, prompt *MP4$1.50
video/wan-2.7-t2vtexto→vídeoprompt *, duration=2–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, audio_url, safety_filter=boolMP4$0.15/seg
video/wan-2.7-i2vfoto→vídeoprompt *, image=url *, image2=url, duration=2–15s, resolution=720p|1080p, audio_url, safety_filter=boolMP4$0.15/seg
video/wan-2.7-r2vfoto→vídeoprompt *, image=url *, duration=2–10s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.15/seg
video/wan-2.7-editvídeo→vídeoprompt *, video_url *, resolution=720p|1080p, audio_source=auto|originalMP4$1.50
video/wan-t2vtexto→vídeoprompt *, duration=5|10|15, resolution=720p|1080p, safety_filter=boolMP4$0.44
video/wan-i2vfoto→vídeoprompt *, image=url *, duration=5|10|15, resolution=720p|1080p, safety_filter=boolMP4$0.44
video/wan-v2vvídeo→vídeoprompt *, video_url *, duration=5|10, resolution=720p|1080pMP4$0.44
video/wan-2.5-t2vtexto→vídeoprompt *, duration=5|10 *, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.38
video/wan-2.5-i2vfoto→vídeoprompt *, image=url *, duration=5|10 *, resolution=720p|1080p, safety_filter=boolMP4$0.38
video/wan-2.2-t2vtexto→vídeoprompt *, aspect_ratio=16:9|9:16, resolution=480p|720p, safety_filter=boolMP4$0.50
video/wan-2.2-i2vfoto→vídeoprompt *, image=url *, resolution=480p|720p, safety_filter=boolMP4$0.50
video/wan-s2vavatar (foto+áudio)prompt *, image=url *, audio_url *, resolution=480p|580p|720pMP4$0.38
video/wan-animate-movevídeo→vídeoimage=url *, video_url *, resolution=480p|580p|720pMP4$0.38
video/wan-animate-replacevídeo→vídeoimage=url *, video_url *, resolution=480p|580p|720pMP4$0.38
video/seedance-2texto→vídeoprompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1|4:3|21:9, resolution=480p|720p|1080p|4k, audio=bool, image=url, image2=url, safety_filter=boolMP4$0.26/seg
video/seedance-2-fasttexto→vídeoprompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, audio=bool, image=url, image2=url, safety_filter=boolMP4$0.21/seg
video/seedance-2-minitexto→vídeoprompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, audio=bool, image=url, image2=url, safety_filter=boolMP4$0.13/seg
video/seedance-1.5-protexto→vídeoprompt *, duration=4–12s, aspect_ratio=16:9|9:16|1:1|4:3, resolution=480p|720p|1080p, audio=bool, image=url, safety_filter=boolMP4$0.025/seg
video/hailuo-02-t2vtexto→vídeoprompt *, duration=6|10, safety_filter=boolMP4$0.19
video/hailuo-02-t2v-protexto→vídeoprompt *, safety_filter=boolMP4$0.36
video/hailuo-02-i2vfoto→vídeoprompt *, image=url *, image2=url, duration=6|10, resolution=768p|512p, safety_filter=boolMP4$0.19
video/hailuo-02-i2v-profoto→vídeoprompt *, image=url *, image2=url, safety_filter=boolMP4$0.36
video/hailuo-2.3-i2vfoto→vídeoprompt *, image=url *, duration=6|10, resolution=768p|1080p, safety_filter=boolMP4$0.19
video/hailuo-2.3-i2v-profoto→vídeoprompt *, image=url *, duration=6|10, resolution=768p|1080p, safety_filter=boolMP4$0.28
video/happyhorse-1.1-t2vtexto→vídeoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, safety_filter=boolMP4$0.18/seg
video/happyhorse-1.1-i2vfoto→vídeoprompt, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.18/seg
video/happyhorse-1.1-r2vfoto→vídeoprompt *, image=url *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.18/seg
video/happyhorse-t2vtexto→vídeoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, safety_filter=boolMP4$0.30/seg
video/happyhorse-i2vfoto→vídeoprompt, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.30/seg
video/happyhorse-editvídeo→vídeoprompt *, video_url *, resolution=720p|1080p, audio_source=auto|originalMP4$1.50
video/grok-t2vtexto→vídeoprompt *, duration=6–30s, aspect_ratio=16:9|9:16|1:1|3:2|2:3, resolution=480p|720p, mode=normal|fun|spicy, safety_filter=boolMP4$0.019/seg
video/grok-i2vfoto→vídeoprompt *, image=url *, duration=6–30s, resolution=480p|720p, mode=normal|fun|spicy, safety_filter=boolMP4$0.019/seg
video/grok-1.5texto→vídeoprompt *, duration=1–15s, aspect_ratio=auto|16:9|9:16|1:1, resolution=480p|720p, image=url, safety_filter=boolMP4$0.019/seg
video/omnihumanavatar (foto+áudio)image=url *, audio_url *, prompt, resolution=720p|1080pMP4$1.69
video/infinitalkavatar (foto+áudio)prompt *, image=url *, audio_url *, resolution=480p|720pMP4$0.19
video/lipsyncvídeo→vídeovideo_url *, audio_url *, mode=lite|basicMP4$0.50
video/topaz-upscaleaumento de resoluçãovideo_url *, scale=2|4MP4$0.50

🎵 Música ​

modelModoParâmetros de inputArquivoPreço
music/suno-v5músicatitle *, style *, version=v6|v6-wild|v6-mini, instrumental=bool, promptMP3$0.075
music/suno-covermúsicaprompt *, attachments=upload[] *, version=v6|v6-wild|v6-mini, instrumental=bool, advanced=bool, title, style, duration=10–360sMP3$0.075
music/suno-extend-uploadmúsicaprompt *, attachments=upload[] *, version=v6|v6-wild|v6-mini, continue_from=1–120, instrumental=boolMP3$0.075
music/suno-add-vocalsmúsicaprompt *, attachments=upload[] *, version=v6|v6-wild|v6-mini, style, title, exclude_styles, vocal=female|maleMP3$0.075
music/suno-add-instrumentalmúsicaprompt *, attachments=upload[] *, version=v6|v6-wild|v6-mini, title, exclude_stylesMP3$0.075
music/suno-mashupmúsicaprompt *, attachments=upload[] *, version=v6|v6-wild|v6-mini, instrumental=bool, advanced=bool, title, style, duration=10–360sMP3$0.075
music/suno-soundsmúsicaprompt *, version=v6|v6-wild|v6-mini, loop=bool, bpm=auto|60|80|100|120|140|160, tonality=auto|C|Dm|Em|F|G|Am|D#mMP3$0.016

🎙 Áudio ​

modelModoParâmetros de inputArquivoPreço
audio/gemini-3.1-flash-ttsnarraçãotext *, voice=Achernar|Achird|Algenib|Algieba|Alnilam|Aoede|Autonoe|Callirrhoe|Charon|Despina|Enceladus|Erinome|Fenrir|Gacrux|Iapetus|Kore|Laomedeia|Leda|Orus|Puck|Pulcherrima|Rasalgethi|Sadachbia|Sadaltager|Schedar|Sulafat|Umbriel|Vindemiatrix|Zephyr|Zubenelgenubi, style=vocal-smile|newscaster|whisper|empathetic|promo-hype|deadpan, pace=natural|fast|slow|staccato, accent=neutral|american|american-valley|american-south|british|british-brixton|transatlantic|australian, voice_description, scene, temperature=0–2WAV$0.006
audio/gemini-2.5-pro-ttsnarraçãotext *, voice=Achernar|Achird|Algenib|Algieba|Alnilam|Aoede|Autonoe|Callirrhoe|Charon|Despina|Enceladus|Erinome|Fenrir|Gacrux|Iapetus|Kore|Laomedeia|Leda|Orus|Puck|Pulcherrima|Rasalgethi|Sadachbia|Sadaltager|Schedar|Sulafat|Umbriel|Vindemiatrix|Zephyr|Zubenelgenubi, style=vocal-smile|newscaster|whisper|empathetic|promo-hype|deadpan, pace=natural|fast|slow|staccato, accent=neutral|american|american-valley|american-south|british|british-brixton|transatlantic|australian, voice_description, scene, temperature=0–2WAV$0.006
audio/elevenlabs-ttsnarraçãotext *, voice=james|addison|adeline|allison|ana-rita|anika|arabella|aria|bella|benjamin|bradford|brian|britney|brittney|brock|burt|callum|cassidy|ed|edward|emma|eve|felix|finn|hank|hope-poetic|hope-bubbly|horatius|jamahal|jean|jeff|jessica-eloquent|jessica-chatty|john-doe|john-morgan|johnny-dynamite|johnny-kid|kuon|laura|leon|liam|lucy|lutz|mark-casual|mark-natural|marshal|monika|nathan|nathaniel|phil|rachel|rex-thunder|sam|spuds|sven|taksh|theodore|tiffany|tom|viking-bjorn|viraj-smooth|viraj-rich|wyatt|xavier, voice_id, speed=0.8|1.0|1.2MP3$0.037
audio/elevenlabs-multilingualnarraçãotext *, voice=james|addison|adeline|allison|ana-rita|anika|arabella|aria|bella|benjamin|bradford|brian|britney|brittney|brock|burt|callum|cassidy|ed|edward|emma|eve|felix|finn|hank|hope-poetic|hope-bubbly|horatius|jamahal|jean|jeff|jessica-eloquent|jessica-chatty|john-doe|john-morgan|johnny-dynamite|johnny-kid|kuon|laura|leon|liam|lucy|lutz|mark-casual|mark-natural|marshal|monika|nathan|nathaniel|phil|rachel|rex-thunder|sam|spuds|sven|taksh|theodore|tiffany|tom|viking-bjorn|viraj-smooth|viraj-rich|wyatt|xavier, voice_id, speed=0.8|1.0|1.2MP3$0.075

🧊 Modelos 3D ​

A saída é GLB (alguns modelos também oferecem OBJ, FBX, STL, USDZ, USD, 3MF) e uma imagem de prévia: a tarefa retorna vários arquivos, cada um com sua própria extensão. A lista de arquivos fica no campo results; cada item tem um ext.

O preço só é conhecido após a geração

A cobrança de 3D é baseada nos recursos realmente utilizados. Retemos o limite máximo indicado na tabela e, quando o custo real for conhecido, cobramos esse valor e devolvemos a diferença. O total fica sempre em cost_usd.

modelModoParâmetros de inputArquivoPreço
3d/tripo-texttexto→3Dprompt *, negative_prompt, texture_detail=standard|high, geometry_detail=standard|high, pbr=bool, quad_mesh=boolGLB/FBX$0.31–0.79
3d/tripo-imagefoto→3Dimage=url *, texture_detail=standard|high, geometry_detail=standard|high, pbr=bool, quad_mesh=boolGLB/FBX$0.31–0.79
3d/hunyuan-rapid-texttexto→3Dprompt *, file_format=glb|obj|fbx|stl|usdz, pbr=bool, extra_mesh=boolGLB etc.$0.43–0.71
3d/hunyuan-rapid-imagefoto→3Dimage=url *, file_format=glb|obj|fbx|stl|usdz, pbr=bool, extra_mesh=boolGLB etc.$0.43–0.71
3d/hunyuan-pro-texttexto→3Dprompt *, output=textured|mesh, polygons=auto|40000|100000|300000|800000|1500000, pbr=boolGLB$0.71–1.00
3d/hunyuan-pro-imagefoto→3Dimage=url *, output=textured|mesh, polygons=auto|40000|100000|300000|800000|1500000, pbr=boolGLB$0.71–1.00
3d/seed3d-imagefoto→3Dimage=url *, mesh_detail=low|medium|high, file_format=glb|obj|usd|usdzGLB/OBJ/USD$0.50
3d/meshy-texttexto→3Dprompt *, texture_size=2k|4k|8k, pose=none|a-pose|t-pose, ultra=bool, pbr=bool, texture_text, texture_photo=urlGLB$0.94–1.26
3d/meshy-imagefoto→3Dimage=url *, texture_size=2k|4k|8k, ultra=bool, texture=bool, pbr=bool, texture_text, texture_photo=urlGLB$0.94–1.26
3d/meshy-multi-imageângulos→3Dimages=[url] * (1–4), texture_size=2k|4k|8k, ultra=bool, texture=bool, pbr=bool, texture_textGLB$0.94–1.26

Foto como textura. Em 3d/meshy-*, a textura é definida separadamente da geometria: por uma imagem em texture_photo ou por texto em texture_text.

Demorado. A geração 3D leva de meio minuto a vários minutos, mais do que uma imagem ou um clipe curto. Não é necessário manter a conexão aberta: o status é preservado e há webhooks.

🛠 Utilitários ​

modelModoParâmetros de inputArquivoPreço
image/topaz-upscaleaumento de resoluçãoimage=url *, scale=2|4|8PNG$0.063
image/recraft-remove-bgediçãoimage=url *PNG$0.006
image/recraft-upscaleaumento de resoluçãoimage=url *PNG$0.006

Exemplos por modo ​

Imagem a partir de texto

json
{ "model": "image/flux2-pro", "input": { "prompt": "neon fox in snow", "aspect_ratio": "16:9", "resolution": "2k" } }

Edição de imagem

json
{ "model": "image/seedream-edit", "input": { "prompt": "remover o fundo, adicionar neon", "image": "https://…/photo.png" } }

Foto→vídeo (primeiro/último quadro, duração, áudio)

json
{ "model": "video/wan-2.7-i2v", "input": {
    "prompt": "aproximação suave da câmera", "image": "https://…/first.png",
    "image2": "https://…/last.png", "duration": 8, "resolution": "1080p" } }

Música

json
{ "model": "music/suno-v5", "input": { "title": "Northern Lights", "style": "epic orchestral", "instrumental": true, "version": "v6" } }

Narração

json
{ "model": "audio/gemini-3.1-flash-tts", "input": {
    "text": "Olá, mundo", "voice": "Zephyr", "style": "empathetic",
    "pace": "natural", "accent": "neutral" } }

Diálogo com duas vozes — em vez do campo text, use as falas em dialogue e as vozes em voices (a voz 1 é a primeira da lista):

json
{ "model": "audio/gemini-3.1-flash-tts", "input": {
    "voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
    "dialogue": [ { "speaker": 1, "text": "Boa noite!" }, { "speaker": 2, "text": "Que bom ouvir você." } ] } }

Avatar (vídeo falante a partir de foto + áudio)

json
{ "model": "video/omnihuman", "input": { "image": "https://…/face.png", "audio_url": "https://…/voice.mp3" } }

Status e erros ​

GET /media/job/:id → campo status:

StatusSignificado
processingEm andamento — continue consultando
doneConcluído — arquivo em result_url, cobrança em cost_usd
failedErro — motivo em error, valor reembolsado

Códigos de resposta de POST /media/generate: 400 — modelo desconhecido ou campo obrigatório ausente; 401 — chave ausente/inválida; 402 — saldo insuficiente; 403 — modelo indisponível na conta.

O corpo do erro sempre segue o mesmo formato — { "error": "texto para pessoas", "code": "código para máquinas" }. Códigos: unknown_model, missing_param (+ campo param), invalid_input, invalid_attachment, prompt_too_long, input_too_long, no_auth, no_key, insufficient_balance, unpaid_shortfall, rate_limited, generation_failed, unavailable.

Estimativa antecipada de custo ​

bash
curl https://nordrouter.com/media/estimate \
  -H "Authorization: Bearer sk-nr-YOUR-KEY" -H "Content-Type: application/json" \
  -d '{ "model": "video/kling-3.0", "input": { "duration": 10, "mode": "pro", "audio": true } }'
json
{ "model": "video/kling-3.0", "usd": 1.6875 }

Parâmetros nas tabelas conferidos com o catálogo do serviço em 19.10.2026; a lista completa e atualizada de modelos, parâmetros e preços está disponível em GET /media/models.