API reference

Requests and responses match Resend's API reference unless a note says otherwise. This page lists our limits and every route we serve.

Base URL

https://manzo.dev

Limits

API limits
LimitValue
Emails in a batch100
Recipients in to, cc or bcc50
Custom headers10
Subject length998 characters
Files attached to one email20
Attachments on one email25 MB in total
How far ahead you can schedule30 days
Addresses in a suppression batch1,000
Webhooks per brand10

Batch items can't carry attachments or scheduled_at. Set x-batch-validation to permissive to send the valid items and get errors for the rest. The default, strict, rejects the whole batch.

Pagination

List routes take limit, from 1 to 100, with a default of 20. To page, pass an object's ID as after or before, but not both. Lists return {"object": "list", "has_more": false, "data": []}.

Idempotency

Send Idempotency-Key on POST /emails and POST /emails/batch, 1 to 256 characters. The same key with the same body returns the first response for 24 hours.

Emails

GET /emails/:id/events is our addition. Resend's email object carries only the last event.

Emails routes
RouteWhat it does
POST /emailsSend one email
POST /emails/batchSend up to the batch limit in one request
GET /emailsList emails, newest first
GET /emails/:idGet one email. html and text are always null
GET /emails/:id/eventsList an email's events, oldest first
PATCH /emails/:idChange scheduled_at
POST /emails/:id/cancelCancel a scheduled email

Domains

Domains routes
RouteWhat it does
POST /domainsAdd a domain. Takes name, stream and custom_return_path
GET /domainsList domains
GET /domains/:idGet a domain and its DNS records
POST /domains/:id/verifyCheck the DNS records now
DELETE /domains/:idRemove a domain

API keys

API keys routes
RouteWhat it does
POST /api-keysCreate a key. Takes name, permission and domain_id
GET /api-keysList keys
DELETE /api-keys/:idRevoke a key

Templates

Templates routes
RouteWhat it does
POST /templatesCreate a template
GET /templatesList templates
GET /templates/:refGet a template by ID or alias
PATCH /templates/:refUpdate a template
DELETE /templates/:refDelete a template
POST /templates/:ref/publishPublish the current draft
POST /templates/:ref/duplicateCopy a template
GET /templates/:ref/versionsList published versions
POST /templates/:ref/versions/:version/rollbackGo back to a published version

Webhooks

The test, event, attempt and replay routes are our additions.

Webhooks routes
RouteWhat it does
POST /webhooksCreate an endpoint. Returns signing_secret once
GET /webhooksList endpoints
GET /webhooks/:idGet an endpoint
PATCH /webhooks/:idUpdate an endpoint
DELETE /webhooks/:idRemove an endpoint
POST /webhooks/:id/signing-secret/rotateReplace the signing secret
POST /webhooks/:id/testSend a test event
GET /webhooks/:id/eventsList deliveries
GET /webhooks/:id/events/:eventIdGet one delivery
GET /webhooks/:id/events/:eventId/attemptsList a delivery's attempts
POST /webhooks/:id/events/:eventId/replaySend a delivery again

Suppressions

Suppressions routes
RouteWhat it does
POST /suppressionsAdd one address
GET /suppressionsList addresses. Filter with origin: bounce, complaint or manual
GET /suppressions/:idOrEmailGet one entry
DELETE /suppressions/:idOrEmailRemove one entry
POST /suppressions/batch/addAdd many addresses
POST /suppressions/batch/removeRemove many addresses

Contacts

Contacts routes
RouteWhat it does
POST /contactsCreate a contact
GET /contactsList contacts
GET /contacts/:refGet a contact by ID or email
PATCH /contacts/:refUpdate a contact
DELETE /contacts/:refDelete a contact
GET /contacts/:ref/segmentsList a contact's segments
POST /contacts/:ref/segments/:segmentIdAdd a contact to a segment
DELETE /contacts/:ref/segments/:segmentIdRemove a contact from a segment
POST /contacts/importsImport contacts, with a consent confirmation
GET /contacts/importsList imports
GET /contacts/imports/:idGet one import

Segments

Segments routes
RouteWhat it does
POST /segmentsCreate a segment
GET /segmentsList segments
GET /segments/:idGet a segment
PATCH /segments/:idRename a segment
DELETE /segments/:idDelete a segment
GET /segments/:id/contactsList a segment's contacts

Audiences

The older name for segments, kept so that existing Resend code still works.

Audiences routes
RouteWhat it does
POST /audiencesCreate an audience
GET /audiencesList audiences
GET /audiences/:idGet an audience
DELETE /audiences/:idDelete an audience
POST /audiences/:id/contactsAdd a contact
GET /audiences/:id/contactsList contacts
GET /audiences/:id/contacts/:refGet a contact
PATCH /audiences/:id/contacts/:refUpdate a contact
DELETE /audiences/:id/contacts/:refRemove a contact

Contact properties

Contact properties routes
RouteWhat it does
POST /contact-propertiesCreate a property
GET /contact-propertiesList properties
GET /contact-properties/:idGet a property
PATCH /contact-properties/:idUpdate a property
DELETE /contact-properties/:idDelete a property

Broadcasts

Broadcasts routes
RouteWhat it does
POST /broadcastsCreate a broadcast
GET /broadcastsList broadcasts
GET /broadcasts/:idGet a broadcast
PATCH /broadcasts/:idUpdate a draft
DELETE /broadcasts/:idDelete a draft
POST /broadcasts/:id/sendSend now or at a set time
POST /broadcasts/:id/cancelCancel a scheduled broadcast
POST /broadcasts/:id/duplicateCopy a broadcast
GET /broadcasts/:id/previewRender a preview
POST /broadcasts/:id/testSend a test to your own address

Account and privacy

All of these are our additions.

Account and privacy routes
RouteWhat it does
GET /usageThis month's usage and allowance
GET /usage/historyUsage by month
GET /checklistYour onboarding checklist
GET /brand-kitGet your brand kit
PATCH /brand-kitUpdate your brand kit
POST /erasuresErase one person's data
GET /access-logSee when our staff viewed your data