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.- For a first runnable smoke test, use
POST /v1/text-to-musicand the Python script in Quickstart. It parsesaudio_chunkevents, waits forcomplete, handlesRetry-After, and writesoutput.m4aonly after real bytes arrive. /v1/text-to-sfx,/v1/video-to-sfx,/v1/video-to-video-music,/v1/video-to-video-sfx,/v1/video-to-sound,/v1/video-to-video-sound,/v1/dubbing, and/v1/audio-duckingreturn202with atask_id; pollGET /v1/tasks/{task_id}.- Machine-readable entry points: /llms.txt and /llms-full.txt, plus /openapi.json.
Common agent-guessed docs paths are served directly, but these are the canonical targets to use in code comments, READMEs, and generated clients:
Agent tooling
These links are intended for coding-agent discovery systems, custom evals, and API smoke tests that need static, first-load documentation.
- Context7:
- both SDKs are indexed as Context7 libraries — context7.com/sonilo-ai/sonilo-js and context7.com/sonilo-ai/sonilo-python. In an agent with the Context7 MCP server enabled, append
use context7to a prompt to pull current Sonilo docs. For direct retrieval, use /llms-full.txt and /openapi.json as the official source URLs. - MCP:
- the
sonilo-mcppackage at github.com/sonilo-ai/sonilo-mcp wraps the Sonilo API for local MCP clients. Sonilo also runs a hosted, OAuth-authenticated MCP server atapi.sonilo.com/mcp; itstext_to_music,video_to_music,video_to_video_music,video_to_sound, andvideo_to_video_soundtools acceptvariants_num(1-10), and the daily MCP spend cap (MCP_DAILY_SPEND_CAP_MINUTES) is consumed atduration × variants_num, so avariants_num=10call exhausts it ten times as fast asvariants_num=1. - Agent Skills:
- Sonilo agent skills and plugin instructions should point agents to
/llms-full.txt,/openapi.json, and the no-argument Python smoke test. - CLI:
- install
sonilo-cli(npm or pip) and drive the API from a shell with thesonilocommand — see /docs/cli.SONILO_API_KEYis read from the environment. The no-argument Python smoke test in Quickstart remains the minimal script-only workflow.
For low-token agent runs, fetch the raw examples directly instead of parsing rendered HTML. The index is available at /examples:
output.m4a./examples/video-to-sfx-minimal.pysubmits video-to-SFX and saves output_sfx.m4a./examples/account-usage-dashboard.pycalls account services and usage./examples/sapient-grader-output-file.pychecks output file size and failure classes.Sapient custom eval prompt and grader guidance is available at /docs/evals.
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.
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.
Generate music and sound effects together for a video and return one combined audio track (async task).
Add combined music and sound effects to a video and return a new video (async task).
Dub a video into one or more target languages and return an async task.
Mix voice or narration with background music and return an async task.
Retrieve async task status and result URLs for music, SFX, combined-sound, 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.