Resend coined Agent Experience — AX — as the agent-first parallel to DX. The idea: APIs designed for humans reading docs on a Tuesday afternoon look different from APIs designed for LLMs calling tools in a tight loop. For email APIs, the gap is huge.

What bad AX looks like in email APIs

  • Polling required. Agent burns tokens checking "any new mail?" every 5 seconds.
  • Raw MIME. Agent has to parse multipart boundaries before it can read the body.
  • No first-class OTP field. Agent runs regex on HTML to find the code.
  • Opaque errors. Agent gets "500: internal error" with no recovery guidance.
  • No idempotency. Agent retries and sends duplicates.

What good AX looks like

  • Long-poll endpoints. One call, blocks until event or timeout.
  • Structured extraction. OTP, links, attachments, category — all as first-class JSON fields.
  • Typed errors. {"error": "timeout", "retryable": true, "wait_ms": 5000}.
  • Idempotency keys. Every mutating endpoint accepts one.
  • MCP-native. Tools are discoverable via a manifest, not scraped from HTML docs.
  • Machine-readable docs. OpenAPI + .well-known/agent-skills + llms.txt.

Lumbox's take

Every Lumbox endpoint was designed with a question: "how would a tool-calling LLM invoke this?" That's why waitForOtp exists instead of a listMessages + filter pattern. It's why responses include otp, links, and category alongside the raw body. It's why we publish an MCP server on day one.

AX isn't a checkbox. It's the shape of the whole API surface. lumbox.co.