Receipts, one-time codes, password resets, order updates. Same free allowance and same balance as your campaigns — and, importantly, the same suppression list, so an unsubscribe stops your API too.
curl -X POST https://edm.cresclab.com/api/email/send \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"to": "user@example.com",
"subject": "Your code: 483291",
"html": "<p>Code <b>483291</b></p>"
}'
Returns 202 { "id": "...", "status": "queued" }. Full spec: openapi.yaml.
A key beginning sk_test_ records the message and returns 202 but never hands it to the mail provider. You can wire up and exercise an integration with no chance of mailing a real person, and no charge.
Delivery events — sent, delivered, opened, clicked, bounced, complained — are pushed to your endpoint as they happen, HMAC-signed in X-MAACGO-Signature and retried with backoff for a day. Failed deliveries are listed in the app with a retry button, so a webhook outage on your side is recoverable rather than lost.
Endpoints on private networks are refused. If you are testing locally, use a public tunnel rather than localhost.
There is an MCP server, so Claude Code, Cursor and Codex can send mail, run a campaign someone already wrote, and read the report back. The HTTP transport needs nothing installed. Scopes are deliberately tight: an agent can send, but cannot create a campaign, issue a key, or spend money.
The same meter as campaigns: 3,000 emails a month free, then prepaid credit from NT$0.05 down to NT$0.02 per email by monthly volume. One balance across both product lines. If we accept a message and the provider refuses it, the charge is returned automatically. See pricing.
/api/email/send returns 403 for that address. This is deliberate: on a shared sending domain, an API that bypassed unsubscribes would be an evasion channel paid for by everyone else's deliverability.