Skip to content

POST /media

Uploads one file and returns a media id for mediaIds in POST /posts. Background: Media. MCP tool: upload_media (10 MB max).

Terminal window
curl -X POST https://botdoor.co/api/v1/media -H "Authorization: Bearer $BOTDOOR_KEY" -F "file=@launch.mp4"
Terminal window
curl -X POST https://botdoor.co/api/v1/media -H "Authorization: Bearer $BOTDOOR_KEY" -H "Content-Type: application/json" \
-d '{"filename": "launch.png", "contentType": "image/png", "dataBase64": "iVBORw0KGgo…"}'
{"media": {"id": "9b1c…", "type": "video", "filename": "launch.mp4", "sizeBytes": 12582912, "width": 1080, "height": 1920,
"durationMs": 15000, "url": "https://…", "previewUrl": "/api/v1/media/9b1c…/preview"}}
  • Limit: 100 MB per file (10 MB over MCP).
  • Types: JPEG, PNG, GIF, WebP; MP4, MOV, M4V, WebM, AVI, MPEG. The type is read from the bytes, not the name.
  • Uploads expire after 7 days. Post them before then.
  • Unclaimed workspaces can hold 10 uploads.

GET /media/{id}/preview returns a JPEG about 480 px wide (404 preview_not_found if there is none).

Status Code Meaning
400 validation_failed No file field, or JSON without filename/dataBase64
400 unsupported_media_type Not an image or video we accept
400 media_unreadable File looks truncated or damaged
403 claim_required Unclaimed workspace already has 10 uploads
413 file_too_large Over the limit
502/503 upstream_* Storage provider trouble. Retry

Common questions

What is the largest file I can upload?
100 MB per file over REST, 10 MB over MCP.
Should I use multipart or JSON?
Multipart. Base64 JSON is 33% bigger and is meant for agents that can't attach files.
How long do uploads last?
7 days. Posting an older upload returns 409 media_expired; upload it again.
How do I make a carousel?
Upload each file, then pass all the ids in mediaIds in order.