Signup & onboarding tests
Register a fresh user in every E2E run with a real, unique inbox — no shared test accounts, no flaky cleanup.
Email API for QA & test automation
Create a throwaway mailbox in one call, then waitForMessage() blocks until the
verification email lands so you can assert on the code — no polling, no flake. Real-time,
server-to-server. Webhooks too, if you'd rather push.
Free to start · 10 credits · no card required
// signup.spec.ts
import {
createTempyClient, extractCode
} from '@tempy/api-client';
const tempy = createTempyClient({
apiKey: process.env.TEMPY_KEY
});
// spin up an inbox, block until mail lands
const inbox = await tempy.createMailbox();
const msg = await tempy.waitForMessage(
inbox.email,
{ subjectContains: 'verify' }
);
// assert on the OTP — no polling, no flake
expect(extractCode(msg)).toBe('558213');Built for test automation
Register a fresh user in every E2E run with a real, unique inbox — no shared test accounts, no flaky cleanup.
waitForMessage() blocks until the confirmation email or one-time code lands, then hands it to you to assert on — right in your test.
Trigger a reset, waitForMessage() for it, follow the link — the whole loop, automated, no sleep() in sight.
Prefer push? Point a webhook at your ingest endpoint and get every message as JSON. Your call — wait or webhook.
Why teams pick tempy
waitForMessage() blocks until the email arrives and returns it — or fails deterministically on timeout. No poll loops to hand-roll.
Mail is visible in milliseconds — no “wait 30s and retry”.
Deterministic local parts for stable, collision-free test fixtures.
Reply to a message from the API to test two-way flows.
Have a public ingest endpoint? Get every message pushed as JSON instead.
1 credit = 1 mailbox. Reads and waits are always free. Start free with 10, no card.
Start free — 10 credits, no card. Create your first mailbox in the Playground, then drop the API into CI.