[ inbound email // api-first ]
Email identities for automated operations.
Create persistent email addresses, receive messages, extract verification codes, and connect email to your software through a single API.
[ fig. 1 — one message, end to end ]
- Webhookmessage.received, signed
- Forwardops@you.com
- Storeinbox + api
Identity API
A persistent address with a stable id for every account, agent or test run. Plus-addressing routes name+run-42@ to the same identity.
- Now
- Create, list and inspect identities
- Next
- Metadata, external ids, bulk create, /v1
Inbound email
One authenticated endpoint for your inbound provider. Messages are deduplicated on the provider event id and stored before anything else runs.
- Now
- Resend inbound and generic JSON
- Next
- Cloudflare Email Routing, raw MIME, attachments
Verification extraction
Deterministic parsing finds 4–8 digit and alphanumeric codes, sign-in, confirmation and reset links, and any stated expiry. No model in the path.
- Now
- Codes, links, confidence, expiry
- Next
- Provider templates, custom rules
Webhooks
message.received events with extractions attached. Signed with a per-endpoint secret over timestamp and body, or public. Exponential backoff, dead-letter after 8 attempts.
- Now
- Signed or public, retries, filters
- Next
- Secret rotation, replay, history
Developer experience
JSON over HTTPS with structured errors. Verification sessions will let a job wait for the next matching code without running its own polling.
- Now
- HTTP API, test email console
- Next
- TypeScript SDK, verification sessions, OpenAPI
[ fig. 2 — what your software receives ]
The code arrives already parsed. Verify the signature, read extractions[0].value, continue the job.
POST https://your-app.com/hooks/sendir
x-sendir-event: message.received
x-sendir-timestamp: 1792605600
x-sendir-signature: 5f2b… # signed destinations: HMAC-SHA256("{timestamp}.{body}")
{
"type": "message.received",
"message": {
"id": "c0a8…",
"identityId": "7d1e…",
"from": "security@vendor.com",
"to": "acme-billing@sendir.mail",
"subject": "Your sign-in code",
"receivedAt": "2026-10-21T18:00:00.000Z"
},
"extractions": [
{
"type": "otp",
"value": "482913",
"confidence": "high",
"expiresAt": "2026-10-21T18:10:00.000Z"
}
]
}