Media
Images, video and audio behind the same key
Text is only the start. Images, video and speech run through the same key and the same credit pool, priced from exact reported costs plus the flat 20%.
Images
POST /api/v1/images/generations — OpenAI-images shape in:
curl https://sonnely.com/api/v1/images/generations \
-H "Authorization: Bearer $SONNELY_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"bytedance-seed/seedream-5-0-pro","prompt":"a colosseum at dawn"}'Featured: Seedream 5 Pro, FLUX 2 Pro, GPT Image 2, Gemini Flash Image.
Billing is per render from the exact reported cost — failed renders are free.
Full list: GET /api/v1/images/models.
Video
Async by nature: submit, poll, download.
# 1 · submit
curl https://sonnely.com/api/v1/videos/generations \
-H "Authorization: Bearer $SONNELY_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"google/veo-3.1","prompt":"slow push-in on a neon arena","duration":5}'
# {"id":"...","polling_url":"...","sonnely":{"credits_estimate":...}}
# 2 · poll until completed
curl https://sonnely.com/api/v1/videos/<jobId> \
-H "Authorization: Bearer $SONNELY_KEY"Featured: Veo 3.1, Sora 2 Pro, Kling 3 Standard, Hailuo 3 Max. Nothing is
charged at submit — the completion poll charges the exact cost once, and
failed jobs are never billed. Full list: GET /api/v1/videos/models.
Audio
POST /api/v1/audio/speech— text to speech, OpenAI-audio shape, raw bytes back. Billed per input character.POST /api/v1/audio/transcriptions— multipart audio in, JSON text out. Beta flat estimate per request.
Try it visually
The playground has image and video tabs wired to these same endpoints — same key, same billing.