Every dashboard action is an MCP tool your agent can call.Read the docs
Email API

Send product email with an API you can trace. From accepted request to delivery.

Post a message with a small typed payload and get back an ID you can follow. Scoped keys, idempotent retries, signed outbound webhooks, and one error envelope everywhere.

Included on every tier, including free.

API trace
Email API

Accepted now. Observable later.

Request

POST /api/v1/emails

Authorization: Bearer aem_…

Idempotency-Key: welcome-8f21

{ "to": "[email protected]", "template": "welcome" }

202 Accepted

{ "id": "msg_7ca31", "status": "queued" }

POST/api/v1/emails
202Queued with message ID
Follow-upWebhook or GET by ID
Stable IDs make retries safe

[ 01 / 03 ]What it covers

The whole surface, not just a send endpoint.

Start with one request

A transactional message from a small typed payload, using a template you published.

Publish lifecycle events

Trigger flows from the events your application already emits.

Observe every result

Read message and delivery state, or take a signed webhook, instead of scraping a dashboard.

[ 02 / 03 ]Why it holds up

Acceptance and delivery are different states.

A send that waits on a third party puts that third party inside your request. So the call returns once the work is durably queued, and hands back the identifier that follows the real outcome.

  • Setup mistakes still fail inline — an unpublished template or unverified sender is a 4xx, not a surprise later.
  • Idempotency keys are unique per company, so a retried call never sends twice.
  • Scopes are ranked read, write, admin — a valid key with too low a tier gets 403, never 401.
  • Outbound webhooks are signed over the id, timestamp, and body together.
API trace
Email API

Accepted now. Observable later.

Request

POST /api/v1/emails

Authorization: Bearer aem_…

Idempotency-Key: welcome-8f21

{ "to": "[email protected]", "template": "welcome" }

202 Accepted

{ "id": "msg_7ca31", "status": "queued" }

POST/api/v1/emails
202Queued with message ID
Follow-upWebhook or GET by ID
Stable IDs make retries safe

Questions people ask us

Send one real message and keep its delivery trail.

Create a scoped key, send a message, and follow its ID to delivery.