Quickstart
Create private mailbox → fetch inbox with token → fetch message details.
POST/api/new
{
"local": "happybanana21",
"domain": "drafterplus.nl",
"visibility": "private"
}
GET/api/inbox/happybanana21@drafterplus.nl?token=YOUR_TOKEN&limit=50
curl "https://mail.drafterplus.nl/api/inbox/happybanana21@drafterplus.nl?token=YOUR_TOKEN&limit=50"
Rate limits
Mailbox create
10 requests / minute / IP
10 requests / minute / IP
General API
180 requests / minute / IP
180 requests / minute / IP
On limit hit: HTTP 429 with retry_after_seconds.
Public vs Private
Public
Anyone with mailbox address can read inbox/messages.
Anyone with mailbox address can read inbox/messages.
Private
Token is required for inbox and message endpoints.
Token is required for inbox and message endpoints.
Token transport
?token=... or X-Mailbox-Token or Authorization: Bearer ...TTL
10 minutes (
expires_in_seconds: 600)Mailbox route
/mail/{email} (private requires token)Endpoint reference
GET/api/health
curl https://mail.drafterplus.nl/api/health
GET/api/stats
curl https://mail.drafterplus.nl/api/stats
POST/api/new
{
"domain": "drafterplus.nl",
"local": "customname",
"email": "customname@drafterplus.nl",
"visibility": "public | private"
}
GET/api/availability/{email}
curl "https://mail.drafterplus.nl/api/availability/happybanana21@drafterplus.nl"
GET/api/inbox/{email}?limit=80&after=TIMESTAMP_MS&token=...
curl "https://mail.drafterplus.nl/api/inbox/happybanana21@drafterplus.nl?token=YOUR_TOKEN&limit=80"
GET/api/message/{id}?email={email}&token=...
curl "https://mail.drafterplus.nl/api/message/MSG_ID?email=happybanana21@drafterplus.nl&token=YOUR_TOKEN"
GET/api/message/{id}/profile?email={email}&token=...
curl "https://mail.drafterplus.nl/api/message/MSG_ID/profile?email=happybanana21@drafterplus.nl&token=YOUR_TOKEN"
GET/api/message/{id}/all?email={email}&token=...
curl "https://mail.drafterplus.nl/api/message/MSG_ID/all?email=happybanana21@drafterplus.nl&token=YOUR_TOKEN"
Legacy compatibility
GET /api/v1/search?query={email}&limit=50&token=...
GET /api/v1/message/{id}?email={email}&token=...
GET /api/v1/message/{id}/profile?email={email}&token=...
GET /api/v1/message/{id}/all?email={email}&token=...
GET /api/v1/availability/{email}
Errors
invalid_email
invalid_domain
invalid_local
reserved_local
email_in_use
private_inbox
email_required
forbidden_message_scope
rate_limited
create_rate_limited
address_pool_busy
not_found
server_error
Reserved local-parts: root, auth, noreply, no-reply, ai, admin.
Examples
POSTPrivate create (cURL)
curl -X POST https://mail.drafterplus.nl/api/new \
-H "Content-Type: application/json" \
-d '{"local":"mybox77","domain":"drafterplus.nl","visibility":"private"}'
JSBrowser fetch
const create = await fetch('/api/new', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ local: 'mybox77', domain: 'drafterplus.nl', visibility: 'private' })
}).then(r => r.json());
const inbox = await fetch(`/api/inbox/${encodeURIComponent(create.email)}?token=${create.token}&limit=50`)
.then(r => r.json());