MarmunkDevelopers
First send

Queue an email without guessing what happened.

Marmunk accepts a durable intent first. Provider submission and recipient delivery happen asynchronously and remain traceable.

01

Before you send

Create an API key with email.send and email.read. Your tenant must also be active, the sender domain must be approved, and the workload must fit its sending envelope.

Permission is layered. A valid API key cannot bypass tenant state, domain approval, suppression, quota, or runtime safety policy.
02

Submit a durable intent

Every mutation requires a stable idempotency key. Reuse it only when the business operation and message semantics are identical.

curl https://api.marmunk.com/v1/emails \
  --request POST \
  --header "Authorization: Bearer $MARMUNK_API_KEY" \
  --header "Idempotency-Key: order_8291_receipt" \
  --header "Content-Type: application/json" \
  --data '{
    "from": { "email": "receipts@example.com", "name": "Example" },
    "to": [{ "email": "customer@example.net" }],
    "subject": "Your receipt",
    "text": "Thanks for your order."
  }'
03

Keep both IDs

{
  "id": "msg_01example",
  "status": "queued",
  "created_at": "2026-07-29T20:00:00.000Z",
  "request_id": "req_01example"
}

202 Accepted means Marmunk durably recorded the send. It does not mean SES accepted it or the recipient received it. Store the msg_* value with your business record.

04

Trace the lifecycle

curl https://api.marmunk.com/v1/email-traces/msg_01example \
  --header "Authorization: Bearer $MARMUNK_API_KEY"