Skip to content

API multimedia — imágenes, vídeo, música ​

Genera imágenes, vídeo y música con la misma clave sk-nr-… y el mismo saldo que usas para los modelos de texto. Una sola cuenta, pago por uso, sin suscripciones ni paquetes.

  • URL base: https://nordrouter.com (o https://global-api.nordrouter.com para redes fuera de Rusia).
  • Autenticación: cabecera Authorization: Bearer sk-nr-… (o X-API-Key: sk-nr-…).
  • Formato: JSON, generación asíncrona (crear tarea → consultar estado → descargar archivo).

Endpoints ​

MétodoFunción
POST /media/generateCrear una tarea de generación
GET /media/job/:idEstado y resultado de la tarea
POST /media/estimateConsultar el precio de la configuración de antemano
GET /media/modelsLista de modelos y parámetros en formato legible por máquinas
POST /media/uploadSubir un archivo multimedia de origen
GET /media/file/:idArchivo generado (enlace de result_url)

Ciclo de vida de una solicitud ​

1. Crear una tarea

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": "acercamiento suave de la cámara", "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 el estado (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. Descargar el archivo — mediante result_url. El enlace apunta a nordrouter.com (tu marca); los archivos se conservan durante 14 días y después se eliminan: descárgalos o transfiérelos a tu propio almacenamiento antes de que caduquen.

Subida de archivos multimedia de origen

Los campos image, image2, audio_url y video_url aceptan un enlace público directo. Los modelos con el campo attachments aceptan un array de objetos devueltos por POST /media/upload: envía { "data": "data:audio/mpeg;base64,…", "name": "track.mp3" } y después pasa la respuesta completa de la subida a input.attachments. Para Suno, puedes pasar en su lugar una URL pública en input.source_url y, para mashup, dos URL en input.source_urls.

Facturación ​

Los cargos se descuentan de tu saldo en dólares (el mismo que usas para los modelos de texto), una vez completada la generación y por el importe exacto indicado en las tablas siguientes.

  • Reserva → coste real. Al crear una tarea, se reserva el coste estimado; al finalizar, el importe se recalcula según el resultado real y el excedente se devuelve al saldo.
  • Vídeo — por segundo. El precio aumenta con la duración y la resolución; incluir sonido cuesta más. Las tablas indican el precio «desde» para la configuración predeterminada; la indicación /s corresponde a la tarifa por segundo.
  • Los errores no se cobran. Si la tarea termina con el estado failed, la reserva se devuelve íntegramente: solo pagas por las generaciones completadas correctamente.
  • Precio exacto de antemano — POST /media/estimate con los mismos model + input devuelve { "usd": … } antes de iniciar la generación.
  • El saldo se recarga en rublos (≈ $1 = 89–96 ₽); a partir de ahí, todos los cálculos se realizan en USD.

Catálogo de modelos ​

Precio: para video, tarifa por segundo (/s); total = tarifa × duración (la resolución y el audio también pueden modificarla). Para el resto, por generación con la configuración predeterminada. POST /media/estimate devuelve el costo exacto de cualquier configuración.

Puede haber más campos en input: la lista legible por máquina (tipos, opciones, valores predeterminados y rangos de segundos) siempre está disponible en GET /media/models. Los campos obligatorios se indican con *. Puedes enviar directamente en input cualquier campo adicional del modelo (negative_prompt, seed, cfg_scale…).

Nombres anteriores de los parámetros ​

El 19 de octubre de 2026, los parámetros adoptaron nombres y valores unificados: snake_case, valores en minúsculas (por ejemplo, version: "v6-wild", resolution: "720p", audio: true). Se siguen aceptando los nombres y valores de la versión anterior de la documentación; no es necesario modificar las integraciones existentes: la tarea, el resultado y el precio son los mismos. En GET /media/models, MCP y esta documentación solo aparecen los nuevos. Si la solicitud incluye el nombre anterior y el nuevo para un mismo parámetro, se aplica el nuevo.

🖼 Imágenes ​

modelModoParámetros de inputArchivoPrecio
image/nano-bananatexto→imagenprompt *, 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→imagenprompt *, 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→imagenprompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3, image=url, safety_filter=boolPNG$0.025
image/nano-banana-protexto→imagenprompt *, 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→imagenprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.025
image/imagen4texto→imagenprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.050
image/imagen4-ultratexto→imagenprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.075
image/gpt-image-1.5texto→imagenprompt *, aspect_ratio=1:1|2:3|3:2, quality=medium|high, safety_filter=boolPNG$0.025
image/gpt-image-1.5-editedición de imagenprompt *, image=url *, aspect_ratio=3:2|1:1|2:3, quality=medium|high, safety_filter=boolPNG$0.025
image/gpt-image-2texto→imagenprompt *, 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-editedición de imagenprompt *, 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→imagenprompt *, 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-editedición de imagenprompt *, 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→imagenprompt *, 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-editedición de imagenprompt *, 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-editedición de imagenprompt *, 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-editedición de imagenprompt *, 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-editedición de imagenprompt *, 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-editedición de imagenprompt *, 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→imagenprompt *, 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-editedición de imagenprompt *, 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-characteredición de imagenprompt *, image=url *, render_mode=fast|balanced|quality, style=auto|realistic|fiction, safety_filter=boolPNG$0.11
image/qwentexto→imagenprompt *, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, safety_filter=boolPNG$0.031
image/qwen-editedición de imagenprompt *, image=url *, aspect_ratio=1:1-hd|1:1|3:4|9:16|4:3|16:9, safety_filter=boolPNG$0.037
image/qwen-i2iedición de imagenprompt *, image=url *, safety_filter=boolPNG$0.031
image/qwen2-editedición de imagenprompt *, 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→imagenprompt *, aspect_ratio=1:1|2:3|3:2|16:9|9:16, pro=bool, safety_filter=boolPNG$0.025
image/grok-editedición de imagenprompt *, image=url *, safety_filter=boolPNG$0.025
image/z-imagetexto→imagenprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, safety_filter=boolPNG$0.006
image/wan-2.7texto→imagenprompt *, 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→imagenprompt *, 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→imagenprompt *JPG$0.013
image/gemini-3.1-flashtexto→imagenprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1k|2k|4kPNG$0.013
image/gemini-3-protexto→imagenprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1k|2k|4kPNG$0.031

🎬 Video ​

modelModoParámetros de inputArchivoPrecio
video/veo-3.1-fasttexto→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.38
video/veo-3.1-qualitytexto→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$1.56
video/veo-3.1-litetexto→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.19
video/gemini-omnitexto→videoprompt *, 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→videoprompt *, attachments=upload[]MP4$0.13
video/kling-3.0texto→videoprompt *, 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/s
video/kling-t2vtexto→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.11/s
video/kling-turbo-i2vfoto→videoprompt *, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.11/s
video/kling-2.6-t2vtexto→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, audio=bool, safety_filter=boolMP4$0.34
video/kling-2.6-i2vfoto→videoprompt *, image=url *, duration=5|10, audio=bool, safety_filter=boolMP4$0.34
video/kling-2.5-t2vtexto→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, safety_filter=boolMP4$0.26
video/kling-2.5-i2vfoto→videoprompt *, image=url *, image2=url, duration=5|10, safety_filter=boolMP4$0.26
video/kling-i2vfoto→videoprompt *, image=url *, image2=url, duration=5|10, safety_filter=boolMP4$0.31
video/kling-2.1-standardfoto→videoprompt *, image=url *, duration=5|10, safety_filter=boolMP4$0.16
video/kling-2.1-master-t2vtexto→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, safety_filter=boolMP4$1.00
video/kling-2.1-master-i2vfoto→videoprompt *, image=url *, duration=5|10, safety_filter=boolMP4$1.00
video/kling-motionvideo→videoimage=url *, video_url *, prompt, mode=standard|proMP4$1.25
video/kling-avataravatar (foto+audio)image=url *, audio_url *, prompt *MP4$0.75
video/kling-avatar-proavatar (foto+audio)image=url *, audio_url *, prompt *MP4$1.50
video/wan-2.7-t2vtexto→videoprompt *, 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/s
video/wan-2.7-i2vfoto→videoprompt *, image=url *, image2=url, duration=2–15s, resolution=720p|1080p, audio_url, safety_filter=boolMP4$0.15/s
video/wan-2.7-r2vfoto→videoprompt *, image=url *, duration=2–10s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.15/s
video/wan-2.7-editvideo→videoprompt *, video_url *, resolution=720p|1080p, audio_source=auto|originalMP4$1.50
video/wan-t2vtexto→videoprompt *, duration=5|10|15, resolution=720p|1080p, safety_filter=boolMP4$0.44
video/wan-i2vfoto→videoprompt *, image=url *, duration=5|10|15, resolution=720p|1080p, safety_filter=boolMP4$0.44
video/wan-v2vvideo→videoprompt *, video_url *, duration=5|10, resolution=720p|1080pMP4$0.44
video/wan-2.5-t2vtexto→videoprompt *, duration=5|10 *, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.38
video/wan-2.5-i2vfoto→videoprompt *, image=url *, duration=5|10 *, resolution=720p|1080p, safety_filter=boolMP4$0.38
video/wan-2.2-t2vtexto→videoprompt *, aspect_ratio=16:9|9:16, resolution=480p|720p, safety_filter=boolMP4$0.50
video/wan-2.2-i2vfoto→videoprompt *, image=url *, resolution=480p|720p, safety_filter=boolMP4$0.50
video/wan-s2vavatar (foto+audio)prompt *, image=url *, audio_url *, resolution=480p|580p|720pMP4$0.38
video/wan-animate-movevideo→videoimage=url *, video_url *, resolution=480p|580p|720pMP4$0.38
video/wan-animate-replacevideo→videoimage=url *, video_url *, resolution=480p|580p|720pMP4$0.38
video/seedance-2texto→videoprompt *, 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/s
video/seedance-2-fasttexto→videoprompt *, 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/s
video/seedance-2-minitexto→videoprompt *, 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/s
video/seedance-1.5-protexto→videoprompt *, 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/s
video/hailuo-02-t2vtexto→videoprompt *, duration=6|10, safety_filter=boolMP4$0.19
video/hailuo-02-t2v-protexto→videoprompt *, safety_filter=boolMP4$0.36
video/hailuo-02-i2vfoto→videoprompt *, image=url *, image2=url, duration=6|10, resolution=768p|512p, safety_filter=boolMP4$0.19
video/hailuo-02-i2v-profoto→videoprompt *, image=url *, image2=url, safety_filter=boolMP4$0.36
video/hailuo-2.3-i2vfoto→videoprompt *, image=url *, duration=6|10, resolution=768p|1080p, safety_filter=boolMP4$0.19
video/hailuo-2.3-i2v-profoto→videoprompt *, image=url *, duration=6|10, resolution=768p|1080p, safety_filter=boolMP4$0.28
video/happyhorse-1.1-t2vtexto→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, safety_filter=boolMP4$0.18/s
video/happyhorse-1.1-i2vfoto→videoprompt, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.18/s
video/happyhorse-1.1-r2vfoto→videoprompt *, image=url *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, safety_filter=boolMP4$0.18/s
video/happyhorse-t2vtexto→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, safety_filter=boolMP4$0.30/s
video/happyhorse-i2vfoto→videoprompt, image=url *, duration=3–15s, resolution=720p|1080p, safety_filter=boolMP4$0.30/s
video/happyhorse-editvideo→videoprompt *, video_url *, resolution=720p|1080p, audio_source=auto|originalMP4$1.50
video/grok-t2vtexto→videoprompt *, 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/s
video/grok-i2vfoto→videoprompt *, image=url *, duration=6–30s, resolution=480p|720p, mode=normal|fun|spicy, safety_filter=boolMP4$0.019/s
video/grok-1.5texto→videoprompt *, duration=1–15s, aspect_ratio=auto|16:9|9:16|1:1, resolution=480p|720p, image=url, safety_filter=boolMP4$0.019/s
video/omnihumanavatar (foto+audio)image=url *, audio_url *, prompt, resolution=720p|1080pMP4$1.69
video/infinitalkavatar (foto+audio)prompt *, image=url *, audio_url *, resolution=480p|720pMP4$0.19
video/lipsyncvideo→videovideo_url *, audio_url *, mode=lite|basicMP4$0.50
video/topaz-upscaleescaladovideo_url *, scale=2|4MP4$0.50

🎵 Música ​

modelModoParámetros de inputArchivoPrecio
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

🎙 Audio ​

modelModoParámetros de inputArchivoPrecio
audio/gemini-3.1-flash-ttsvoz en offtext *, 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-ttsvoz en offtext *, 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-ttsvoz en offtext *, 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-multilingualvoz en offtext *, 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 ​

La salida es GLB (algunos modelos permiten elegir OBJ, FBX, STL, USDZ, USD o 3MF) más una imagen de vista previa: la tarea devuelve varios archivos, cada uno con su propia extensión. La lista de archivos está en el campo results; cada uno tiene ext.

El precio solo se conoce después de la generación

El costo de 3D se calcula según los recursos realmente utilizados. Retenemos el límite superior de la tabla y, cuando se conoce el costo real, lo cobramos y devolvemos la diferencia. El importe final siempre aparece en cost_usd.

modelModoParámetros de inputArchivoPrecio
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 y otros$0.43–0.71
3d/hunyuan-rapid-imagefoto→3Dimage=url *, file_format=glb|obj|fbx|stl|usdz, pbr=bool, extra_mesh=boolGLB y otros$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-imagevistas→3Dimages=[url] * (1–4), texture_size=2k|4k|8k, ultra=bool, texture=bool, pbr=bool, texture_textGLB$0.94–1.26

Foto como textura. En 3d/meshy-*, la textura se define por separado de la geometría: con una imagen en texture_photo o con texto en texture_text.

Tarda más. La generación 3D tarda desde medio minuto hasta varios minutos, más que una imagen o un clip corto. No es necesario mantener la conexión: el estado se conserva y hay webhooks.

🛠 Utilidades ​

modelModoParámetros de inputArchivoPrecio
image/topaz-upscaleescaladoimage=url *, scale=2|4|8PNG$0.063
image/recraft-remove-bgediciónimage=url *PNG$0.006
image/recraft-upscaleescaladoimage=url *PNG$0.006

Ejemplos por modo ​

Imagen a partir de texto

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

Edición de imágenes

json
{ "model": "image/seedream-edit", "input": { "prompt": "eliminar el fondo, añadir neón", "image": "https://…/photo.png" } }

Foto→vídeo (primer/último fotograma, duración, sonido)

json
{ "model": "video/wan-2.7-i2v", "input": {
    "prompt": "acercamiento suave de la cámara", "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" } }

Síntesis de voz

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

Diálogo de dos voces — en lugar del campo text, las intervenciones van en dialogue y las voces en voices (la voz 1 es la primera de la lista):

json
{ "model": "audio/gemini-3.1-flash-tts", "input": {
    "voices": [ { "voice": "Kore", "style": "newscaster" }, { "voice": "Puck", "pace": "fast" } ],
    "dialogue": [ { "speaker": 1, "text": "¡Buenas noches!" }, { "speaker": 2, "text": "Me alegra oírlo." } ] } }

Avatar (vídeo de una persona hablando a partir de una foto + audio)

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

Estados y errores ​

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

EstadoSignificado
processingEn proceso — siga consultando
doneCompletado — archivo en result_url, importe cobrado en cost_usd
failedError — motivo en error, importe reembolsado

Códigos de respuesta de POST /media/generate: 400 — modelo desconocido o falta un campo obligatorio; 401 — clave ausente o no válida; 402 — saldo insuficiente; 403 — modelo no disponible en la cuenta.

El cuerpo del error siempre tiene el mismo formato — { "error": "текст для человека", "code": "машинный код" }. 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.

Estimación previa del coste ​

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 }

Los parámetros de las tablas se verificaron con el catálogo del servicio el 19.10.2026; la lista completa y actualizada de modelos, parámetros y precios está en GET /media/models.