Skip to content

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 (or https://global-api.nordrouter.com for foreign networks).
  • Auth: Authorization: Bearer sk-nr-… header (or X-API-Key: sk-nr-…).
  • Format: JSON, generation is asynchronous (create task → poll → fetch file).

Endpoints ​

MethodPurpose
POST /media/generateCreate a generation task
GET /media/job/:idTask status and result
POST /media/estimateGet a config's price up front
GET /media/modelsMachine-readable list of models and params
POST /media/uploadUpload a source media file
GET /media/file/:idThe finished file (link from result_url)

Request lifecycle ​

1. Create a task

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": "slow camera push-in", "image": "https://…/photo.png", "duration": "5", "sound": true } }'
json
{ "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)

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. 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 /sec tag 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/estimate with the same model + input returns { "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 ​

modelModeinput paramsFilePrice
image/nano-bananatext→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|3:2|2:3|21:9|auto, nsfw_checker=boolPNG$0.025
image/nano-banana-2text→imageprompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=boolPNG$0.050
image/nano-banana-2-litetext→imageprompt *, aspect_ratio=auto|1:1|16:9|9:16|3:4|4:3, image=url, nsfw_checker=boolPNG$0.025
image/nano-banana-protext→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3|21:9|auto, resolution=1K|2K|4K, image=url, nsfw_checker=boolPNG$0.11
image/imagen4-fasttext→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=boolPNG$0.025
image/imagen4text→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=boolPNG$0.050
image/imagen4-ultratext→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=boolPNG$0.075
image/gpt-image-1.5text→imageprompt *, aspect_ratio=1:1|2:3|3:2, quality=medium|high, nsfw_checker=boolPNG$0.025
image/gpt-image-1.5-editimage editprompt *, image=url *, aspect_ratio=3:2|1:1|2:3, quality=medium|high, nsfw_checker=boolPNG$0.025
image/gpt-image-2text→imageprompt *, 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-editimage editprompt *, image=url *, aspect_ratio=auto|1:1|3:2|2:3|16:9|9:16, resolution=1K|2K|4K, nsfw_checker=boolPNG$0.037
image/flux2-protext→imageprompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1K|2K, nsfw_checker=boolPNG$0.031
image/flux2-pro-editimage editprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1K|2K, nsfw_checker=boolPNG$0.031
image/flux2-flextext→imageprompt *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3, resolution=1K|2K, nsfw_checker=boolPNG$0.087
image/flux2-flex-editimage editprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|3:2|2:3|auto, resolution=1K|2K, nsfw_checker=boolPNG$0.087
image/seedream-editimage editprompt *, 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=boolPNG$0.037
image/seedream-4.5-editimage editprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, nsfw_checker=boolPNG$0.044
image/seedream-5-lite-editimage editprompt *, image=url *, aspect_ratio=1:1|4:3|3:4|16:9|9:16|2:3|3:2, quality=basic|high, nsfw_checker=boolPNG$0.037
image/seedream-5.0-pro-editimage editprompt *, 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=boolPNG$0.044
image/ideogram-v3text→imageprompt *, 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=boolPNG$0.044
image/ideogram-editimage editprompt *, 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=boolPNG$0.044
image/ideogram-characterimage editprompt *, image=url *, rendering_speed=TURBO|BALANCED|QUALITY, style=AUTO|REALISTIC|FICTION, nsfw_checker=boolPNG$0.11
image/qwentext→imageprompt *, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, nsfw_checker=boolPNG$0.031
image/qwen-editimage editprompt *, image=url *, image_size=square_hd|square|portrait_4_3|portrait_16_9|landscape_4_3|landscape_16_9, nsfw_checker=boolPNG$0.037
image/qwen-i2iimage editprompt *, image=url *, nsfw_checker=boolPNG$0.031
image/qwen2-editimage editprompt *, image=url *, image_size=16:9|1:1|3:4|4:3|9:16|3:2|2:3, nsfw_checker=boolPNG$0.037
image/groktext→imageprompt *, aspect_ratio=1:1|2:3|3:2|16:9|9:16, enable_pro=bool, nsfw_checker=boolPNG$0.025
image/grok-editimage editprompt *, image=url *, nsfw_checker=boolPNG$0.025
image/z-imagetext→imageprompt *, aspect_ratio=1:1|16:9|9:16|3:4|4:3, nsfw_checker=boolPNG$0.006
image/wan-2.7text→imageprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=boolPNG$0.031
image/wan-2.7-protext→imageprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4|21:9, resolution=1K|2K|4K, image=url, nsfw_checker=boolPNG$0.075
image/seedream-5.0-protext→imageprompt *JPG$0.013
image/gemini-3.1-flashtext→imageprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1K|2K|4KPNG$0.013
image/gemini-3-protext→imageprompt *, aspect_ratio=1:1|16:9|9:16|4:3|3:4, resolution=1K|2K|4KPNG$0.031

🎬 Video ​

modelModeinput paramsFilePrice
video/veo-3.1-fasttext→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.38
video/veo-3.1-qualitytext→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$1.56
video/veo-3.1-litetext→videoprompt *, aspect_ratio=16:9|9:16, image=urlMP4$0.19
video/gemini-omnitext→videoprompt *, duration=4|6|8|10, aspect_ratio=16:9|9:16, resolution=720p|1080p|4k, image=url, nsfw_checker=boolMP4$0.66
video/gemini-omni-flashtext→videoprompt *, attachments=upload[]MP4$0.13
video/pixverse-v6text→videoprompt *, 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=boolMP4$0.045/sec
video/pixverse-v6-i2vimage→videoprompt *, image=url *, image2=url, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, generate_multi_clip_switch=bool, nsfw_checker=boolMP4$0.045/sec
video/pixverse-v6-transitionimage→videoprompt *, image=url *, image2=url *, duration=1–15s, quality=360p|540p|720p|1080p, generate_audio_switch=bool, nsfw_checker=boolMP4$0.045/sec
video/pixverse-v6-referenceimage→videoprompt *, 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=boolMP4$0.051/sec
video/kling-3.0text→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, mode=std|pro|4K, sound=bool, image=url, image2=url, nsfw_checker=boolMP4$0.11/sec
video/kling-t2vtext→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=boolMP4$0.11/sec
video/kling-turbo-i2vimage→videoprompt *, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=boolMP4$0.11/sec
video/kling-2.6-t2vtext→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, sound=bool, nsfw_checker=boolMP4$0.34
video/kling-2.6-i2vimage→videoprompt *, image=url *, duration=5|10, sound=bool, nsfw_checker=boolMP4$0.34
video/kling-2.5-t2vtext→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, nsfw_checker=boolMP4$0.26
video/kling-2.5-i2vimage→videoprompt *, image=url *, image2=url, duration=5|10, nsfw_checker=boolMP4$0.26
video/kling-i2vimage→videoprompt *, image=url *, image2=url, duration=5|10, nsfw_checker=boolMP4$0.31
video/kling-2.1-standardimage→videoprompt *, image=url *, duration=5|10, nsfw_checker=boolMP4$0.16
video/kling-2.1-master-t2vtext→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, nsfw_checker=boolMP4$1.00
video/kling-2.1-master-i2vimage→videoprompt *, image=url *, duration=5|10, nsfw_checker=boolMP4$1.00
video/kling-motionvideo→videoimage=url *, video_url *, prompt, mode=std|proMP4$1.25
video/kling-avataravatar (photo+audio)image=url *, audio_url *, prompt *MP4$0.75
video/kling-avatar-proavatar (photo+audio)image=url *, audio_url *, prompt *MP4$1.50
video/wan-2.7-t2vtext→videoprompt *, duration=2–15s, ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, audio_url, nsfw_checker=boolMP4$0.15/sec
video/wan-2.7-i2vimage→videoprompt *, image=url *, image2=url, duration=2–15s, resolution=720p|1080p, audio_url, nsfw_checker=boolMP4$0.15/sec
video/wan-2.7-r2vimage→videoprompt *, image=url *, duration=2–10s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=boolMP4$0.15/sec
video/wan-2.7-editvideo→videoprompt *, video_url *, resolution=720p|1080p, audio_setting=auto|originMP4$1.50
video/wan-t2vtext→videoprompt *, duration=5|10|15, resolution=720p|1080p, nsfw_checker=boolMP4$0.44
video/wan-i2vimage→videoprompt *, image=url *, duration=5|10|15, resolution=720p|1080p, nsfw_checker=boolMP4$0.44
video/wan-v2vvideo→videoprompt *, video_url *, duration=5|10, resolution=720p|1080pMP4$0.44
video/wan-2.5-t2vtext→videoprompt *, duration=5|10, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=boolMP4$0.38
video/wan-2.5-i2vimage→videoprompt *, image=url *, duration=5|10, resolution=720p|1080p, nsfw_checker=boolMP4$0.38
video/wan-2.2-t2vtext→videoprompt *, aspect_ratio=16:9|9:16, resolution=480p|720p, nsfw_checker=boolMP4$0.50
video/wan-2.2-i2vimage→videoprompt *, image=url *, resolution=480p|720p, nsfw_checker=boolMP4$0.50
video/wan-s2vavatar (photo+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-2text→videoprompt *, 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=boolMP4$0.26/sec
video/seedance-2-fasttext→videoprompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, generate_audio=bool, image=url, image2=url, nsfw_checker=boolMP4$0.21/sec
video/seedance-2-minitext→videoprompt *, duration=4–15s, aspect_ratio=16:9|9:16|1:1, resolution=480p|720p, generate_audio=bool, image=url, image2=url, nsfw_checker=boolMP4$0.13/sec
video/seedance-1.5-protext→videoprompt *, duration=4–12s, aspect_ratio=16:9|9:16|1:1|4:3, resolution=480p|720p|1080p, generate_audio=bool, image=url, nsfw_checker=boolMP4$0.025/sec
video/hailuo-02-t2vtext→videoprompt *, duration=6|10, nsfw_checker=boolMP4$0.19
video/hailuo-02-t2v-protext→videoprompt *, nsfw_checker=boolMP4$0.36
video/hailuo-02-i2vimage→videoprompt *, image=url *, image2=url, duration=6|10, resolution=768P|512P, nsfw_checker=boolMP4$0.19
video/hailuo-02-i2v-proimage→videoprompt *, image=url *, image2=url, nsfw_checker=boolMP4$0.36
video/hailuo-2.3-i2vimage→videoprompt *, image=url *, duration=6|10, resolution=768P|1080P, nsfw_checker=boolMP4$0.19
video/hailuo-2.3-i2v-proimage→videoprompt *, image=url *, duration=6|10, resolution=768P|1080P, nsfw_checker=boolMP4$0.28
video/happyhorse-1.1-t2vtext→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, nsfw_checker=boolMP4$0.18/sec
video/happyhorse-1.1-i2vimage→videoprompt, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=boolMP4$0.18/sec
video/happyhorse-1.1-r2vimage→videoprompt *, image=url *, duration=3–15s, aspect_ratio=16:9|9:16|1:1, resolution=720p|1080p, nsfw_checker=boolMP4$0.18/sec
video/happyhorse-t2vtext→videoprompt *, duration=3–15s, aspect_ratio=16:9|9:16|1:1|4:3|3:4, resolution=720p|1080p, nsfw_checker=boolMP4$0.30/sec
video/happyhorse-i2vimage→videoprompt, image=url *, duration=3–15s, resolution=720p|1080p, nsfw_checker=boolMP4$0.30/sec
video/happyhorse-editvideo→videoprompt *, video_url *, resolution=720p|1080p, audio_setting=auto|originMP4$1.50
video/grok-t2vtext→videoprompt *, duration=6–30s, aspect_ratio=16:9|9:16|1:1|3:2|2:3, resolution=480p|720p, mode=normal|fun|spicy, nsfw_checker=boolMP4$0.019/sec
video/grok-i2vimage→videoprompt *, image=url *, duration=6–30s, resolution=480p|720p, mode=normal|fun|spicy, nsfw_checker=boolMP4$0.019/sec
video/grok-1.5text→videoprompt *, duration=1–15s, aspect_ratio=auto|16:9|9:16|1:1, resolution=480p|720p, image=url, nsfw_checker=boolMP4$0.019/sec
video/omnihumanavatar (photo+audio)image=url *, audio_url *, prompt, output_resolution=720|1080MP4$1.69
video/infinitalkavatar (photo+audio)prompt *, image=url *, audio_url *, resolution=480p|720pMP4$0.19
video/lipsyncvideo→videovideo_url *, audio_url *, mode=lite|basicMP4$0.50
video/topaz-upscaleupscalevideo_url *, upscale_factor=2|4MP4$0.50

🎵 Music ​

modelModeinput paramsFilePrice
music/suno-v5musictitle *, style *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=bool, promptMP3$0.075
music/suno-covermusicprompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=boolMP3$0.075
music/suno-extend-uploadmusicprompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, continueAt=1–120, instrumental=boolMP3$0.075
music/suno-add-vocalsmusicprompt *, attachments=upload[] *, version=V4_5PLUS, style, title, negativeTags, vocalGender=f|mMP3$0.075
music/suno-add-instrumentalmusicprompt *, attachments=upload[] *, version=V4_5PLUS, title, negativeTagsMP3$0.075
music/suno-mashupmusicprompt *, attachments=upload[] *, version=V5_5|V5|V4_5ALL|V4_5PLUS|V4_5|V4, instrumental=boolMP3$0.075
music/suno-soundsmusicprompt *, 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#mMP3$0.016

🎙 Audio ​

modelModeinput paramsFilePrice
audio/gemini-3.1-flash-ttstext-to-speechtext *, 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–2WAV$0.006
audio/gemini-2.5-pro-ttstext-to-speechtext *, 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–2WAV$0.006
audio/elevenlabs-ttstext-to-speechtext *, 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.2MP3$0.037
audio/elevenlabs-multilingualtext-to-speechtext *, 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.2MP3$0.075
audio/elevenlabs-isolationaudioaudio_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.

modelModeinput parametersFilePrice
3d/tripo-texttext→3Dprompt *, negative_prompt, texture_quality=standarddetailed, geometry_quality=standarddetailed, pbr=bool, quad=bool
3d/tripo-imageimage→3Dimage=url *, texture_quality, geometry_quality, pbr=bool, quad=boolGLB/FBX$0.31–0.79
3d/hunyuan-rapid-texttext→3Dprompt *, format=GLBOBJFBX
3d/hunyuan-rapid-imageimage→3Dimage=url *, format, enable_pbr=bool, enable_geometry=boolGLB etc.$0.43–0.71
3d/hunyuan-pro-texttext→3Dprompt *, generate_type=NormalGeometry, face_count=40000–1500000, enable_pbr=boolGLB
3d/hunyuan-pro-imageimage→3Dimage=url *, generate_type, face_count, enable_pbr=boolGLB$0.71–1.00
3d/seed3d-imageimage→3Dimage=url *, subdivision_level=lowmediumhigh, file_format=glb
3d/meshy-texttext→3Dprompt *, texture_resolution=2k4k8k, pose_mode=a-pose
3d/meshy-imageimage→3Dimage=url *, texture_resolution, ultra_mode=bool, should_texture=bool, enable_pbr=bool, texture_prompt, texture_image=urlGLB$0.94–1.26
3d/meshy-multi-imageviews→3Dimages=[url] * (1–4), texture_resolution, ultra_mode=bool, should_texture=bool, enable_pbr=bool, texture_promptGLB$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 ​

modelModeinput paramsFilePrice
image/topaz-upscaleupscaleimage=url *, upscale_factor=2|4|8PNG$0.063
image/recraft-remove-bgeditimage=url *PNG$0.006
image/recraft-upscaleupscaleimage=url *PNG$0.006

Examples by mode ​

Image from text

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

Image edit

json
{ "model": "image/seedream-edit", "input": { "prompt": "remove background, add neon", "image": "https://…/photo.png" } }

Image→video (first/last frame, duration, sound)

json
{ "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

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

Text-to-speech

json
{ "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)

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

Statuses and errors ​

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

StatusMeaning
processingIn progress — keep polling
doneReady — file in result_url, charge in cost_usd
failedError — 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 ​

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", "sound": true } }'
json
{ "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.