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 frontPOST /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/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

🛠 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/:idstatus 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 (105 models) and always matches live prices and parameters.