Docs

AgentiSend API docs

Agent-first email API. Every error names the fix. 167 operations, 71 error codes and 48 event types, generated from the API itself at build. Version 0.1.0.

Guides

Start here

  • QuickstartVerify a domain, create a key, send the first email — in Node, Python or curl.
  • Agents — MCP and the CLIConnect Claude Code, Cursor, Windsurf, VS Code or any remote-MCP client to the same API your code uses.
  • SupportHow to open a request in the console, what Scale gets, and where replies land.

Control plane

  • Budgets and the kill switchPer-key spend ceilings, what happens when one is reached, and the one request that stops everything.
  • ApprovalsWhen a send waits for a person, how the queue behaves, and what an agent sees while it waits.
  • DeliverabilityThe published thresholds, what happens at each one, and how to read the reputation panel.
  • Trust and enforcementThe enforcement ladder, what each rung does, how to appeal, and what we will not do.

Integrating

  • WebhooksSigning, verification, the retry schedule, replay, and what happens to a dead letter.
  • Domains and DNSThe records to publish, what verification checks, the US / EU region choice, and the customer return-path host.
  • TemplatesStoring a template, rendering it, versioning, and why the variables are declared.
  • Migrating from ResendWhat is identical, what the error names map onto, and the two things that behave differently on purpose.
  • MCP serverEvery tool with the scopes it needs, the rate-limit table, the JSON-RPC error codes, and what an agent cannot do.

Every endpoint

Each row carries the anchor the product links to. An error whose fix names an endpoint sends the reader to that anchor here.

emails

Bounce classes

The four classes every bounce lands in, and the one action that changes each number. The Deliverability screen links a bounce row straight to these ids.

hard
The receiving server says the address does not exist. It never will. These addresses are already suppressed. Remove them at the source so the same list stops producing them — GET /suppressions lists every address we are holding back.
soft
A temporary refusal — mailbox full, greylisting, or the receiver was briefly unavailable. Nothing to clean. We retry these; a soft bounce only becomes your problem if the same address keeps soft-bouncing for days, at which point it is treated as hard.
block
The receiver refused the message on reputation or content, not on the address. This is the class that ends in a blocklist. Check the blocklists panel below, then cut volume on this domain until the rate falls. Recipients who never asked for the mail are the usual cause.
policy
The address is real and the receiver would take mail from you, but not this message — size, attachment type, or our own suppression list. Shrink the message or drop the attachment and send again. If the reason is suppression, the address is on a list you can inspect with GET /suppressions.

Catalogues