Developer API
Emails
Send, schedule, batch, retrieve and cancel emails.
Send email
/emailssending keys allowedSends an email immediately or at scheduled_at. Recipients on your suppression list (previous hard bounce or complaint) are skipped and reported with an email.suppressed event.
Body parameters
fromstringrequiredSender, e.g. "Acme <hello@acme.com>". The domain must be verified.
tostring | string[]requiredUp to 50 recipients.
subjectstringrequiredSubject line.
htmlstringHTML body (up to 2 MB).
textstringPlain-text body. Generated from html when omitted.
cc / bccstring | string[]Up to 50 each.
reply_tostring | string[]Reply-To addresses.
headersobjectCustom headers (envelope headers like From/To can't be overridden).
attachmentsarray{ filename, content (base64) | path (URL), content_type, content_id }. 40 MB total. Not allowed with scheduled_at or in batch.
tagsarrayUp to 10 { name, value } pairs (ASCII letters, numbers, _ and -). Returned in webhooks.
scheduled_atstringISO 8601 date or natural language ("in 1 hour"), up to 30 days ahead.
templateobject{ id, variables } — a published template id or alias. Replaces html/text; subject/from fall back to the template's.
Request
curl -X POST 'https://api.iresendly.com/emails' \
-H 'Authorization: Bearer irs_xxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"from": "Acme <hello@acme.com>",
"to": [
"delivered@example.com"
],
"subject": "Your receipt",
"html": "<p>Thanks for your order!</p>",
"tags": [
{
"name": "category",
"value": "receipt"
}
]
}'Response
{
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
}Send batch
/emails/batchsending keys allowedSends up to 100 emails in one request. Header x-batch-validation: strict (default — any invalid email fails the whole batch) or permissive (valid emails are sent and errors are listed).
Request
curl -X POST 'https://api.iresendly.com/emails/batch' \
-H 'Authorization: Bearer irs_xxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '[
{
"from": "Acme <hello@acme.com>",
"to": [
"a@example.com"
],
"subject": "Hi A",
"html": "<p>Hello A</p>"
},
{
"from": "Acme <hello@acme.com>",
"to": [
"b@example.com"
],
"subject": "Hi B",
"html": "<p>Hello B</p>"
}
]'Response
{
"data": [
{
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
},
{
"id": "ae2014de-c168-4c61-8267-70d2662a1ce1"
}
]
}Retrieve email
/emails/{id}Returns one email with its latest status (last_event).
Request
curl -X GET 'https://api.iresendly.com/emails/{id}' \
-H 'Authorization: Bearer irs_xxxxxxxxx'Response
{
"object": "email",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
"from": "Acme <hello@acme.com>",
"to": [
"delivered@example.com"
],
"subject": "Your receipt",
"last_event": "delivered",
"created_at": "2026-10-15T10:00:00.000Z",
"scheduled_at": null,
"tags": []
}List emails
/emailsNewest first, within your plan's retention window.
Query parameters
limitnumber1–100, default 20.
after / beforestringCursor (email id).
Request
curl -X GET 'https://api.iresendly.com/emails' \
-H 'Authorization: Bearer irs_xxxxxxxxx'Response
{
"object": "list",
"has_more": false,
"data": [
{
"object": "email",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
"last_event": "delivered"
}
]
}Reschedule email
/emails/{id}Moves a scheduled email to a new time.
Request
curl -X PATCH 'https://api.iresendly.com/emails/{id}' \
-H 'Authorization: Bearer irs_xxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"scheduled_at": "2026-10-20T09:00:00Z"
}'Response
{
"object": "email",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
}Cancel scheduled email
/emails/{id}/cancelCancels an email that hasn't been sent yet. The quota is returned.
Request
curl -X POST 'https://api.iresendly.com/emails/{id}/cancel' \
-H 'Authorization: Bearer irs_xxxxxxxxx'Response
{
"object": "email",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
}