Resend
These endpoints act in the Resend account your workspace has connected. You name a Pathbound contact, and Pathbound reads the address from the contact record and makes the call to Resend with your workspace’s Resend API key. Use them to keep Resend segments in step with what you know about your customers, to send a branded or templated email from your sending domain, and to start automations you built in Resend.
Pathbound also reads your Resend contacts, segments and domains on a schedule, so a contact’s segment membership and subscription status are on its profile. That sync only reads. For a one-to-one email from a person’s own mailbox, use Gmail.
Before the first call, connect Resend, create an API key with the actions:write scope, and have a workspace admin switch on the actions you need: see Before you call. The MCP tools whose names start with resend_ call the same endpoints: see MCP tools.
| Endpoint | Scope | What it does |
|---|---|---|
GET /v1/integrations/resend/segments | actions:write | Lists the segments in your Resend account. |
POST /v1/integrations/resend/segments | actions:write | Creates a segment. |
POST /v1/integrations/resend/segments/:segment_id/contacts | actions:write | Adds up to 25 contacts to a segment. |
DELETE /v1/integrations/resend/segments/:segment_id/contacts/:contact_id | actions:write | Removes one contact from a segment. |
DELETE /v1/integrations/resend/segments/:segment_id | actions:write | Deletes a segment. |
GET /v1/integrations/resend/contacts/:contact_id/segments | contacts:read | Lists the segments a contact is in. |
GET /v1/integrations/resend/contacts/:contact_id/emails | contacts:read | Lists the emails Pathbound sent to a contact through Resend. |
POST /v1/integrations/resend/contacts/:contact_id/emails | actions:write | Sends an email to a contact. |
GET /v1/integrations/resend/events | actions:write | Lists the events your Resend account defines. |
POST /v1/integrations/resend/contacts/:contact_id/events | actions:write | Sends one event for a contact. |
POST /v1/integrations/resend/broadcasts | actions:write | Creates a broadcast to a segment. Does not send it. |
POST /v1/integrations/resend/broadcasts/:broadcast_id/send | actions:write | Sends or schedules a broadcast. |
Before you call
Section titled “Before you call”Resend is connected. Connect it under Integrations → Resend in the dashboard, with a Resend API key that has Full access. A key with sending access only cannot read the account’s domains, segments and templates, which these endpoints depend on.
The scope. actions:write is opt-in: a key holds it only when it was selected for that key. See Scopes.
The admin switches. A workspace admin switches each group of actions on under MCP Tools → Resend in the dashboard. Every switch is off until an admin turns it on. The page is named for AI agents, but the API checks a switch on every request to the endpoints it governs: an API key is held to it exactly as an agent is. With a switch off, its endpoints answer 412 with the code tool_disabled.
| Switch | Name in error messages | Endpoints it governs |
|---|---|---|
| Manage segments | resend_manage_segments | Create a segment, add contacts, remove a contact, delete a segment. |
| Send email | resend_send_email | Send an email. |
| Send events | resend_send_event | List events, send an event. |
| Create broadcasts | resend_manage_broadcasts | Create a broadcast. |
| Send broadcasts | resend_send_broadcasts | Send a broadcast. |
Three reads are governed by the key’s scope alone and work with every switch off: List Segments, List a Contact’s Segments and List Emails Sent to a Contact. For an AI agent, the matching tools are still hidden while their switch is off.
GET /v1/tenant/capabilities reports which switches are on, under tool_settings.
Rules shared by these endpoints
Section titled “Rules shared by these endpoints”Contacts are named by their Pathbound id. The address is read from the contact record, so a request never carries the contact’s address.
Resend’s own ids. segment_id and broadcast_id are the ids Resend gives its objects. An id has to be one plain token of letters, digits, _ and -. Anything else is refused with 400.
The sender. from on an email or a broadcast has to be on a domain that is verified for sending in your Resend account, written as [email protected] or Acme <[email protected]>. Otherwise the request is refused with 422 FROM_NOT_VERIFIED, and available_domains lists the domains you can use. Pathbound learns about a newly verified domain at its next Resend sync.
Idempotency. The endpoints that create or send take an Idempotency-Key header, and each endpoint below says whether it requires one. A request with a key that succeeded in the last 24 hours returns the first answer with replayed: true and does nothing again. See Idempotency.
Errors on every endpoint
Section titled “Errors on every endpoint”| Status | code | Meaning | What to do |
|---|---|---|---|
400 | none | A parameter is not valid. details names it. | |
400 | IDEMPOTENCY_KEY_REQUIRED | The endpoint requires the Idempotency-Key header. | |
403 | none | The key lacks the scope. required_scopes names it. | |
409 | ACTION_IN_PROGRESS | A request with this Idempotency-Key is still being processed. | Ask again with the same key. |
412 | integration_missing | Resend is not connected. | Connect Resend. |
412 | invalid_credentials | The stored Resend API key no longer works. | Connect Resend again with a working key. |
412 | tool_disabled | A workspace admin has not switched this action on. | Switch it on under MCP Tools → Resend. |
404 | RESEND_NOT_FOUND | Resend does not know the segment, broadcast or contact. | |
422 | RESEND_REJECTED | Resend refused the request. error is Resend’s own reason, for example a plan limit, and resend_status is the status Resend answered with. | |
429 | RATE_LIMITED | Resend’s rate limit was reached. | Retry after retry_after_seconds. |
500 | none | The request failed. Resend may or may not have carried it out. | Where the endpoint takes an Idempotency-Key, retry with the same key, and read the endpoint’s notes on retrying. |
When Resend refuses the stored key, Pathbound treats the key as dead, and every later request is answered with 412 invalid_credentials until Resend is connected again. The request that meets the refusal is answered by what Resend said:
- a
401or a403is answered with412 invalid_credentialsat once (the two event endpoints are the exception for a403); - Resend answers a revoked key with a
400, and that request is answered with422 RESEND_REJECTEDandresend_status: 400. On Add Contacts to a Segment it is answered200with every contactfailed.
List Segments
Section titled “List Segments”GET /v1/integrations/resend/segmentsRequired scope: actions:write
Returns every segment in your Resend account, read from Resend at the time of the call. Use it to find a segment_id.
curl https://api.pathbound.ai/v1/integrations/resend/segments \ -H "Authorization: Bearer $PATHBOUND_API_KEY"Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "segments": [ { "id": "78261eea-8f8b-4381-83c6-79fa7120f1cf", "name": "Trial users", "created_at": "2026-10-02T09:14:51.000Z" } ]}Each segment is returned as Resend holds it.
Create a Segment
Section titled “Create a Segment”POST /v1/integrations/resend/segmentsRequired scope: actions:write · Switch: Manage segments
Headers
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Idempotency-Key | yes | A key of your choosing for this one segment. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | The segment’s name. At most 255 characters. |
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bd4a9a1b2c3d4e5f60750", "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf", "name": "Trial users"}Resend limits the number of segments by plan. At the limit, the answer is 422 RESEND_REJECTED with Resend’s message.
After a 500, list the segments before you retry: Resend may have created the segment, and a retry would then create a second one with the same name.
Add Contacts to a Segment
Section titled “Add Contacts to a Segment”POST /v1/integrations/resend/segments/:segment_id/contactsRequired scope: actions:write · Switch: Manage segments
Adds up to 25 Pathbound contacts to a Resend segment. For each one, Pathbound reads the email, first name and last name from the contact record, creates the contact in Resend if it is not there yet, and adds it to the segment.
This endpoint takes no Idempotency-Key: adding a contact that is already in the segment changes nothing.
To add everyone in a saved Pathbound segment, however many, run the resend_add_to_segment action on it as a background job: see Run an Action on a Segment. To send to the whole segment afterwards, create a broadcast for the Resend segment and send it.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
segment_id | string | The Resend segment’s id. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
contact_ids | string[] | yes | 1 to 25 Pathbound contact ids. |
curl -X POST https://api.pathbound.ai/v1/integrations/resend/segments/78261eea-8f8b-4381-83c6-79fa7120f1cf/contacts \ -H "Authorization: Bearer $PATHBOUND_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contact_ids": ["665f1c2ab3d4e5f601234567", "665f1c2ab3d4e5f601234568"] }'Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bd5f0a1b2c3d4e5f60755", "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf", "results": [ { "contact_id": "665f1c2ab3d4e5f601234568", "status": "skipped", "error": "contact_email_missing" }, { "contact_id": "665f1c2ab3d4e5f601234567", "status": "added", "resend_contact_id": "e169aa45-1ecf-4183-9955-b1499d5701d3" } ], "summary": { "added": 1, "skipped": 1, "failed": 0 }}The request succeeds as a whole even when some contacts do not: read results. They are not in the order you sent, so match them by contact_id.
status | Meaning |
|---|---|
added | The contact is in the segment. resend_contact_id is Resend’s id for the contact, when Resend returned one. |
skipped | Nothing was sent to Resend. error is contact_not_found (no such contact in your workspace) or contact_email_missing. |
failed | Resend refused this contact. error is Resend’s reason. |
A 401 or 403 from Resend, or its rate limit, fails the whole request with 412 or 429. Contacts that were added before that point stay in the segment, so the request can be sent again as it is. A key that Resend has revoked is different: every contact comes back failed in a 200, as described under Errors on every endpoint.
Remove a Contact from a Segment
Section titled “Remove a Contact from a Segment”DELETE /v1/integrations/resend/segments/:segment_id/contacts/:contact_idRequired scope: actions:write · Switch: Manage segments
Removes one contact from a Resend segment. The contact itself stays in Resend.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
segment_id | string | The Resend segment’s id. |
contact_id | string | The Pathbound contact’s id. |
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf", "contact_id": "665f1c2ab3d4e5f601234567"}Delete a Segment
Section titled “Delete a Segment”DELETE /v1/integrations/resend/segments/:segment_idRequired scope: actions:write · Switch: Manage segments
Deletes the segment in Resend. This cannot be undone. The contacts that were in it are not deleted.
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf"}Error Codes for Segments
Section titled “Error Codes for Segments”In addition to the errors on every endpoint:
| Status | code | Meaning |
|---|---|---|
404 | none | Remove a contact: no such contact in your workspace. |
422 | CONTACT_EMAIL_MISSING | Remove a contact: the contact has no email address. |
List a Contact’s Segments
Section titled “List a Contact’s Segments”GET /v1/integrations/resend/contacts/:contact_id/segmentsRequired scope: contacts:read
Returns the Resend segments a contact is in, as of the last Resend sync. A contact you added to a segment a moment ago appears here after the next sync.
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "segments": [ { "id": "78261eea-8f8b-4381-83c6-79fa7120f1cf", "name": "Trial users" } ]}segments is empty when the contact is not in Resend. A contact that does not exist in your workspace is answered with 404.
List Emails Sent to a Contact
Section titled “List Emails Sent to a Contact”GET /v1/integrations/resend/contacts/:contact_id/emailsRequired scope: contacts:read
Returns the emails Pathbound sent to this contact through Resend, newest first, 50 at most. That covers emails sent with Send an Email and emails sent by an email automation. Email sent from Resend without Pathbound is not listed.
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "emails": [ { "id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c", "subject": "Your invoice for October", "status": "succeeded", "sent_at": "2026-10-13T14:31:07.204Z" } ]}| Field | Description |
|---|---|
id | Resend’s id for the email. |
status | Always succeeded: Resend accepted the email. It is not a delivery status. |
sent_at | When Resend accepted it. Absent on an email that was scheduled. |
scheduled_at | Present on a scheduled email: the time as it was given in the request. |
Send an Email
Section titled “Send an Email”POST /v1/integrations/resend/contacts/:contact_id/emailsRequired scope: actions:write · Switch: Send email
Sends one email to a contact through Resend, from your verified sending domain. The email is written in the request, or is a template of your Resend account.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
contact_id | string | The contact to email. The recipient is the address on the contact record. |
Headers
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Idempotency-Key | yes | A key of your choosing for this one email. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
from | string | yes | The sender, on a verified domain. |
subject | string | yes | The subject line. At most 998 characters. |
body | string | one of the two | The email’s content. |
template_id | string | one of the two | The id of a template in your Resend account. When both are sent, the template is used and body is ignored. |
body_format | string | no | html (the default) or text. Applies to body. |
cc | string[] | no | Addresses to copy. |
bcc | string[] | no | Addresses to copy without showing them. |
reply_to | string[] | no | Reply-to addresses. |
scheduled_at | string | no | When Resend should send the email, for example 2026-10-20T09:00:00Z. The value is passed to Resend as written. Leave it out to send now. |
curl -X POST https://api.pathbound.ai/v1/integrations/resend/contacts/665f1c2ab3d4e5f601234567/emails \ -H "Authorization: Bearer $PATHBOUND_API_KEY" \ -H "Idempotency-Key: 5d0b6f1a-7c3e-4b92-a1d4-0e8f3c6b9a27" \ -H "Content-Type: application/json" \ -d '{ "from": "Acme <[email protected]>", "subject": "Your invoice for October", "body": "<p>Hi Ada,</p><p>Your invoice is ready on your account page.</p>" }'Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bd6b3a1b2c3d4e5f60761", "email_id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c", "sent_at": "2026-10-13T14:31:07.204Z",}With scheduled_at, the response carries scheduled_at in place of sent_at. A scheduled email is held by Resend, not by Pathbound, and this API has no endpoint that cancels it.
The send appears on the contact’s timeline as a pathbound_action event with data.action_type set to resend_send_email.
Retrying. If the request fails with a 500 or you get no answer, retry with the same Idempotency-Key. Pathbound passes a key derived from yours to Resend, and Resend does not send the same email twice under one key within 24 hours.
Error Codes for Email
Section titled “Error Codes for Email”In addition to the errors on every endpoint:
| Status | code | Meaning |
|---|---|---|
400 | BODY_OR_TEMPLATE_REQUIRED | The request carries neither body nor template_id. |
404 | none | No such contact in your workspace. |
422 | CONTACT_EMAIL_MISSING | The contact has no email address. |
422 | FROM_NOT_VERIFIED | from cannot be used. reason is domain_not_verified, or no_verified_domain when the account has no domain verified for sending. available_domains lists the usable ones. |
List Events
Section titled “List Events”GET /v1/integrations/resend/eventsRequired scope: actions:write · Switch: Send events
Returns the events your Resend account defines, with the payload fields each one declares. An event is what starts an automation built in Resend: a welcome series when user.created arrives, a follow-up when demo.booked does. You build the automation in Resend, with its steps, its delays and its templates, and Pathbound only sends the event that starts it. Events and automations are created in Resend, not through Pathbound.
To send an event for everyone who submits a form on your site, instead of one contact at a time, use a Resend event automation.
curl https://api.pathbound.ai/v1/integrations/resend/events \ -H "Authorization: Bearer $PATHBOUND_API_KEY"Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "events": [ { "name": "demo.booked", "schema": { "plan": "string", "seats": "number" } }, { "name": "user.created", "schema": null } ]}| Field | Description |
|---|---|
events[].name | The event’s name. Pass it to Send an Event exactly as returned. |
events[].schema | The payload fields the event declares, each with its type (string, number, boolean or date). null when it declares none. |
truncated | true when the account has more events than were read. Pathbound reads the first 500. |
Resend’s own system events, whose names start with resend:, are left out. The response does not say which automations an event starts or what they send: that is not visible from Pathbound.
Send an Event
Section titled “Send an Event”POST /v1/integrations/resend/contacts/:contact_id/eventsRequired scope: actions:write · Switch: Send events
Sends one of your Resend events for one contact. Resend then runs every active automation that triggers on that event, for that contact. One contact per request.
A 200 means that Resend accepted the event. It does not mean that an email was sent: Pathbound cannot see which automations the event started or what they do.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
contact_id | string | The contact the event is for. It goes to the address on the contact record, and Resend creates the contact if it does not know the address. |
Headers
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Idempotency-Key | yes | A key of your choosing for this one event. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
event | string | yes | The event’s name, exactly as List Events returns it. Capitals count. |
payload | object | no | Data for the automation. See below. |
The body takes these two fields only. Any other field is refused with 400 UNKNOWN_FIELD, so a request cannot name an address, a Resend contact or a segment.
The event has to exist. Its name is checked against your account’s events before anything is sent, and a name that matches none is refused with 422 RESEND_EVENT_NOT_FOUND. A name that starts with resend: is never accepted.
The payload is a flat object: each value is a string, a number or a boolean, and a date is written as an ISO 8601 string. It holds at most 50 fields. A field name is letters, digits and underscores, at most 64 characters, and does not start with a digit. A string is at most 2,000 characters, and the whole payload at most 10,000 bytes as JSON. A payload that breaks one of these rules is refused whole and nothing is sent. The automation can print these values in its emails, so keep to the fields the event’s schema declares.
An unsubscribed contact is refused. A contact that Resend lists as unsubscribed, as of the last sync, gets 422 CONTACT_UNSUBSCRIBED and no event is sent.
curl -X POST https://api.pathbound.ai/v1/integrations/resend/contacts/665f1c2ab3d4e5f601234567/events \ -H "Authorization: Bearer $PATHBOUND_API_KEY" \ -H "Idempotency-Key: 9a3e7b52-4c1d-4f68-b0a9-6d2e8f1c5b74" \ -H "Content-Type: application/json" \ -d '{ "event": "demo.booked", "payload": { "plan": "growth", "seats": 12 } }'Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bd8e2a1b2c3d4e5f60774", "contact_id": "665f1c2ab3d4e5f601234567", "event": "demo.booked", "accepted_at": "2026-10-13T14:40:19.660Z", "note": "Resend accepted the event. Which automations it started, and what they send, is decided in Resend and is not visible here."}The contact’s timeline gets a pathbound_action event with data.action_type set to resend_send_event and the event’s name. Pathbound keeps the names of the payload’s fields and never their values.
An event is sent at most once
Section titled “An event is sent at most once”Resend does not deduplicate events: a second request is a second event, and it starts every automation again. So Pathbound sends an event one time and never repeats a send whose outcome it does not know.
- The same
Idempotency-Keywithin 24 hours returns the first answer withreplayed: true. Nothing is sent again. - When Resend does not answer (a timeout, a dropped connection, a server error), the answer is
502with the codeSEND_UNCONFIRMED. Resend may have accepted the event. Do not retry: the same key getsSEND_UNCONFIRMEDagain for 24 hours, and a new key would send a second event. Check the automation’s runs in Resend first, and send again under a newIdempotency-Keyonly if the event did not arrive. - When Resend refuses the event with a clear answer, nothing was accepted, and you can correct the request and send it again under the same key.
{ "status": "error", "error": "Resend did not answer; the event may have been accepted", "code": "SEND_UNCONFIRMED", "action_id": "670bd8e2a1b2c3d4e5f60774", "hint": "Check the automation's runs in Resend before sending again. Do not retry this request: Resend does not deduplicate events, so a second one starts the automation again. To send deliberately, use a new Idempotency-Key."}Error Codes for Events
Section titled “Error Codes for Events”In addition to the errors on every endpoint. Except for SEND_UNCONFIRMED, every error here means that no event was sent.
| Status | code | Meaning | What to do |
|---|---|---|---|
400 | UNKNOWN_FIELD | The body carries a field other than event and payload. details names it. | Remove the field. |
400 | none | event is not a usable name, or payload breaks a rule. details says which. | |
404 | CONTACT_NOT_FOUND | No such contact in your workspace. | |
422 | CONTACT_EMAIL_MISSING | The contact has no email address. | |
422 | CONTACT_EMAIL_INVALID | The contact’s email is not one plain address. | |
422 | CONTACT_UNSUBSCRIBED | The contact is unsubscribed in Resend. | Nothing. Resubscribing is the contact’s own choice. |
422 | RESEND_EVENT_NOT_FOUND | Your Resend account defines no event of this name. | Use a name from List Events, or create the event in Resend. |
422 | RESEND_REJECTED | Resend refused the request, for example because a payload value has the wrong type for a field the event declares. error is Resend’s reason. | Correct the request. |
502 | RESEND_UNAVAILABLE | Resend could not be reached while Pathbound read your account’s events. | Retry with the same key. |
502 | RESEND_UNEXPECTED_RESPONSE | Resend answered in a form Pathbound does not recognize. | Retry later with the same key. |
502 | SEND_UNCONFIRMED | Resend did not answer. The event may have been accepted. | Do not retry. Check the automation’s runs in Resend. |
On these two endpoints a 403 from Resend is answered with 422 RESEND_REJECTED and Resend’s reason, and does not mark your key as dead.
Create a Broadcast
Section titled “Create a Broadcast”POST /v1/integrations/resend/broadcastsRequired scope: actions:write · Switch: Create broadcasts
Creates a broadcast in Resend: one email addressed to a whole segment. It is not sent until you call Send a Broadcast. A broadcast always goes to a segment.
Headers
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Idempotency-Key | yes | A key of your choosing for this one broadcast. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | A name for the broadcast. |
segment_id | string | yes | The Resend segment to send to. |
from | string | yes | The sender, on a verified domain. |
subject | string | yes | The subject line. At most 998 characters. |
body | string | yes | The email’s content. A broadcast cannot use a template. |
body_format | string | no | html (the default) or text. |
preview_text | string | no | The preview text shown in the inbox. |
reply_to | string[] | no | Reply-to addresses. |
A broadcast can use Resend’s personalization placeholders in its subject and body: {{{FIRST_NAME|fallback}}}, {{{LAST_NAME|fallback}}}, {{{EMAIL}}} and {{{RESEND_UNSUBSCRIBE_URL}}}.
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bda15a1b2c3d4e5f60782", "broadcast_id": "559ac32e-9ef5-46fb-82a1-b76b840c0f7b"}Keep broadcast_id: this API has no endpoint that lists broadcasts.
After a 500, a retry can create a second broadcast. Neither one is sent until you send it.
Send a Broadcast
Section titled “Send a Broadcast”POST /v1/integrations/resend/broadcasts/:broadcast_id/sendRequired scope: actions:write · Switch: Send broadcasts
Sends a broadcast to every contact in its segment, now or at scheduled_at. Check the broadcast and the size of its segment before you call this.
This endpoint takes no Idempotency-Key. Resend refuses to send a broadcast that has already been sent.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
broadcast_id | string | The id returned by Create a Broadcast. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
scheduled_at | string | no | When Resend should send the broadcast, for example 2026-10-20T09:00:00Z. The value is passed to Resend as written. Leave it out to send now. |
Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bdb47a1b2c3d4e5f60790", "broadcast_id": "559ac32e-9ef5-46fb-82a1-b76b840c0f7b"}With scheduled_at, the response carries it back as given.
Error Codes for Broadcasts
Section titled “Error Codes for Broadcasts”In addition to the errors on every endpoint:
| Status | code | Meaning |
|---|---|---|
400 | BODY_REQUIRED | Create: the request carries no body. |
422 | FROM_NOT_VERIFIED | Create: from cannot be used. available_domains lists the usable domains. |
404 | RESEND_NOT_FOUND | Send: Resend does not know the broadcast. |