For developers
An email API that stays out of your way.
Send receipts, password resets and alerts with one simple request. Retries are safe, keys only do what you allow, and every message is easy to find later.
curl -X POST https://app.getread.com/api/v1/transactional/send \
-H "Authorization: Bearer gr_api_…" \
-H "Idempotency-Key: order-1048-shipped" \
-H "Content-Type: application/json" \
-d '{
"to": "[email protected]",
"subject": "Your order is on its way",
"template_id": "0b9e5c3a-6f1d-4c2e-9a7b-2d8f4e1c6a90",
"attributes": { "first_name": "Maya", "order_number": "1048" }
}'
201 means your email is queued, and delivery carries on in the background.Your domain
Send from your own domain, with a little help.
Add a few DNS records and we’ll check them for you. getread guides you through DKIM, SPF and DMARC, so inboxes know your email really comes from you.
Once your domain is verified and your workspace is approved, you’re ready to send.
- Copy each record straight into your DNS provider
- See at a glance when everything is verified
API keys
Keys that only do what you allow.
Give each integration its own key and choose exactly what it can do. Read and write are separate, so a key never gets more access than it needs.
- Scopes like
transactional:sendandtemplates:read - An optional expiry date for each key
- Revoke a key whenever it’s no longer needed
Webhooks and history
Know what happened to every message.
Bounces and complaints reach your webhook endpoint as they happen, so your app can react on its own. Opens and clicks from your campaigns arrive the same way.
Every send also lands in Mailroom, with a step-by-step timeline that uses the provider’s own timestamps.
- Opens on transactional email are optional, and you choose per send
- Search any message by subject, address or message ID
The details
Small things that make it pleasant to build on.
REST and JSON under /api/v1, with the care you’d hope for.
- Safe retriesSend the same
Idempotency-Keyand payload, and you get the original send back. A different payload with the same key returns409. - Saved templatesKeep your design in getread and pass a
template_idwith up to 16 KiB ofattributes. - Or bring your own HTMLSend HTML, plain text or both, up to 256 KiB.
- TagsAdd tags to a send to note what it was for.
- Clear rate limitsSending too fast returns
429with aRetry-Afterheader, so you know when to try again. - Cursor paginationLists come back a page at a time, with a
next_cursorfor the next one. - An OpenAPI referenceDownload the OpenAPI (Swagger 2.0) reference from the API docs.
- One shared poolTransactional and marketing email share one monthly pool. See pricing.
Questions developers ask
Do retries send duplicates?
Idempotency-Key with the same payload, and you’ll get the original send back. If the payload is different, the API returns 409, so nothing goes out twice by mistake.What do I need before I can send?
What does a 201 response mean?
Is there an SMTP relay or an SDK?
What happens if I send too fast?
429 with a Retry-After header that tells you when to try again.Do transactional emails count toward my plan?
Send your first email today.
Verify your domain, create a key, and you’re one request away.
[TRIAL TERMS]