Changelog

What changed, when, and whether you need to care. Breaking changes get 90 days' notice and a migration snippet — that's a promise, not a roadmap item.

subscribe: RSS · changelog@ email digest
ADDED Link classifier learns invite links

Team-invite and workspace-join links are now classified alongside magic_link, verification, and unsubscribe. No SDK update needed — it's a new value, not a new field.

const url = await inbox.waitForLink({ kind: 'invite' });
CHANGED Long-poll timeout ceiling raised to 60s

For apps that batch their outbound mail. The default stays 30s; passing timeout: 60_000 no longer 400s. Existing tests are unaffected.

FIXED OTP extraction: multi-code emails pick the right code

Emails that mention a phone number, an order ID, and a one-time code sometimes extracted the wrong digits. The classifier now weighs label proximity and formatting; the reported-case pass rate went from 94.1% to 99.97%. Thanks to the three of you who sent raw MIME samples.

ADDED Webhooks are GA on Team and Scale

POST every received message to your endpoint, signed with your webhook secret. Retries with backoff for 24h. Long-polling is still the right tool inside a test; webhooks are for everything around it.

ADDED Python SDK 1.0

pip install mailfixture. Sync and async clients, pytest fixtures included (@pytest.fixture def inbox — yes, a fixture fixture). API parity with the Node SDK.

DEPRECATED GET /v1/poll (v0 endpoint)

The pre-1.0 polling endpoint sunsets Aug 1, 2026 — 90 days from this notice. Migration is one line: replace it with GET /v1/inboxes/:id/wait. Both SDKs did this for you in 0.9.