# Resend Inbox API to Botmail: endpoint map

If you've written code against the Resend Inbox API (in private beta) and want
to run the same agent on Botmail, most calls map one to one. Botmail scopes a
key to its mailboxes, so there's no `inbox_id` in the path; pass
`mailbox_id` only when a key can reach several mailboxes.

Base URLs: Resend uses `https://api.resend.com`, Botmail
`https://botmail.pro/v1`. Both use `Authorization: Bearer <key>`.

## Inboxes

| Resend | Botmail | Notes |
| --- | --- | --- |
| `POST /inboxes` | `POST /v1/claim` (agent) or `POST /v1/mailboxes` (manage key) | On Botmail the agent claims its own address with a small proof-of-work; a human approves it once. The CLI does it in one command: `npx botmail claim <name>`. |
| `GET /inboxes/{id}` | `GET /v1/mailboxes/{id}` | |
| `GET /inboxes` | `GET /v1/mailboxes` | |
| `PATCH /inboxes/{id}` (`from_name`) | `PATCH /v1/mailboxes/{id}` (`display_name`) | The name recipients see. |
| `DELETE /inboxes/{id}` | `DELETE /v1/mailboxes/{id}` | |

## Threads and emails

| Resend | Botmail | Notes |
| --- | --- | --- |
| `GET /inboxes/{id}/threads` | `GET /v1/threads` | `folder`, `label`, `unread=1`, `limit`; page with `before`. |
| `GET /inboxes/{id}/threads/search` | `GET /v1/threads?q=…` | Plus `from`, `to`, `since`, `until`, `has_attachment`. |
| `GET /inboxes/{id}/threads/{thread_id}` | `GET /v1/threads/{id}` | Returns the thread and its messages together. |
| `GET …/threads/{thread_id}/emails` | `GET /v1/threads/{id}` | |
| `GET …/emails/{email_id}` | `GET /v1/messages/{id}` | `GET /v1/messages/{id}/raw` for MIME. |
| `PATCH …/threads/{thread_id}` (`read`, `folder`, `label_id`) | `PATCH /v1/threads` (`thread_ids`, `update`: `read`, `archived`, `spam`, `trashed`, `add_labels`, `remove_labels`) | Up to 100 threads at once. |
| `DELETE …/threads/{thread_id}` (to trash) | `PATCH /v1/threads` with `trashed: true` | `DELETE /v1/messages/{id}` deletes permanently. |
| `POST …/emails/{email_id}/reply` | `POST /v1/messages/{id}/reply` | Recipients are filled in from the original; `reply_all` for everyone. |
| `POST …/emails/{email_id}/forward` | `POST /v1/messages/{id}/forward` | |
| (send a new email) | `POST /v1/send` | |

## Drafts

| Resend | Botmail | Notes |
| --- | --- | --- |
| `POST /inboxes/{id}/drafts` | `POST /v1/drafts` | Botmail returns a `review_url` your human can open to send or discard. A reply draft (`reply_to_message_id`) fills in recipients and subject. |
| `GET /inboxes/{id}/drafts` | `GET /v1/drafts` | |
| `GET …/drafts/{draft_id}` | `GET /v1/drafts/{id}` | |
| `PATCH …/drafts/{draft_id}` | `PATCH /v1/drafts/{id}` | |
| `DELETE …/drafts/{draft_id}` | `DELETE /v1/drafts/{id}` | |
| `POST …/drafts/{draft_id}/send` | `POST /v1/drafts/{id}/send` | Both refuse a draft that was already sent (409). |

## Labels

| Resend | Botmail | Notes |
| --- | --- | --- |
| `POST /inboxes/{id}/labels` | `PATCH /v1/threads` with `add_labels` | Botmail creates a label the first time it's used. |
| `GET /inboxes/{id}/labels` | `GET /v1/labels` | With thread counts and colors. |
| `PATCH …/labels/{label_id}` (name, color) | `PATCH /v1/labels/{label}` (`name`, `color`) | |
| `DELETE …/labels/{label_id}` | `PATCH /v1/threads` with `remove_labels` | |

## Events

| Resend | Botmail |
| --- | --- |
| `inbox.email.received` webhook | Webhook `message.received`, or long-poll `GET /v1/events?after=<seq>&wait=30` |
| `inbox.email.sent` | `message.sent` and `message.status` (`delivered`, `bounced`, `held`, `blocked`) |
| `inbox.thread.labels.updated`, `inbox.thread.folder.updated` | `thread.updated` |

Botmail also has an [MCP server](https://botmail.pro/guides/email-mcp-server) with the same
operations as tools, and a [CLI](https://botmail.pro/cli) that can wait for a verification code.

## Not in Botmail

- **The hosted agent** (`GET`/`PATCH /inboxes/{id}/agent`: instructions, tone,
  enabled actions). On Botmail you bring your own agent and connect it over
  MCP, REST or the CLI.
- **Thread assignment** to teammates.
- **Custom domains.** Addresses are on `botmail.pro` for now.

Resend paths are from its [Inbox API reference](https://resend.com/docs/api-reference/inboxes/create-inbox)
as of October 2026; the beta API may change. Botmail's full API is in the
[OpenAPI spec](https://botmail.pro/v1/openapi.yaml).

## Questions

### What does the Resend Inbox API do?

It creates inboxes at addresses on your verified domain and manages their threads, emails, drafts, labels and a hosted agent's settings. It is in private beta as of October 2026.

### How do I create an inbox on Botmail instead?

An agent claims its own address with POST /v1/claim (or npx botmail claim <name>) and a human approves it with one click. A key with the manage scope can also create mailboxes with POST /v1/mailboxes.

### Does Botmail have a hosted agent like Resend's inbox agent?

No. On Botmail you connect your own agent over MCP, REST or the CLI.

---

Source: https://botmail.pro/guides/resend-inbox-api-to-botmail
Agent instructions: https://botmail.pro/skill.md
All guides: https://botmail.pro/llms.txt
