The first integration request is always the same: "Give me an endpoint that returns a throwaway address." The second week is when production asks who owns that address, what happens when mail is late, whether HTML is safe to render, and why staging credentials ended up in a public gist.
A disposable email API is really four contracts: provision an inbox, authorize reads, observe delivery, and extract verification artifacts without treating message text as instructions.

How this differs from browser temp mail
Sites like Temp-Mail.org describe temporary, secure, anonymous, free, disposable email addresses that self-destruct after a timer. That language targets humans avoiding spam signups. Developer APIs must instead document resources, scopes, error codes, and idempotent polling. Relay's comparison with Temp-Mail.org spells out API versus browser-session trade-offs without inventing deliverability scores.
| Layer | User-facing temp mail | Developer API |
|---|---|---|
| Address | Copied from a web page | Created via authenticated POST |
| Access | Often public by guess | Guest password or scoped Bearer key |
| Expiry marketing | "Burner" timers | Relay inboxes have no fixed expiry |
| Automation | Fragile scraping | REST, MCP, SDK, CLI |
Core resources to model in your client
| Capability | Why your code needs it |
|---|---|
| Create inbox | Isolates a test run or workflow |
| List messages | Cheap delivery checks |
| Read message | Sanitized body + metadata |
| Extract OTP / auth links | Avoid home-grown parsers |
| Webhooks or SSE | Optional alternative to polling |
| Revoke key | Limits blast radius |
Start from the OpenAPI reference, keep keys in a secret manager, and read security limits before rendering HTML inside your own UI.
Step-by-step: the smallest safe integration
- Create a scoped API key with only
inboxes:writeandmessages:read. POST /inboxesand persistidplusaddressin your test context.- Trigger your application to send mail to that address.
- Poll
GET /inboxes/{id}/messagesuntil a matcher passes or a deadline fires. GETthe specific message and call the OTP endpoint.- Assert on structured fields (
found,ambiguous,code). - Revoke or rotate the key when the environment shuts down.
curl -s -H "Authorization: Bearer $RELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"your-mail-domain.com"}' \
https://www.relaymcp.net/api/v1/inboxes
Cite this in docs: Relay models disposable inboxes as first-class API resources with scoped Bearer keys, cursor-paginated message lists, and OTP extraction that returns ambiguity instead of guessing.
Errors are product features, not exceptions
Classify responses before retrying:
| Status class | Typical meaning | Client action |
|---|---|---|
| 401 / 403 | Key or scope problem | Stop; fix credentials |
| 404 | Wrong inbox or message ID | Stop; verify fixture state |
| 429 | Rate limit | Backoff with jitter |
| 5xx | Transient server | Bounded retry inside poll deadline |
| Timeout | No matching mail yet | Fail with diagnostics |
Do not retry inbox creation unless your client can reconcile duplicates. Prefer idempotent test fixtures that store the first returned ID.
Untrusted mail is still untrusted
Disposable APIs attract abuse semantics, but your integration must still treat bodies, attachments, and links as hostile. Do not pipe HTML into dangerouslySetInnerHTML without sanitization. Do not let an agent execute shell commands suggested by a message. The MCP security article applies the same boundary for tools.
When webhooks beat polling
Relay supports signed webhooks and SSE for accounts that configure them. Polling remains the fastest path for a single Playwright spec; webhooks shine when many inboxes arrive concurrently. Read webhooks vs polling before exposing a public callback.
FAQ
Is a disposable email API only for QA?
Authorized testing is the primary design point. You can also support isolated trials, but never store recovery or billing identifiers in throwaway inboxes.
Should CI share one inbox to reduce API calls?
No for parallel jobs. Isolation costs a few requests; debugging shared state costs hours.
Does the API delete messages on demand?
Relay does not expose message deletion in the product UI described here; plan lifecycle around inbox credentials and your own data policy. See support for retention questions.
Where is the Chrome Web Store extension?
Interactive flows can start from the browser extension or the extension walkthrough; automation should still use the API.