POST
POST /inboxes/{inbox_id}/threads/{thread_id}/emails/{email_id}/reply — Resend API
Resend APIReply to a thread email
- Base URL
- https://api.resend.com
- Auth
- Authorization: Bearer <RESEND_API_KEY>
- Last verified
- 2026-10-20 · upstream hash matched
Actions Try in browser→
Agents: curl -H "Accept: text/markdown" this URL
→ 214 tokens · Vary: Accept
→ 214 tokens · Vary: Accept
Critical gotchas
All requests must include a User-Agent header (e.g. User-Agent: my-app/1.0) or the API returns HTTP 403.
cURL
curl -X POST 'https://api.resend.com/inboxes/inbox-id/threads/thread-id/emails/email-id/reply' \ -H "Authorization: Bearer $RESEND_API_KEY" \ -H 'User-Agent: my-app/1.0' \ -H 'Content-Type: application/json' \ -d '{ "cc": [ "[email protected]" ], "bcc": [ "[email protected]" ], "html": "<p>Refund issued for order 1041.</p>", "text": "Refund issued for order 1041.", "subject": "Re: Refund for order 1041", "reply_all": false, "attachments": [ { "content": "example-content", "filename": "example-filename", "path": "example-path", "content_type": "example-content-type", "content_id": "example-content-id" } ], "headers": { "X-Ticket-Id": "4821" }}'
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| inbox_id | path | string | Yes | The Inbox ID or the inbox email address, such as `[email protected]`. A value that contains `@` must be a valid email address, and any other value must be a UUID, or the request returns a 422. The address match is case-insensitive and never falls back to the inbox `name`. An address that matches no inbox returns a 404. |
| thread_id | path | string | Yes | The Thread ID. |
| email_id | path | string | Yes | The Email ID of the message to reply to, as returned in `data[].id` by the list thread emails endpoint. |
| cc | body | string | No | CC recipient email address. For multiple addresses, send as an array of strings. Without `reply_all`, the reply copies only these addresses. With `reply_all`, these addresses are merged with the copied recipients, without duplicates. `cc` and `bcc` combined must be fewer than 50 addresses. After the `to` recipients are added, the reply cannot exceed 50 recipients. Each address is `[email protected]` or `Name <[email protected]>`. An address that is not valid returns a 422. |
| bcc | body | string | No | BCC recipient email address. For multiple addresses, send as an array of strings. BCC recipients of the original message are never copied. Each address is `[email protected]` or `Name <[email protected]>`. An address that is not valid returns a 422. |
| html | body | string | Yes | The HTML body of the reply. |
| text | body | string | No | The plain-text body of the reply. |
| subject | body | string | No | The subject of the reply. Cannot be only whitespace or contain a line break. When omitted, the thread subject is used, prefixed with `Re:` if it does not already start with it. |
| reply_all | body | boolean | No | Reply to everyone on the original message. For a message the inbox received, the reply goes to its `Reply-To` addresses, or to its sender when it has none, and copies the other addresses of its `To` header and its `cc` recipients in `cc`. For a message the inbox sent, the reply goes to that message's `Reply-To` addresses when they are not the inbox address, otherwise to its `to` recipients, and copies its `cc` recipients. The inbox address is always excluded, and duplicates are removed. |
| attachments | body | object[] | No | Files to attach, as on `POST /emails`. Each one needs `content` or `path`. The `content` of all files can total at most 25 MB. A `path` file does not count toward the 25 MB, because it is fetched when the email is sent. An empty file, a blocked file type, a `path` that does not start with `http` or that starts with `http://localhost:`, or a `content_type` that is not a valid MIME type returns a 422. Other `path` problems fail the email when it is sent, not the request. |
| headers | body | object | No | Custom headers to add to the email. The `In-Reply-To`, `References` and `Reply-To` headers are set by Resend and cannot be set here. Sending one of them, in any letter case, returns a 422. Header names cannot be empty, and names and values cannot contain line breaks or null characters, or the request returns a 422. `null` means no custom headers. |
Response 200 OK
{
"id": "6a0c8e58-3d9e-4f7a-8b14-2e3f4a5b6c71"
} Get a free Resend API key → sponsored Affiliate link - we may earn a commission, at no extra cost to you.