EchoWave API & MCP
Everything you can do in the EchoWave editor is available to software and AI agents: start a project, add video/audio/images, overlay text, auto-generate and translate subtitles, add an AI voice-over, then render and download an MP4.
Endpoints
- REST API base:
https://echowave.io/api/v1— OpenAPI 3.1 spec - MCP server (Streamable HTTP):
https://echowave.io/mcp— server card - LLM summary: /llms.txt · /llms-full.txt
- API catalog (RFC 9727): /.well-known/api-catalog
- Health:
GET /api/v1/health
Authentication
Three options, in order of preference:
- OAuth 2.1 + PKCE (for agents acting for a user). Discover the
endpoints at /.well-known/oauth-authorization-server.
Authorize at
/api/auth/oauth2/authorize, exchange the code at/api/auth/oauth2/token, then sendAuthorization: Bearer <token>. - API key (server-to-server). Create one in account settings and send
X-API-Key: <key>. - Firebase ID token as a bearer token, for first-party clients.
Scopes: api:read, api:write.
MCP server
Point any MCP client at https://echowave.io/mcp. The server advertises
its OAuth requirements via WWW-Authenticate (→
protected-resource metadata), or you
can pass an API key. Tools mirror the REST surface:
create_project, add_segment, generate_speech,
transcribe_subtitles, translate_subtitles,
queue_render, get_render, run_tool and more —
see the server card.
Agent skills (end-to-end workflows)
Add text to a video
create_project → import_media (the video) → add_segment type=video → add_segment type=text → queue_render → poll get_render.
Auto-caption a video
create_project → import_media → transcribe_subtitles → optionally translate_subtitles → add_segment type=subtitles → queue_render.
Add an AI voice-over
list_voices → generate_speech (returns an uploadId) → add_segment type=audio → queue_render.
Turn audio into video
create_project → import_media (audio) → add_segment type=audio + type=wave (visualizer) → queue_render.
Convert / trim / compress media
run_tool with a tool name (convert, trim, compress, rotate, …) and a source URL → poll get_render → get_render_download.
Example — create and render
# 1) Create a project
curl -X POST https://echowave.io/api/v1/projects \
-H "X-API-Key: $ECHOWAVE_API_KEY" -H "Content-Type: application/json" \
-d '{"title":"My video","size":{"ratio":"9:16"}}'
# 2) Import a clip
curl -X POST https://echowave.io/api/v1/media \
-H "X-API-Key: $ECHOWAVE_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/clip.mp4","type":"video","projectId":"<id>"}'
# 3) Queue a render, then poll
curl -X POST https://echowave.io/api/v1/renders \
-H "X-API-Key: $ECHOWAVE_API_KEY" -H "Content-Type: application/json" \
-d '{"projectId":"<id>"}'
curl https://echowave.io/api/v1/renders/<renderId> -H "X-API-Key: $ECHOWAVE_API_KEY" Full machine-readable contract: openapi.json.