[ 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 ]

Inbound email
security@vendor.com
Identity
acme-billing@
Extract
otp 482913
  • Webhookmessage.received, signed
  • Forwardops@you.com
  • Storeinbox + api
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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.

Webhook delivery
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"
    }
  ]
}