Sending

Everything you need to call POST /api/v1/emails, poll status, and handle scheduling, tracking, and attachments.

POST /emails

Requires API key scope emails:send. Send either raw content (subject + html/text) or a template_id with template_vars—not both.

{
  "to": ["user@example.com"],
  "subject": "Your receipt",
  "html": "<p>Thanks for your order.</p>",
  "text": "Thanks for your order.",
  "from_": "billing@yourdomain.com",
  "cc": ["finance@yourdomain.com"],
  "reply_to": ["support@yourdomain.com"],
  "template_id": null,
  "template_vars": {},
  "domain_id": "OPTIONAL_DOMAIN_OBJECT_ID",
  "track_opens": false,
  "track_clicks": false,
  "enable_unsubscribe": false,
  "scheduled_at": "2026-06-01T15:00:00Z",
  "attachments": [
    {
      "filename": "invoice.pdf",
      "content_type": "application/pdf",
      "content_b64": "BASE64_PAYLOAD"
    }
  ]
}

Optional header Idempotency-Key deduplicates retries for 24 hours. See API reference for curl, JavaScript, and Python examples.

GET /emails and GET /emails/{'{id}'}

Scope emails:read. List supports status, limit, and offset query params. The detail response includes provider attempts, bodies, attachment metadata, and timestamps for debugging.

Message lifecycle

statusMeaning
queuedAccepted; waiting for the worker
scheduledWill send at scheduled_at
sentHanded to the delivery stack
deliveringIn flight at the provider
deliveredConfirmed delivery event
failedSend or provider error
bouncedHard/soft bounce recorded
cancelledScheduled send cancelled before dispatch

Cancel a scheduled message with POST /emails/{id}/cancel while status is scheduled. Resend with POST /emails/{id}/resend.

Open and click tracking

Set track_opens and/or track_clicks to true on send. The API rewrites HTML to inject a tracking pixel and wrap links before delivery. Opt-in per message.

Scheduling

Pass scheduled_at as an ISO-8601 UTC timestamp in the future. Omit for immediate queueing.

Attachments

Up to 5 files per message, 5 MiB total decoded size. Each attachment needs filename, content_type, and content_b64.

Related

Documentation

Integrate with the REST API

Quickstart, API reference, and webhooks—everything you need to send from your app.