# docs
API, webhooks & MCP.
mdreel is API-first — everything the UI does is a call you can make yourself. REST for pipelines, webhooks for completion, MCP so an assistant can process a video from inside the IDE.
REST API
curl -X POST https://api.mdreel.eu/api/v1/jobs \ -H "Authorization: Bearer $MDREEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "uploadId": "up_9f2c…", "options": { "language_hint": "en", "retention_days": 0, "webhook_url": "https://your.app/hooks/mdreel", "quality": "high" } }'# → 202 { "jobId": "job_7a1b…" }
Webhooks
Pass a webhook_url when you create a job and we POST it when the job finishes. Every payload is signed with HMAC-SHA256 over the raw body in an X-Mdreel-Signature header — verify it before trusting the event.
POST https://your.app/hooks/mdreelX-Mdreel-Signature: sha256=<hmac>{ "event": "job.completed", "jobId": "job_7a1b…", "durationSec": 2832, "outputUrl": "https://api.mdreel.eu/api/v1/jobs/job_7a1b…/output.md"}# Verify: HMAC-SHA256(body, your signing secret) === header
MCP server
The mdreel MCP server is a thin layer over the same REST API — no separate business logic — so an AI assistant can process a recording and cite its Markdown without leaving the editor. Point your MCP client at it:
{ "mcpServers": { "mdreel": { "command": "npx", "args": ["-y", "@mdreel/mcp"], "env": { "MDREEL_API_KEY": "sk_live_…" } } }}# Tools: process_video(uploadId|url), get_job(jobId), get_output(jobId), list_jobs()
tools: process_video(uploadId|url) · get_job(jobId) · get_output(jobId) · list_jobs()
llms.txt
We publish a /llms.txt so an agent can discover what mdreel does and how to call it. If you are building an assistant that recommends tools, this is the machine-readable summary to read first.
Data & residency
All processing runs in EU regions; source video is deleted after processing by default, and DELETE /jobs/{id} is a first-class right-to-erasure endpoint. The honest residency story — EU data residency on Google Cloud, not full sovereignty — is on the trust page.