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

Send email from your server language. Keep one observable API contract.

Choose a runtime-specific path for transactional email, product events, safe retries, and signed delivery callbacks.

Node.js, Python, PHP, Ruby, Go, Java, .NET, Rust, and Elixir.

Server quickstart
Languages

One request, complete trace

Request

POST /api/v1/emails

Authorization: Bearer aem_…

Idempotency-Key: welcome-8f21

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

202 Accepted

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

RuntimeServer process
RequestPOST /api/v1/emails
Result202 · queued
Credentials stay server-side

[ 01 / 04 ]Beyond the first request

A send call is the beginning of the integration.

Production email also needs stable identifiers, structured failures, safe retries, webhook verification, and product events that can drive lifecycle flows without duplicating messages.

Send deliberately

Validate the request and keep the returned message identifier for later evidence.

Retry safely

Separate temporary provider failures from invalid recipients and permanent request errors.

Observe outcomes

Verify delivery callbacks and process repeated events without repeating side effects.

[ 03 / 04 ]Every guide

A production path, not a hello-world dead end.

01

Install

Use the language package manager or a standard HTTP client.

02

Send

Keep credentials server-side and retain the message identifier.

03

Observe

Verify and process delivery events idempotently.

Common contract

  • Typed send request
  • Product event publishing
  • Structured errors
  • Verified webhooks

[ 04 / 04 ]Integration choice

Use the thinnest client that keeps the contract obvious.

The API behavior stays the same; only the amount of client-side convenience changes.

Setup

Language SDK

Package-manager install with typed helpers where available

Direct HTTP

Standard HTTP client with no product-specific dependency

Request shape

Language SDK

Runtime-native types and method names

Direct HTTP

Exact JSON payload from the API reference

Errors

Language SDK

SDK error wrapper plus response details

Direct HTTP

Status code and structured error envelope

Best fit

Language SDK

Supported runtimes where convenience reduces integration code

Direct HTTP

Any server runtime, including languages without a dedicated SDK

Questions people ask us

Find your runtime and queue one real message.

Start with the server language you already run and keep the result traceable.