Sonilo API
The Sonilo API turns video, text, and audio inputs into generated music, sound effects, and ducked mixes. Music endpoints stream NDJSON; sound-effects and audio-ducking endpoints create async tasks; account endpoints return ordinary JSON.
Agent quick reference
For coding agents and API clients: use https://api.sonilo.com/v1 as the API base URL. Do not send API requests to https://platform.sonilo.com/docs; that host is documentation only.
Authorization: Bearer sk_your_api_keyis required on every request./v1/text-to-musicand/v1/video-to-musicstreamapplication/x-ndjsonby default, or return atask_idto poll whenmode=async./v1/text-to-sfx,/v1/video-to-sfx,/v1/video-to-video-music,/v1/video-to-video-sfx, and/v1/audio-duckingreturn202with atask_id; pollGET /v1/tasks/{task_id}.- Machine-readable entry points: /llms.txt and /llms-full.txt.
Authentication
The Sonilo API authenticates requests with API keys. Generate and manage keys from the API Keys page. Keys begin with sk_ and are shown once at creation — copy them immediately. Pass the key as a Bearer token on every request:
curl https://api.sonilo.com/v1/account/services \
-H "Authorization: Bearer sk_your_api_key_here"Treat keys like passwords: keep them server-side and load them from environment variables — never commit them or ship them in client code. If a key is exposed, revoke it on the API Keys page and create a new one. Revoked or missing keys return 401; valid keys without endpoint access return 403.
Base URL
All API requests share a single base URL:
https://api.sonilo.com/v1Endpoint paths in this reference are relative to this base. The API is served only over HTTPS — plain HTTP requests are rejected.
Headers
Every request must include an Authorization header. Generation endpoints additionally require a Content-Type:
Authorization: Bearer sk_…— required on every request.Content-Type: multipart/form-data— for generation endpoints such as/v1/text-to-music,/v1/video-to-music, /v1/text-to-sfx, /v1/video-to-sfx, and /v1/audio-ducking. Account endpoints areGETrequests with no body.
Core endpoints
Sonilo exposes streaming music endpoints, async sound-effects and audio-ducking endpoints, a task polling endpoint, and account endpoints. Follow any path below for the full request and response reference.
Generate music scored to a video file or URL.
Score a video with generated music and return a new video (async task).
Generate music from a text prompt and a duration.
Mix voice or narration with background music and return an async task.
Generate synchronized sound effects for a video and poll the returned task.
Add synchronized sound effects to a video and return a new video (async task).
Generate a sound effect from a prompt and poll the returned task.
Retrieve async task status and result URLs for music, SFX, and audio-ducking jobs.
List available services and your account's live limits.
Retrieve credit usage for your account.
Response format
Account endpoints return a single application/json response. Text-to-music and video-to-music return an application/x-ndjson stream — one JSON object per line, each carrying a type field. Text-to-sfx, video-to-sfx, and audio-ducking return JSON with a task_id; poll GET /v1/tasks/:task_id.
Music generation streams use a small, stable set of event types:
title— generated track title; emitted once per stream.audio_chunk— base64-encoded audio fragment. Group chunks bystream_indexand concatenate in order.complete— the stream finished successfully.error— generation failed; carriescodeandmessage.
See the Video to Music reference for the full event schema.
Errors
All errors return a JSON body with a code and message. The HTTP status indicates the failure class:
| Code | Condition |
|---|---|
| 400 | Invalid input (missing video, both video and video_url provided, unsafe URL) |
| 401 | Invalid or missing API key |
| 402 | Account suspended or credit limit exceeded |
| 403 | Valid API key, but the account cannot access this endpoint or workspace |
| 413 | File too large |
| 422 | Video duration exceeds 6 minutes or ffprobe failed |
| 429 | Rate limit exceeded |
| 502 | Upstream processing error |
Rate limits
Your account has shared rate limits that apply across all generation endpoints. Default limits for the standard tier are shown below.
- Requests per minute (RPM): 60
- Max concurrent tasks: 5
See Settings for your account's actual limits.
- Exceeding rate limits returns
429 Too Many Requests - Exceeding file size returns
413 Request Entity Too Large - Exceeding video duration returns
422 Unprocessable Entity
Next steps
Follow the Quickstart to make your first request in five minutes, then jump into the Video to Music reference.