Email inbox API
for E2E testing
Stop polling, start asserting. Create a one-time address per test, and the wait API returns the OTP and verification link the moment the email lands. Write signup and passwordless auth tests without mocks - and without sleeps, retries, or HTML parsing.
$ curl -s -X POST https://chobitmail.com/inboxes \ -H "Authorization: Bearer $CHOBITMAIL_API_KEY" { "address": "v56m2aq5ly17piq3@chobitmail.com", … } # When your app under test sends a code to this address… $ curl -s "https://chobitmail.com/inboxes/v56m2aq5ly17piq3/messages/wait?timeout=25" \ -H "Authorization: Bearer $CHOBITMAIL_API_KEY" { "subject": "Your code", "codes": ["482913"], "links": ["https://myapp.example/verify?token=…"] }
Features
Kill the flakiest step
“Waiting for an email” is the flakiest step in E2E testing. The wait API responds the instant a matching message arrives, so you stop tuning polling intervals and timeouts.
OTP already extracted
Codes and verification links are extracted on receipt. Use
codesandlinksdirectly without parsing the HTML body.No crosstalk, no cleanup
Each test gets its own independent address, so parallel runs never pick up another test’s mail. Addresses expire and delete themselves - there is no teardown code to write.
Works with curl alone
Plain REST - no SDK required. Use it from Playwright, Cypress, or any language’s test suite.
How it works
- Create a one-time address via the API
- Have the app under test send mail to that address
- Wait for the message via the wait API and assert on the extracted OTP or link
Pricing
Free to use. Sign in with GitHub - no credit card required.
| Concurrent addresses | 1 |
| Messages received per day | 5 |
| Address lifetime | 5 minutes |
Addresses are single-use, sized for one test: create → receive → assert usually takes under a minute, so the 5-minute lifetime is deliberate. When you hit a limit, only new address creation returns 429 - receiving and reading existing addresses keeps working, so a quota never fails your CI mid-run.