Overview
RUN MAIL exposes a versioned public API for creating mailboxes and reading messages. Website guests use AJAX cookies; integrations use API keys.
Base URL: https://run-mail.com/api/runmail/v1
JSON request and response bodies
Mailbox types: temp, disposable, developer
Mailbox-scoped operations require X-Mailbox-Token
Authentication
Send your API key as Authorization: Bearer or X-Api-Key. After creating a mailbox, pass X-Mailbox-Token with the access_token from the create response.
Header Example
Authorization
Bearer rm_live_...
X-Api-Key
rm_live_...
X-Mailbox-Token
<access_token from create>
Scope:
*, mailboxes:read, mailboxes:write, messages:read, messages:write, domains:read, usage:read
Guests on this website never need an API key — the inbox uses session cookies via /ajax.
Mailboxes
POST
/api/runmail/v1/mailboxes
mailboxes:write
Create a mailbox. Returns email, uuid, and access_token.
Request
JSON
Copy
{
"type": "temp | disposable | developer",
"ttl": 3600,
"local_part": "optional-local"
}
Response
JSON
Copy
{
"success": true,
"data": {
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"email": "[email protected] ",
"access_token": "mbx_...",
"expires_at": 1710000000,
"type": "temp"
}
}
POST
/api/runmail/v1/mailboxes/rotate
mailboxes:write
Rotate an existing mailbox (new address + token).
Headers: X-Mailbox-Token
Request
JSON
Copy
{
"uuid": "mailbox-uuid",
"type": "temp",
"ttl": 7200
}
Response
JSON
Copy
{
"success": true,
"data": {
"uuid": "new-uuid",
"email": "[email protected] ",
"access_token": "mbx_...",
"expires_at": 1710003600,
"type": "temp",
"rotated": true
}
}
GET
/api/runmail/v1/mailboxes/{uuid}
mailboxes:read
Fetch mailbox metadata and unread count.
Headers: X-Mailbox-Token
Response
JSON
Copy
{
"success": true,
"data": {
"uuid": "uuid",
"email": "[email protected] ",
"expires_at": 1710000000,
"type": "temp",
"status": "active",
"unread": 2
}
}
DELETE
/api/runmail/v1/mailboxes/{uuid}
mailboxes:write
Delete a mailbox and its messages.
Headers: X-Mailbox-Token
Response
JSON
Copy
{
"success": true,
"data": {
"deleted": true
}
}
POST
/api/runmail/v1/mailboxes/{uuid}/refresh
messages:read
Force a sync/refresh of the mailbox store.
Headers: X-Mailbox-Token
Response
JSON
Copy
{
"success": true,
"data": {
"refreshed": true
}
}
Messages
GET
/api/runmail/v1/mailboxes/{uuid}/messages
messages:read
List messages for a mailbox (paginated).
Headers: X-Mailbox-Token
Parameters:
limit=1–100, cursor=optional
Response
JSON
Copy
{
"success": true,
"data": {
"messages": [
{
"uuid": "msg-uuid",
"subject": "Verify your account",
"from": "[email protected] ",
"date": "2026-03-20T12:00:00Z"
}
],
"next_cursor": null
}
}
GET
/api/runmail/v1/mailboxes/{uuid}/messages/{message_uuid}
messages:read
Fetch a single message including body.
Headers: X-Mailbox-Token
Response
JSON
Copy
{
"success": true,
"data": {
"uuid": "msg-uuid",
"subject": "Verify your account",
"from": "[email protected] ",
"html": "<p>...</p>",
"text": "..."
}
}
DELETE
/api/runmail/v1/mailboxes/{uuid}/messages/{message_uuid}
messages:write
Delete a single message.
Headers: X-Mailbox-Token
Response
JSON
Copy
{
"success": true,
"data": {
"deleted": true
}
}
Domains
GET
/api/runmail/v1/domains
domains:read
List active receiving domains.
Response
JSON
Copy
{
"success": true,
"data": {
"domains": [
{
"domain": "example.com",
"active": true
}
]
}
}
Usage & realtime
GET
/api/runmail/v1/usage
usage:read
Usage summary for the authenticated key.
Response
JSON
Copy
{
"success": true,
"data": {
"requests": 120,
"period": "24h"
}
}
GET
/api/runmail/v1/ws-config
mailboxes:read
Realtime / WebSocket configuration hint.
Response
JSON
Copy
{
"success": true,
"data": {
"mode": "poll",
"wsUrl": ""
}
}
API Keys
Create and revoke keys from the API Keys page (administrators). Secrets are shown once at creation.
Store keys in your secret manager. Prefer least-privilege scopes over * when possible.
API Keys
Rate limits
Requests are rate-limited per IP and API key. Exceeding limits returns HTTP 429.
Website polling and sync endpoints have separate budgets.
API create/rotate share abuse protection with the rest of the surface.
Backoff and retry with jitter when you receive 429.
Errors
Failures return success: false with an error object.
JSON
{
"success": false,
"error": {
"code": "rm_auth",
"message": "Invalid API key"
}
}
HTTP Meaning
401
Missing or invalid API key
403
Insufficient scope or mailbox token mismatch
429
Rate limited — slow down
500
Server or provider failure