Media API — images, video, music
Generate images, video and music with the same sk-nr-… key and the same balance as text models. One account, pay-as-you-go, no subscriptions or bundles.
- Base:
https://nordrouter.com(orhttps://global-api.nordrouter.comfor foreign networks). - Auth:
Authorization: Bearer sk-nr-…header (orX-API-Key: sk-nr-…). - Format: JSON, generation is asynchronous (create task → poll → fetch file).
Endpoints
| Method | Purpose |
|---|---|
POST /media/generate | Create a generation task |
GET /media/job/:id | Task status and result |
POST /media/estimate | Get a config's price up front |
GET /media/models | Machine-readable list of models and params |
POST /media/upload | Upload a source media file |
GET /media/file/:id | The finished file (link from result_url) |
Request lifecycle
1. Create a task
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": "slow camera push-in", "image": "https://…/photo.png", "duration": "5", "sound": true } }'{ "id": "b1f2…", "model": "video/kling-2.6-i2v", "status": "processing", "poll": "https://nordrouter.com/media/job/b1f2…" }2. Poll for status (every 3–5 s)
curl https://nordrouter.com/media/job/b1f2…{ "id": "b1f2…", "status": "done", "result_url": "https://nordrouter.com/media/file/b1f2…", "cost_usd": 0.55, "error": null }3. Fetch the file — from result_url. The link is on nordrouter.com (your brand); files are kept for 14 days, then deleted — download or re-host on your side in time.
Uploading source media
The image, image2, audio_url, and video_url fields accept a direct public URL. Models with an attachments field accept an array of objects returned by POST /media/upload: send { "data": "data:audio/mpeg;base64,…", "name": "track.mp3" }, then put the full uploader response in input.attachments. For Suno you may instead pass a public URL as input.upload_url, or two URLs as input.upload_url_list for mashup.
Billing
Charges are taken from your USD balance (the same one text models use) — per completed generation, for exactly the amount in the tables below.
- Reserve → actual. On task creation an estimate is reserved; on completion the amount is reconciled to the actual result, and the excess is refunded.
- Video is per second. Price scales with duration and resolution; sound on costs more. Tables show the "from" price at defaults; a
/sectag marks a per-second rate. - Failures aren't charged. If a task ends
failed, the reserve is fully refunded — you only pay for successful generations. - Exact price up front —
POST /media/estimatewith the samemodel+inputreturns{ "usd": … }before you commit. - Top up in rubles (≈ $1 = 89–96 ₽); everything is then metered in USD.
Model catalog
Price: for video it's a per-second rate (/sec), total = rate × duration (resolution/sound can change it); everything else is per generation at default settings. The exact price of any config is returned by POST /media/estimate.
input may accept more fields — a machine-readable list (types, options, defaults, second ranges) is always returned by GET /media/models. Required ones are marked *. Any extra model fields (negative_prompt, seed, cfg_scale…) can be sent straight in input.
🖼 Images
model | Mode | input params | File | Price |
|---|---|---|---|---|
image/nano-banana | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|3:2|2:3|21:9|auto, nsfw_checker=bool | PNG | $0.025 |
image/nano-banana-2 | text→image | prompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=bool | PNG | $0.050 |
image/nano-banana-2-lite | text→image | prompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3, image=url, nsfw_checker=bool | PNG | $0.025 |
image/nano-banana-pro | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|21:9|auto, resolution=1K|2K|4K, image=url, nsfw_checker=bool | PNG | $0.11 |
image/imagen4-fast | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=bool | PNG | $0.025 |
image/imagen4 | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=bool | PNG | $0.050 |
image/imagen4-ultra | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=bool | PNG | $0.075 |
image/gpt-image-1.5 | text→image | prompt *, aspect_ratio=1:1|2:3|3:2, quality=medium|high, nsfw_checker=bool | PNG | $0.025 |
image/gpt-image-1.5-edit | image edit | prompt *, image=url *, aspect_ratio=3:2|1:1|2:3, quality=medium|high, nsfw_checker=bool | PNG | $0.025 |
image/gpt-image-2 | text→image | prompt *, aspect_ratio=1:1|3:2|2:3|16:9|9:16|4:3|3:4, resolution=1K|2K|4K | PNG | $0.006 |
image/gpt-image-2-edit | image edit | prompt *, image=url *, aspect_ratio=auto|1:1|3:2|2:3|16:9|9:16, resolution=1K|2K|4K, nsfw_checker=bool | PNG | $0.037 |
image/flux2-pro | text→image | prompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1K|2K, nsfw_checker=bool | PNG | $0.031 |
image/flux2-pro-edit | image edit | prompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1K|2K, nsfw_checker=bool | PNG | $0.031 |
image/flux2-flex | text→image | prompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1K|2K, nsfw_checker=bool | PNG | $0.087 |
image/flux2-flex-edit | image edit | prompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1K|2K, nsfw_checker=bool | PNG | $0.087 |
image/seedream-edit | image edit | prompt *, image=url *, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, image_resolution=1K|2K|4K, nsfw_checker=bool | PNG | $0.037 |
image/seedream-4.5-edit | image edit | prompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, nsfw_checker=bool | PNG | $0.044 |
image/seedream-5-lite-edit | image edit | prompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, nsfw_checker=bool | PNG | $0.037 |
image/seedream-5.0-pro-edit | image edit | prompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2|21:9, quality=basic|high, nsfw_checker=bool | PNG | $0.044 |
image/ideogram-v3 | text→image | prompt *, rendering_speed=TURBO|BALANCED|QUALITY, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, style=AUTO|GENERAL|REALISTIC|DESIGN, nsfw_checker=bool | PNG | $0.044 |
image/ideogram-edit | image edit | prompt *, image=url *, rendering_speed=TURBO|BALANCED|QUALITY, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, nsfw_checker=bool | PNG | $0.044 |
image/ideogram-character | image edit | prompt *, image=url *, rendering_speed=TURBO|BALANCED|QUALITY, style=AUTO|REALISTIC|FICTION, nsfw_checker=bool | PNG | $0.11 |
image/qwen | text→image | prompt *, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, nsfw_checker=bool | PNG | $0.031 |
image/qwen-edit | image edit | prompt *, image=url *, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, nsfw_checker=bool | PNG | $0.037 |
image/qwen-i2i | image edit | prompt *, image=url *, nsfw_checker=bool | PNG | $0.031 |
image/qwen2-edit | image edit | prompt *, image=url *, image_size=16:9|1:1|3:4|4:3|9:16|3:2|2:3, nsfw_checker=bool | PNG | $0.037 |
image/grok | text→image | prompt *, aspect_ratio=1:1|2:3|3:2|16:9|9:16, enable_pro=bool, nsfw_checker=bool | PNG | $0.025 |
image/grok-edit | image edit | prompt *, image=url *, nsfw_checker=bool | PNG | $0.025 |
image/z-image | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=bool | PNG | $0.006 |
image/wan-2.7 | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=bool | PNG | $0.031 |
image/wan-2.7-pro | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=bool | PNG | $0.075 |
image/seedream-5.0-pro | text→image | prompt * | JPG | $0.013 |
image/gemini-3.1-flash | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1K|2K|4K | PNG | $0.013 |
image/gemini-3-pro | text→image | prompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1K|2K|4K | PNG | $0.031 |
🎬 Video
model | Mode | input params | File | Price |
|---|---|---|---|---|
video/veo-3.1-fast | text→video | prompt *, aspect_ratio=16:9|9:16, image=url | MP4 | $0.38 |
video/veo-3.1-quality | text→video | prompt *, aspect_ratio=16:9|9:16, image=url | MP4 | $1.56 |
video/veo-3.1-lite | text→video | prompt *, aspect_ratio=16:9|9:16, image=url | MP4 | $0.19 |
video/gemini-omni | text→video | prompt *, duration=4|6|8|10, aspect_ratio=16:9|9:16, resolution=720p|1080p|4k, image=url, nsfw_checker=bool | MP4 | $0.66 |
video/gemini-omni-flash | text→video | prompt *, attachments=upload[] | MP4 | $0.13 |
video/pixverse-v6 | text→video | prompt *, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, aspect_ratio=16:9|4:3|1:1|3:4|9:16|2:3|3:2|21:9, generate_multi_clip_switch=bool, nsfw_checker=bool | MP4 | $0.045/sec |
video/pixverse-v6-i2v | image→video | prompt *, image=url *, image2=url, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, generate_multi_clip_switch=bool, nsfw_checker=bool | MP4 | $0.045/sec |
video/pixverse-v6-transition | image→video | prompt *, image=url *, image2=url *, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, nsfw_checker=bool | MP4 | $0.045/sec |
video/pixverse-v6-reference | image→video | prompt *, attachments=upload[] *, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, aspect_ratio=16:9|4:3|1:1|3:4|9:16|2:3|3:2|21:9, nsfw_checker=bool | MP4 | $0.051/sec |
video/kling-3.0 | text→video | prompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, mode=std|pro|4K, sound=bool, image=url, image2=url, nsfw_checker=bool | MP4 | $0.11/sec |
video/kling-t2v | text→video | prompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.11/sec |
video/kling-turbo-i2v | image→video | prompt *, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.11/sec |
video/kling-2.6-t2v | text→video | prompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, sound=bool, nsfw_checker=bool | MP4 | $0.34 |
video/kling-2.6-i2v | image→video | prompt *, image=url *, duration=5|10, sound=bool, nsfw_checker=bool | MP4 | $0.34 |
video/kling-2.5-t2v | text→video | prompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, nsfw_checker=bool | MP4 | $0.26 |
video/kling-2.5-i2v | image→video | prompt *, image=url *, image2=url, duration=5|10, nsfw_checker=bool | MP4 | $0.26 |
video/kling-i2v | image→video | prompt *, image=url *, image2=url, duration=5|10, nsfw_checker=bool | MP4 | $0.31 |
video/kling-2.1-standard | image→video | prompt *, image=url *, duration=5|10, nsfw_checker=bool | MP4 | $0.16 |
video/kling-2.1-master-t2v | text→video | prompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, nsfw_checker=bool | MP4 | $1.00 |
video/kling-2.1-master-i2v | image→video | prompt *, image=url *, duration=5|10, nsfw_checker=bool | MP4 | $1.00 |
video/kling-motion | video→video | image=url *, video_url *, prompt, mode=std|pro | MP4 | $1.25 |
video/kling-avatar | avatar (photo+audio) | image=url *, audio_url *, prompt * | MP4 | $0.75 |
video/kling-avatar-pro | avatar (photo+audio) | image=url *, audio_url *, prompt * | MP4 | $1.50 |
video/wan-2.7-t2v | text→video | prompt *, duration=2–15s, ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, audio_url, nsfw_checker=bool | MP4 | $0.15/sec |
video/wan-2.7-i2v | image→video | prompt *, image=url *, image2=url, duration=2–15s, resolution=720p|1080p, audio_url, nsfw_checker=bool | MP4 | $0.15/sec |
video/wan-2.7-r2v | image→video | prompt *, image=url *, duration=2–10s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.15/sec |
video/wan-2.7-edit | video→video | prompt *, video_url *, resolution=720p|1080p, audio_setting=auto|origin | MP4 | $1.50 |
video/wan-t2v | text→video | prompt *, duration=5|10|15, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.44 |
video/wan-i2v | image→video | prompt *, image=url *, duration=5|10|15, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.44 |
video/wan-v2v | video→video | prompt *, video_url *, duration=5|10, resolution=720p|1080p | MP4 | $0.44 |
video/wan-2.5-t2v | text→video | prompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.38 |
video/wan-2.5-i2v | image→video | prompt *, image=url *, duration=5|10, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.38 |
video/wan-2.2-t2v | text→video | prompt *, aspect_ratio=16:9|9:16, resolution=480p|720p, nsfw_checker=bool | MP4 | $0.50 |
video/wan-2.2-i2v | image→video | prompt *, image=url *, resolution=480p|720p, nsfw_checker=bool | MP4 | $0.50 |
video/wan-s2v | avatar (photo+audio) | prompt *, image=url *, audio_url *, resolution=480p|580p|720p | MP4 | $0.38 |
video/wan-animate-move | video→video | image=url *, video_url *, resolution=480p|580p|720p | MP4 | $0.38 |
video/wan-animate-replace | video→video | image=url *, video_url *, resolution=480p|580p|720p | MP4 | $0.38 |
video/seedance-2 | text→video | prompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1|4:3|21:9, resolution=480p|720p|1080p|4k, generate_audio=bool, image=url, image2=url, nsfw_checker=bool | MP4 | $0.26/sec |
video/seedance-2-fast | text→video | prompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, generate_audio=bool, image=url, image2=url, nsfw_checker=bool | MP4 | $0.21/sec |
video/seedance-2-mini | text→video | prompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, generate_audio=bool, image=url, image2=url, nsfw_checker=bool | MP4 | $0.13/sec |
video/seedance-1.5-pro | text→video | prompt *, duration=4–12s, aspect_ratio=16:9|9:16|1:1|4:3, resolution=480p|720p|1080p, generate_audio=bool, image=url, nsfw_checker=bool | MP4 | $0.025/sec |
video/hailuo-02-t2v | text→video | prompt *, duration=6|10, nsfw_checker=bool | MP4 | $0.19 |
video/hailuo-02-t2v-pro | text→video | prompt *, nsfw_checker=bool | MP4 | $0.36 |
video/hailuo-02-i2v | image→video | prompt *, image=url *, image2=url, duration=6|10, resolution=768P|512P, nsfw_checker=bool | MP4 | $0.19 |
video/hailuo-02-i2v-pro | image→video | prompt *, image=url *, image2=url, nsfw_checker=bool | MP4 | $0.36 |
video/hailuo-2.3-i2v | image→video | prompt *, image=url *, duration=6|10, resolution=768P|1080P, nsfw_checker=bool | MP4 | $0.19 |
video/hailuo-2.3-i2v-pro | image→video | prompt *, image=url *, duration=6|10, resolution=768P|1080P, nsfw_checker=bool | MP4 | $0.28 |
video/happyhorse-1.1-t2v | text→video | prompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.18/sec |
video/happyhorse-1.1-i2v | image→video | prompt, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.18/sec |
video/happyhorse-1.1-r2v | image→video | prompt *, image=url *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.18/sec |
video/happyhorse-t2v | text→video | prompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.30/sec |
video/happyhorse-i2v | image→video | prompt, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=bool | MP4 | $0.30/sec |
video/happyhorse-edit | video→video | prompt *, video_url *, resolution=720p|1080p, audio_setting=auto|origin | MP4 | $1.50 |
video/grok-t2v | text→video | prompt *, duration=6–30s, aspect_ratio=16:9|9:16|1:1|3:2|2:3, resolution=480p|720p, mode=normal|fun|spicy, nsfw_checker=bool | MP4 | $0.019/sec |
video/grok-i2v | image→video | prompt *, image=url *, duration=6–30s, resolution=480p|720p, mode=normal|fun|spicy, nsfw_checker=bool | MP4 | $0.019/sec |
video/grok-1.5 | text→video | prompt *, duration=1–15s, aspect_ratio=auto|16:9|9:16|1:1, resolution=480p|720p, image=url, nsfw_checker=bool | MP4 | $0.019/sec |
video/omnihuman | avatar (photo+audio) | image=url *, audio_url *, prompt, output_resolution=720|1080 | MP4 | $1.69 |
video/infinitalk | avatar (photo+audio) | prompt *, image=url *, audio_url *, resolution=480p|720p | MP4 | $0.19 |
video/lipsync | video→video | video_url *, audio_url *, mode=lite|basic | MP4 | $0.50 |
video/topaz-upscale | upscale | video_url *, upscale_factor=2|4 | MP4 | $0.50 |
🎵 Music
model | Mode | input params | File | Price |
|---|---|---|---|---|
music/suno-v5 | music | title *, style *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=bool, prompt | MP3 | $0.075 |
music/suno-cover | music | prompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=bool | MP3 | $0.075 |
music/suno-extend-upload | music | prompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, continueAt=1–120, instrumental=bool | MP3 | $0.075 |
music/suno-add-vocals | music | prompt *, attachments=upload[] *, version=V4_5PLUS, style, title, negativeTags, vocalGender=f|m | MP3 | $0.075 |
music/suno-add-instrumental | music | prompt *, attachments=upload[] *, version=V4_5PLUS, title, negativeTags | MP3 | $0.075 |
music/suno-mashup | music | prompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=bool | MP3 | $0.075 |
music/suno-sounds | music | prompt *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, soundLoop=bool, soundTempo=auto|60|80|100|120|140|160, soundKey=auto|C|Dm|Em|F|G|Am|D#m | MP3 | $0.016 |
🎙 Audio
model | Mode | input params | File | Price |
|---|---|---|---|---|
audio/gemini-3.1-flash-tts | text-to-speech | text *, 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|Rapid Fire|The Drift|Staccato, accent=Neutral|American (Gen)|American (Valley)|American (South)|British (RP)|British (Brixton)|Transatlantic|Australian, audio_profile, scene, temperature=0–2 | WAV | $0.006 |
audio/gemini-2.5-pro-tts | text-to-speech | text *, 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|Rapid Fire|The Drift|Staccato, accent=Neutral|American (Gen)|American (Valley)|American (South)|British (RP)|British (Brixton)|Transatlantic|Australian, audio_profile, scene, temperature=0–2 | WAV | $0.006 |
audio/elevenlabs-tts | text-to-speech | text *, voice=James · Husky, Engaging and Bold|Addison · Australian, Audiobook & Podcast|Adeline · Feminine and Conversational|Allison · Calm, Soothing and Meditative|Ana Rita · Smooth, Expressive and Bright|Anika · Animated, Friendly and Engaging|Arabella · Mysterious and Emotive|Aria · Sultry Villain|Bella · Professional, Bright, Warm|Benjamin · Deep, Warm, Calming|Bradford · Expressive and Articulate|Brian · Deep, Resonant and Comforting|Britney · Calm and Calculative Villain|Brittney · Fun, Youthful & Informative|Brock · Commanding and Loud Sergeant|Burt · Deep, Smooth and Clear|Callum · Husky Trickster|Cassidy · Crisp, Direct and Clear|Ed · Late Night Announcer|Edward · Loud, Confident and Cocky|Emma · Adorable and Upbeat|Eve · Authentic, Energetic and Happy|Felix · Warm, Positive & Contemporary|Finn · Youthful, Eager and Energetic|Hank · Deep and Engaging Narrator|Hope · Poetic, Romantic and Captivating|Hope · Bubbly, Gossipy and Girly|Horatius · Energetic Character Voice|Jamahal · Young, Vibrant, and Natural|Jean · Alluring and Playful Femme Fatale|Jeff · Classy, Resonating and Strong|Jessica · Eloquent Villain|Jessica · Chatty and Friendly|John Doe · Deep|John Morgan · Gritty, Rugged Cowboy|Johnny Dynamite · Vintage Radio DJ|Johnny Kid · Serious and Calm Narrator|Kuon · Cheerful, Clear and Steady|Laura · Enthusiast, Quirky Attitude|Leon · Soothing and Grounded|Liam · Energetic, Social Media Creator|Lucy · Fresh & Casual|Lutz · Chuckling, Giggly and Cheerful|Mark · Casual, Relaxed and Light|Mark · Natural Conversations|Marshal · Friendly, Funny Professor|Monika · Deep and Natural|Nathan · Virtual Radio Host|Nathaniel · Engaging, British and Calm|Phil · Explosive, Passionate Announcer|Rachel · Pro British Radio Presenter|Rex Thunder · Deep N Tough|Sam · Support Agent|Spuds · Wise and Approachable|Sven · Emotional and Nice|Taksh · Calm, Serious and Smooth|Theodore · Serene and Grounded|Tiffany · Natural and Welcoming|Tom · Conversations & Books|Viking Bjorn · Epic Medieval Raider|Viraj · Smooth and Gentle|Viraj · Rich and Soft|Wyatt · Wise Rustic Cowboy|Xavier · Dominating, Metallic Announcer, voice_id, speed=0.8|1.0|1.2 | MP3 | $0.037 |
audio/elevenlabs-multilingual | text-to-speech | text *, voice=James · Husky, Engaging and Bold|Addison · Australian, Audiobook & Podcast|Adeline · Feminine and Conversational|Allison · Calm, Soothing and Meditative|Ana Rita · Smooth, Expressive and Bright|Anika · Animated, Friendly and Engaging|Arabella · Mysterious and Emotive|Aria · Sultry Villain|Bella · Professional, Bright, Warm|Benjamin · Deep, Warm, Calming|Bradford · Expressive and Articulate|Brian · Deep, Resonant and Comforting|Britney · Calm and Calculative Villain|Brittney · Fun, Youthful & Informative|Brock · Commanding and Loud Sergeant|Burt · Deep, Smooth and Clear|Callum · Husky Trickster|Cassidy · Crisp, Direct and Clear|Ed · Late Night Announcer|Edward · Loud, Confident and Cocky|Emma · Adorable and Upbeat|Eve · Authentic, Energetic and Happy|Felix · Warm, Positive & Contemporary|Finn · Youthful, Eager and Energetic|Hank · Deep and Engaging Narrator|Hope · Poetic, Romantic and Captivating|Hope · Bubbly, Gossipy and Girly|Horatius · Energetic Character Voice|Jamahal · Young, Vibrant, and Natural|Jean · Alluring and Playful Femme Fatale|Jeff · Classy, Resonating and Strong|Jessica · Eloquent Villain|Jessica · Chatty and Friendly|John Doe · Deep|John Morgan · Gritty, Rugged Cowboy|Johnny Dynamite · Vintage Radio DJ|Johnny Kid · Serious and Calm Narrator|Kuon · Cheerful, Clear and Steady|Laura · Enthusiast, Quirky Attitude|Leon · Soothing and Grounded|Liam · Energetic, Social Media Creator|Lucy · Fresh & Casual|Lutz · Chuckling, Giggly and Cheerful|Mark · Casual, Relaxed and Light|Mark · Natural Conversations|Marshal · Friendly, Funny Professor|Monika · Deep and Natural|Nathan · Virtual Radio Host|Nathaniel · Engaging, British and Calm|Phil · Explosive, Passionate Announcer|Rachel · Pro British Radio Presenter|Rex Thunder · Deep N Tough|Sam · Support Agent|Spuds · Wise and Approachable|Sven · Emotional and Nice|Taksh · Calm, Serious and Smooth|Theodore · Serene and Grounded|Tiffany · Natural and Welcoming|Tom · Conversations & Books|Viking Bjorn · Epic Medieval Raider|Viraj · Smooth and Gentle|Viraj · Rich and Soft|Wyatt · Wise Rustic Cowboy|Xavier · Dominating, Metallic Announcer, voice_id, speed=0.8|1.0|1.2 | MP3 | $0.075 |
audio/elevenlabs-isolation | audio | audio_url * | MP3 | $0.063 |
🧊 3D models
Output is GLB (some models also offer OBJ, FBX, STL, USDZ, USD, 3MF) plus a preview image: a job returns several files, each with its own extension. The list is in results, and every item carries an ext.
The price is known only after generation
3D is billed by the compute actually spent. We hold the upper bound from the table, then charge the real cost and refund the difference. The final amount is always in cost_usd.
model | Mode | input parameters | File | Price |
|---|---|---|---|---|
3d/tripo-text | text→3D | prompt *, negative_prompt, texture_quality=standard | detailed, geometry_quality=standard | detailed, pbr=bool, quad=bool |
3d/tripo-image | image→3D | image=url *, texture_quality, geometry_quality, pbr=bool, quad=bool | GLB/FBX | $0.31–0.79 |
3d/hunyuan-rapid-text | text→3D | prompt *, format=GLB | OBJ | FBX |
3d/hunyuan-rapid-image | image→3D | image=url *, format, enable_pbr=bool, enable_geometry=bool | GLB etc. | $0.43–0.71 |
3d/hunyuan-pro-text | text→3D | prompt *, generate_type=Normal | Geometry, face_count=40000–1500000, enable_pbr=bool | GLB |
3d/hunyuan-pro-image | image→3D | image=url *, generate_type, face_count, enable_pbr=bool | GLB | $0.71–1.00 |
3d/seed3d-image | image→3D | image=url *, subdivision_level=low | medium | high, file_format=glb |
3d/meshy-text | text→3D | prompt *, texture_resolution=2k | 4k | 8k, pose_mode=a-pose |
3d/meshy-image | image→3D | image=url *, texture_resolution, ultra_mode=bool, should_texture=bool, enable_pbr=bool, texture_prompt, texture_image=url | GLB | $0.94–1.26 |
3d/meshy-multi-image | views→3D | images=[url] * (1–4), texture_resolution, ultra_mode=bool, should_texture=bool, enable_pbr=bool, texture_prompt | GLB | $0.94–1.26 |
A photo as the texture. With 3d/meshy-* the texture is set independently of the geometry: an image in texture_image or words in texture_prompt.
It takes a while. 3D runs from half a minute to several minutes. You do not need to hold the connection: the status is kept and webhooks are available.
🛠 Utilities
model | Mode | input params | File | Price |
|---|---|---|---|---|
image/topaz-upscale | upscale | image=url *, upscale_factor=2|4|8 | PNG | $0.063 |
image/recraft-remove-bg | edit | image=url * | PNG | $0.006 |
image/recraft-upscale | upscale | image=url * | PNG | $0.006 |
Examples by mode
Image from text
{ "model": "image/flux2-pro", "input": { "prompt": "neon fox in snow", "aspect_ratio": "16:9", "resolution": "2K" } }Image edit
{ "model": "image/seedream-edit", "input": { "prompt": "remove background, add neon", "image": "https://…/photo.png" } }Image→video (first/last frame, duration, sound)
{ "model": "video/wan-2.7-i2v", "input": {
"prompt": "slow camera push-in", "image": "https://…/first.png",
"image2": "https://…/last.png", "duration": 8, "resolution": "1080p" } }Music
{ "model": "music/suno-v5", "input": { "title": "Northern Lights", "style": "epic orchestral", "instrumental": true, "version": "V5_5" } }Text-to-speech
{ "model": "audio/gemini-3.1-flash-tts", "input": {
"text": "Hello world", "voice": "Zephyr", "style": "Empathetic",
"pace": "Natural", "accent": "Neutral" } }For dialogues, the API also accepts the official speakers (1–2 voices) and dialogue_turns arrays instead of the simple text field.
Avatar (talking video from photo + audio)
{ "model": "video/omnihuman", "input": { "image": "https://…/face.png", "audio_url": "https://…/voice.mp3" } }Statuses and errors
GET /media/job/:id → status field:
| Status | Meaning |
|---|---|
processing | In progress — keep polling |
done | Ready — file in result_url, charge in cost_usd |
failed | Error — reason in error, money refunded |
POST /media/generate response codes: 400 — unknown model or missing required field; 401 — missing/bad key; 402 — insufficient balance; 403 — model not available on the account.
Estimate the price up front
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", "sound": true } }'{ "model": "video/kling-3.0", "usd": 1.6875 }This reference is generated from the service catalog (109 models) and always matches live prices and parameters.