REST API Reference

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.one

Required Header

X-API-Key: your_api_key

Required on every request.

ElevenLabs Header

X-ElevenLabs-Key: your_key

Required 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
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:

json
{
  "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.

json
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/json with 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-Key header.
  • Quality: Use match_source=1 to 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.