Simple disposable email for quick testing.
Create an address, receive mail, read the message, and move on. Mailboxes last 10 minutes by default.
Quickstart
- Open the app at
mail.drafterplus.nl. - Click
Generate email, or create a custom name. - Use the address anywhere that needs a temporary inbox.
- Keep the page open to watch incoming messages.
API reference
The app uses a tiny JSON API. Public inboxes work without a key. Account inboxes use your account token from /account.
Create a random address
POST /api/new
Content-Type: application/json
{"domain":"drafterplus.nl"}
Create a custom address
POST /api/new
Content-Type: application/json
{"local":"your-name","domain":"drafterplus.nl"}
Create an API-only random subdomain address
POST /api/new
Content-Type: application/json
{"local":"user","random_subdomain":true}
Create a private account address
POST /api/new
Content-Type: application/json
X-API-Key: {account_api_key}
{"local":"private-name","domain":"drafterplus.nl"}
Read public inbox
GET /api/inbox/{email}?limit=80
Check an address
GET /api/check/{email}
POST /api/check
Content-Type: application/json
{"email":"user@h34934.drafterplus.nl"}
Read private account inbox
GET /api/inbox/{email}?token={mailbox_token}
GET /api/inbox/{email}?limit=80
X-API-Key: {account_api_key}
Read message
GET /api/message/{id}
GET /api/message/{id}?raw=1
| Field | Description |
|---|---|
| The generated mailbox address. | |
| ttl_seconds | Mailbox lifetime in seconds. |
| random_subdomain | True when the API generated an address like user@h34934.drafterplus.nl. |
| token | Private mailbox token. Anyone with the mailbox URL containing this token can open that mailbox. |
| app_url | Direct app URL for the mailbox, including token for private account mailboxes. |
| messages | Inbox results, newest first. |
| error | Machine-readable error code when ok is false. |
Code examples
Copy these examples to create an inbox, poll messages, and read a message body.
cURL: create inbox
curl -sS https://mail.drafterplus.nl/api/new \
-X POST \
-H "Content-Type: application/json" \
-d '{"domain":"drafterplus.nl"}'
cURL: custom inbox
curl -sS https://mail.drafterplus.nl/api/new \
-X POST \
-H "Content-Type: application/json" \
-d '{"local":"test-name","domain":"drafterplus.nl"}'
cURL: API-only random subdomain
curl -sS https://mail.drafterplus.nl/api/new \
-X POST \
-H "Content-Type: application/json" \
-d '{"local":"user","random_subdomain":true}'
cURL: create private account inbox
curl -sS https://mail.drafterplus.nl/api/new \
-X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: dpk_your_account_key" \
-d '{"local":"private-name","domain":"drafterplus.nl"}'
cURL: read inbox
curl -sS "https://mail.drafterplus.nl/api/inbox/silentfox31@drafterplus.nl?limit=80"
cURL: check subdomain address
curl -sS "https://mail.drafterplus.nl/api/check/user@h34934.drafterplus.nl"
cURL: read private account inbox
curl -sS "https://mail.drafterplus.nl/api/inbox/secret@drafterplus.nl?limit=80" \
-H "X-API-Key: dpk_your_account_key"
cURL: read with mailbox token
curl -sS "https://mail.drafterplus.nl/api/inbox/secret@drafterplus.nl?token=mailbox_token_here"
Node.js: create and poll inbox
const API = "https://mail.drafterplus.nl";
async function createInbox() {
const res = await fetch(`${API}/api/new`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ domain: "drafterplus.nl" })
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);
return data.email;
}
async function readInbox(email) {
const res = await fetch(`${API}/api/inbox/${encodeURIComponent(email)}?limit=80`);
const data = await res.json();
if (!data.ok) throw new Error(data.error);
return data.messages;
}
const email = await createInbox();
console.log("Inbox:", email);
setInterval(async () => {
const messages = await readInbox(email);
console.log("Messages:", messages.length);
}, 5000);
Node.js: random subdomain inbox
const API = "https://mail.drafterplus.nl";
const res = await fetch(`${API}/api/new`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ local: "user", random_subdomain: true })
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);
console.log(data.email); // user@h34934.drafterplus.nl
console.log(data.app_url);
Node.js: create private inbox with API key
const API = "https://mail.drafterplus.nl";
const key = "dpk_your_account_key";
const res = await fetch(`${API}/api/new`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": key
},
body: JSON.stringify({ local: "private-name", domain: "drafterplus.nl" })
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);
console.log(data.email);
console.log(data.app_url);
Node.js: private inbox with API key
const API = "https://mail.drafterplus.nl";
const key = "dpk_your_account_key";
const email = "secret@drafterplus.nl";
const res = await fetch(`${API}/api/inbox/${encodeURIComponent(email)}?limit=80`, {
headers: { "X-API-Key": key }
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);
console.log(data.messages);
Node.js: read one message
const API = "https://mail.drafterplus.nl";
const messageId = "0QT3F9ur71xs20KxRkmSyh";
const res = await fetch(`${API}/api/message/${encodeURIComponent(messageId)}`);
const data = await res.json();
if (!data.ok) throw new Error(data.error);
console.log(data.message.Subject || data.message.subject);
console.log(data.message.Text || data.message.text || data.message.HTML || data.message.html);
Output examples
Example JSON output from common API calls.
Create inbox response
{
"ok": true,
"email": "silentfox31@drafterplus.nl",
"ttl_seconds": 600,
"domain": "drafterplus.nl"
}
Random subdomain response
{
"ok": true,
"email": "user@h34934.drafterplus.nl",
"ttl_seconds": 600,
"domain": "h34934.drafterplus.nl",
"random_subdomain": true,
"visibility": "public",
"app_url": "https://mail.drafterplus.nl/user@h34934.drafterplus.nl"
}
Private account inbox response
{
"ok": true,
"email": "private-name@drafterplus.nl",
"token": "mailbox_token_here",
"visibility": "private",
"saved_to_account": true,
"no_expiry": true,
"app_url": "https://mail.drafterplus.nl/?mail=private-name%40drafterplus.nl&token=mailbox_token_here"
}
Inbox response
{
"ok": true,
"email": "silentfox31@drafterplus.nl",
"count": 1,
"messages": [
{
"id": "0QT3F9ur71xs20KxRkmSyh",
"from": "noreply@example.com",
"subject": "Verify your account",
"snippet": "Your verification code is 123456"
}
]
}
Address check response
{
"ok": true,
"email": "user@h34934.drafterplus.nl",
"domain": "h34934.drafterplus.nl",
"valid": true,
"available": true,
"reserved": false,
"visibility": "public",
"random_subdomain": true
}
Error response
{
"ok": false,
"error": "email_in_use"
}
Custom Domains
You can add your own custom domains to receive temporary mail. Setting it up is simple:
- Go to the Account Page.
- Enter your domain (e.g.
yourdomain.com) under the **Domains** tab and click **Add Domain**. - Copy the generated DNS records (TXT and MX records) and add them to your domain provider's DNS settings.
- Click the **Verify now** button. Once verified, the domain will be active.
- To create mailboxes on your custom domain, simply select it from the dropdown in the creation panel or use it via the API.
Public vs. Private Domains
By default, verified custom domains are Private to Token. Only your account (using your account API key) can generate new email addresses on them.
You can click Make Public on the Account Page to publish the domain. Once public, anyone using mail.drafterplus.nl can generate email addresses on your custom domain without needing an account or API key.
Domain Sharing Token
If you want to keep your domain private but still allow specific external applications or users to create temporary inboxes on it, you can share your Domain Token (onboarding token) found on the Account Page. This token grants address generation rights without giving away your master Account API Key.
API Usage with Custom Domains
Create addresses on your verified custom domain using your master Account API Key:
POST /api/new
Content-Type: application/json
X-API-Key: {your_account_api_key}
{"local":"custom-user","domain":"yourdomain.com"}
Alternatively, create addresses on a private custom domain using a **Domain Token** (no Account API Key required):
POST /api/new
Content-Type: application/json
{
"local": "anonymous-user",
"domain": "yourdomain.com",
"domain_token": "dpo_your_domain_token_here"
}
Gmail Integration
You can generate temporary inboxes using real gmail.com (and googlemail.com) addresses to test signups on platforms that block custom domain extensions.
Prerequisites
Before you can generate Gmail addresses, you must enable Gmail integration. Go to the Account Page, click on the **Mails** tab, and toggle Gmail generation **ON**.
Key Rules & Lifetimes
- Lifetimes: Homepage and public API generations last for 5 minutes (300 seconds). Account panel generations last for 10 minutes (600 seconds).
- No Permanent Mode: Gmail temporary inboxes cannot be set to permanent/saved indefinitely. They will automatically expire.
- Limits: Each account is restricted to a maximum of 10 active (unexpired) Gmail mailboxes at any given time.
- Auto-Generated Names: Due to Gmail address format availability, local parts (usernames) are dynamically auto-generated under the hood. You cannot choose a custom local name for Gmail mailboxes.
Gmail API Generation Examples
To create a Gmail temporary mailbox anonymously or via your account, send a POST request with the domain parameter set to gmail.com:
POST /api/new
Content-Type: application/json
{"domain":"gmail.com"}
Example response payload:
{
"ok": true,
"email": "inbox.test.user.abc+temp_x9@gmail.com",
"ttl_seconds": 300,
"expires_after_seconds": 300,
"token": "32_character_mailbox_secret_token_here",
"domain": "gmail.com",
"visibility": "public",
"saved_to_account": false,
"no_expiry": false,
"app_url": "https://mail.drafterplus.nl/inbox.test.user.abc+temp_x9@gmail.com?token=..."
}
Rate limits
There is one simple public API rate limit. If a request is blocked, the API returns {"ok":false,"error":"rate_limited"}.
| Action | Limit |
|---|---|
| All public API requests | 180 requests per 60 seconds |
Limitations
- Creating inboxes is protected against spam bursts.
- Temporary mailboxes expire after
10 minutes. - Account mailboxes are private, saved without expiry, and require either the account API key or the mailbox token.
- Accounts can store up to
100mailboxes. - Anyone with a private mailbox URL that includes the token can open that mailbox.
- Reserved names like
admin,root, andnoreplyare blocked. - Mail is meant for testing and short-lived signups.
- Random subdomain addresses are API-only. The normal app does not generate them from the UI.
Troubleshooting
The inbox stays empty
Check that the address is spelled exactly right and that the sender has actually delivered the message.
The address cannot be created
Use lowercase letters, numbers, dots, dashes, or underscores. Try another name if it is reserved or already active.
The app feels stuck
Refresh the page and generate a new mailbox. The API is stateless enough that a fresh session is usually enough.