Getting Started
A hosted FFmpeg processing service. Send JSON with a public media URL and your API key. Every endpoint returns a task_id you poll to retrieve the processed file.
Using this API from an AI agent?
The native MCP server exposes the full REST API to any MCP-compatible client. Connect with submit_job → wait_for_task, no polling required. MCP guide →
Authentication
https://droidapps.oneRequired Header
X-API-Key: your_api_keyRequired on every request.
ElevenLabs Header
X-ElevenLabs-Key: your_keyRequired for TTS & voice conversion.
Async Task Flow
Every endpoint except /healthz returns HTTP 202 with a typed task object. Poll links.self, or provide callback_url for webhook events.
HTTP/1.1 202 Accepted
Location: https://droidapps.one/task/task_1748200000000_abc123xyz
Retry-After: 5
{
"object": "task",
"id": "task_1748200000000_abc123xyz",
"status": "queued",
"endpoint": "/cut",
"created_at": "2026-05-25T12:00:00+00:00",
"error": null,
"links": {
"self": "https://droidapps.one/task/task_1748200000000_abc123xyz",
"download": null
},
"status_url": "https://droidapps.one/task/task_1748200000000_abc123xyz"
}When completed, the task response includes download URLs:
{
"object": "task",
"id": "task_abc123def456",
"status": "completed",
"endpoint": "/cut",
"created_at": "2025-01-01T00:00:00+00:00",
"completed_at": "2025-01-01T00:00:05+00:00",
"error": null,
"links": {
"self": "https://droidapps.one/task/task_abc123def456",
"download": "https://droidapps.one/task/task_abc123def456/download"
},
"status_url": "https://droidapps.one/task/task_abc123def456",
"output": {
"file_url": "https://droidapps.one/task/task_abc123def456/download",
"file_name": "cut_abc123def456.mp4",
"file_size": 1234567,
"duration": 10.5,
"media_type": "video/mp4"
}
}Webhooks
Pass a callback_url on any request to receive a webhook when the task completes or fails.
POST to your callback_url when the task completes or fails:
{
"object": "event",
"id": "evt_1748200000000_abc123xyz",
"type": "task.completed",
"created_at": "2026-05-25T12:00:05+00:00",
"data": {
"object": {
"object": "task",
"id": "task_abc123def456",
"status": "completed",
"endpoint": "/cut",
"created_at": "2025-01-01T00:00:00+00:00",
"completed_at": "2025-01-01T00:00:05+00:00",
"error": null,
"links": {
"self": "https://droidapps.one/task/task_abc123def456",
"download": "https://droidapps.one/task/task_abc123def456/download"
},
"output": {
"file_url": "https://droidapps.one/task/task_abc123def456/download",
"file_name": "cut_abc123def456.mp4",
"file_size": 1234567,
"duration": 10.5,
"media_type": "video/mp4"
}
}
}
}Notes
- Input: Send
application/jsonwith public HTTPS URLs. Multipart uploads are not supported. - Results: Poll the task, then download from
/task/{id}/download. - ElevenLabs: TTS and voice conversion require an ElevenLabs key via the
X-ElevenLabs-Keyheader. - Quality: Use
match_source=1to preserve original bitrates.
Frequently asked questions
What is Droid Apps?
Droid Apps is a hosted API for processing video and audio. Send JSON with a public media URL and an API key; async FFmpeg workers cut, crop, merge, transcode, or caption the file and return a download link. Two front doors: REST and a native MCP server.
Does Droid Apps have an MCP server for AI agents?
Yes. Connect to https://app.droidapps.one/mcp using Streamable HTTP transport with your Droid Apps API key. Call submit_job with the operation path and body, then wait_for_task to retrieve the processed file. See /mcp for the full connection guide.
Do I upload files in the API request?
No. Host your file at a public HTTPS URL and send JSON referencing it: video_url, audio_url, or photo_url depending on the endpoint. Workers fetch, process, and return a signed download link. No multipart uploads are accepted.
How do I poll for job completion?
Every POST returns HTTP 202 with a task object containing links.self. GET that URL every few seconds with your API key until status is completed or failed. Or provide callback_url to receive a webhook instead of polling.
Which endpoints are available?
The REST API covers: /cut (trim), /crop, /merge_urls (join+transitions), /redub (audio replace/mix), /redub_tts (TTS dub), /redub_vc (voice conversion), /captions/auto, /visualize, /animate_photo, /silence_process, /frame/last, /eleven/* (ElevenLabs voices), and /healthz.
Which plan do I need?
Basic ($25/mo) covers core operations at 3 req/min. Boost ($69/mo) adds auto captions and merge transitions at 5 req/min. Elite ($499/mo) removes rate limits and adds beta endpoints. Annual billing saves 15%. See the pricing page.