mail.drafterplus.nl docs

Temp Mail API

Fast disposable mailboxes with public/private mode, token-protected access, and predictable TTL behavior.

Live TTL 10 min Create limit: 10/min/IP General limit: 180/min/IP

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
General API
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.
Private
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());