Skip to Content
Coming soon · Public API preview. Access is not open yet and the API may change. Join the waitlist.
The Thumela documentation
Quickstart

Quickstart

This is an integration preview, not a public signup flow. To run these requests, you need an internally provisioned organisation and API key, plus a sending domain verified for that organisation. Public access is coming.

Prepare your server

Keep the API key in a server-side environment variable named THUMELA_API_KEY. Never put it in frontend JavaScript or a public environment variable.

Replace the example addresses below with a sender on your verified domain and a recipient you are authorised to email. The .test addresses are placeholders and are not deliverable.

Send a message

curl https://api.thumela.co.za/emails \ -H "Authorization: Bearer $THUMELA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "from": "orders@example.test", "to": ["customer@example.test"], "subject": "Your order is confirmed", "text": "Thank you. We have received your order.", "idempotencyKey": "order-1042-confirmed" }'

A successful request returns HTTP 200 and a message ID:

{ "id": "message_id" }

Acceptance means the message is queued for sending. It is not proof of delivery.

Read its status

curl https://api.thumela.co.za/emails/message_id \ -H "Authorization: Bearer $THUMELA_API_KEY"

The result includes status, attempts, error and lastEvent. A sent status means SES accepted the message. A delivery event means the recipient’s server accepted it; neither confirms it was read.

Retry deliberately

Use the same idempotencyKey when retrying the same message after a timeout or uncertain response. Within 24 hours, a replay returns the original message ID. Use a new key for a different message.

See Send an email for all fields and Errors for failure handling.