MailDropMailDropInbox + Developer Cloud
AR Developer login
API version 1

API reference.

Authentication, developer domains, inboxes, messages, webhooks, errors, and SDK examples.

Authentication: Authorization: Bearer md_test_…. Keep the key in a secret manager. The complete value is shown only once.

Complete API reference

Base URL: https://api.maildrop.online/v1

ScopePurpose
inboxes:readRead inboxes
inboxes:writeCreate/delete inboxes
messages:readRead messages and OTP metadata
webhooks:writeManage webhook endpoints
GET/accountAny valid API key

Return the organization, active subscription, and granted scopes.

curl -X GET "https://api.maildrop.online/v1/account" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/limitsusage:read

Return effective plan limits and account overrides.

curl -X GET "https://api.maildrop.online/v1/limits" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/usageusage:read

Return current-month usage.

curl -X GET "https://api.maildrop.online/v1/usage" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/domainsinboxes:read

List developer inbox domains enabled for the active plan.

curl -X GET "https://api.maildrop.online/v1/domains" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/inboxes?limit=100inboxes:read

List private inboxes owned by the workspace.

curl -X GET "https://api.maildrop.online/v1/inboxes?limit=100" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
POST/inboxesinboxes:write

Create a private inbox. Use an Idempotency-Key for safe retries.

curl -X POST "https://api.maildrop.online/v1/inboxes" \
  -H "Authorization: Bearer $MAILDROP_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-001" \
  -d '{"local":"checkout-qa","domain":"tests.maildrop.online","lifetime_hours":24}'
GET/inboxes/{inbox_id}inboxes:read

Get one private inbox.

curl -X GET "https://api.maildrop.online/v1/inboxes/123" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
DELETE/inboxes/{inbox_id}inboxes:write

Soft-delete a private inbox.

curl -X DELETE "https://api.maildrop.online/v1/inboxes/123" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/inboxes/{inbox_id}/messages?limit=100&after_id=0messages:read

List stored messages and OTP summaries.

curl -X GET "https://api.maildrop.online/v1/inboxes/123/messages?limit=100&after_id=0" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/messages/{message_id}messages:read

Get the full message and OTP metadata.

curl -X GET "https://api.maildrop.online/v1/messages/456" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
DELETE/messages/{message_id}messages:delete

Soft-delete one message.

curl -X DELETE "https://api.maildrop.online/v1/messages/456" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/messages/{message_id}/attachmentsattachments:read

List attachment metadata. Byte download requires R2 storage.

curl -X GET "https://api.maildrop.online/v1/messages/456/attachments" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
GET/webhookswebhooks:read

List signed webhook endpoints.

curl -X GET "https://api.maildrop.online/v1/webhooks" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
POST/webhookswebhooks:write

Create a webhook endpoint; the signing secret is returned once.

curl -X POST "https://api.maildrop.online/v1/webhooks" \
  -H "Authorization: Bearer $MAILDROP_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-001" \
  -d '{"name":"CI receiver","url":"https://example.com/maildrop-events","events":["message.received"]}'
PATCH/webhooks/{webhook_id}webhooks:write

Update URL, events, name, or status.

curl -X PATCH "https://api.maildrop.online/v1/webhooks/wh_123" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
DELETE/webhooks/{webhook_id}webhooks:write

Delete a webhook endpoint.

curl -X DELETE "https://api.maildrop.online/v1/webhooks/wh_123" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"
POST/webhooks/{webhook_id}/testwebhooks:write

Send a signed test event.

curl -X POST "https://api.maildrop.online/v1/webhooks/wh_123/test" \
  -H "Authorization: Bearer $MAILDROP_API_KEY"

Structured errors

{
  "success": false,
  "error": {
    "code": "forbidden",
    "message": "Missing messages:read scope.",
    "request_id": "cf-ray-or-uuid",
    "details": {}
  }
}

Common statuses: 400, 401, 403, 404, 409, 429, and 500.

Webhook signature verification

Compute HMAC-SHA256 over the timestamp, a dot, and the exact raw request body.

signed = timestamp + "." + raw_request_body
signature = HMAC_SHA256(signing_secret, signed)
X-MailDrop-Signature: t=TIMESTAMP,v1=HEX_SIGNATURE

Team governance and member policy

Owners and workspace administrators can invite members, assign roles, choose personal/shared resource behavior, and set per-member permissions and caps. Member caps can reduce but never exceed plan limits.

GET/teamteam:read
POST/team/invitationsteam:write
PATCH/team/members/{user_id}team:write
{
  "action": "policy",
  "role": "developer",
  "resource_mode": "shared",
  "permissions": { "inboxes.shared.read": true, "api_keys.create": true },
  "limits": { "max_active_inboxes": 10, "max_api_keys": 2 }
}

MailDrop can be installed as an app. When the browser prompt is unavailable, use the permanent install guide.

A new MailDrop version is available.