# Agent Mail

> AgentMail through One

- Skill: `withoneai/agent-mail` (Agent Skill)
- Install (CLI): `npx skillmds@latest add withoneai/agent-mail`
- Raw SKILL.md: https://api.skillmd.com/api/skills/withoneai/agent-mail/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: withoneai (https://skillmd.com/u/withoneai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/withoneai/agent-mail

---


# AgentMail through One

Agent Mail enables developers to give AI agents unique, programmable email inboxes that can send, receive, and act on emails at scale—featuring API-first integration, custom domains, and built-in deliverability safeguards.

One exposes AgentMail through four MCP tools. The table below carries real action ids from One's knowledge base, so for a common operation you can skip search and go straight to reading the action's parameters.

## How to run an action

1. Find the action in the table below, or call `search_one_platform_actions` with platform `agent-mail` if it is not listed.
2. Call `get_one_action_knowledge` with the action id. Do this every time, including for actions in this table. The table gives you the id, not the parameters.
3. Call `execute_one_action` with parameters copied from that knowledge.

Never guess a parameter name, a body field, or an enum value. The knowledge has the real schema, and a guessed field is either a 400 or a silent write of the wrong thing.

## Before you start

Call `list_one_integrations` once and confirm AgentMail is connected. If it is missing, the user has not connected it: say so and point them at https://app.withone.ai rather than reaching for raw HTTP.

Each connection carries an `access` field. If it reports `{"policy": "methods", "methods": ["GET"]}` the agent is read-only here, so plan a read-only answer instead of attempting a write that will be refused.

## Before a write

Creates, updates, deletes and sends land on a real AgentMail account and cannot be recalled. State the action and the specific target in one line before the first write in a task, and let the user stop you. Reads need no confirmation.

## Actions

### Webhooks

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Webhook | GET | `/v0/webhooks/{{webhookId}}` | `conn_mod_def::GJz8Fx3wYKw::n7c1CqozSt69qvgGnYVccQ` |
| List Webhooks | GET | `/v0/webhooks` | `conn_mod_def::GJz8F9KfF8Q::M3GmKlCsSZ-6OJX1PiAttw` |
| Create a Webhook | POST | `/v0/webhooks` | `conn_mod_def::GJz8FhvKqbM::hiH5HyAtQF2U1uk_lsB7rA` |
| Delete a Webhook | DELETE | `/v0/webhooks/{{webhookId}}` | `conn_mod_def::GJz8Fp1T2wk::HHoSQM50RoiMVHmqeqmpnQ` |
| Domain Verified (Webhook Event) | POST | `/webhooks/domain-verified` | `conn_mod_def::GJz7-rTyssg::LvdrQxxPRdih0T9ZslxTsg` |
| Message Bounced (Webhook Event) | POST | `/webhooks/message-bounced` | `conn_mod_def::GJz7-zoKySI::4Tb8NY8TQiO3r8b-fb1lWQ` |
| Message Delivered (Webhook Event) | POST | `/webhooks/message-delivered` | `conn_mod_def::GJz7_EV3yVo::jFstAxZqRjqDHG4k6n9J8A` |
| Message Rejected (Webhook Event) | POST | `/webhooks/message-rejected` | `conn_mod_def::GJz7_TUsZv8::SWhZULAFQyGnfkhyvQ6rGw` |
| Message Sent (Webhook Event) | POST | `` | `conn_mod_def::GJz7_b9QkXQ::gd13n83eTRGvemrfj-fztw` |
| Update a Webhook | PATCH | `/v0/webhooks/{{webhookId}}` | `conn_mod_def::GJz8GEOcwik::HzjW8eN5Tf6xE21TG5qC8w` |

### Inboxes

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod’s Inbox | GET | `/v0/pods/{{podId}}/inboxes/{{inboxId}}` | `conn_mod_def::GJz8AMy2Xzk::-gAjib6xQUGQ41x0wmQM4A` |
| List a Pod’s Inboxes | GET | `/v0/pods/{{podId}}/inboxes` | `conn_mod_def::GJz8AbNip1A::ZE12FuSkR8CLJcSGatSobg` |
| List Inboxes | GET | `/v0/inboxes` | `conn_mod_def::GJz8AT-8xSU::2kNV465fS-24M_n9XoVA7w` |
| Query an Inbox’s Metrics | GET | `/v0/inboxes/{{inboxId}}/metrics` | `conn_mod_def::GJz8DBiQywY::-CtTh4TITT6P6dS4yr5zZg` |
| Create a Pod’s Inbox | POST | `/v0/pods/{{podId}}/inboxes` | `conn_mod_def::GJz7_sIIlgk::ylykS2SLSQ-g-n-pqUS4tw` |
| Create Inbox | POST | `/inboxes` | `conn_mod_def::GJz7_ivMY6E::Pw90sLtbQq-AZLv_bwuyPw` |
| Delete an Inbox | DELETE | `/v0/inboxes/{{inboxId}}` | `conn_mod_def::GJz7_y2tl_s::WN0PPTz6QJG5dlVxtILEkA` |
| Delete an Inbox in a Pod | DELETE | `/v0/pods/{{podId}}/inboxes/{{inboxId}}` | `conn_mod_def::GJz7_7ZyLnw::lEEu2i-OSP-ZougEX5WveA` |
| Update a Pod’s Inbox | PATCH | `/v0/pods/{{podId}}/inboxes/{{inboxId}}` | `conn_mod_def::GJz8AqSIiNc::RFyUwanAQBCnOBho7eL-fw` |
| Update an Inbox | PATCH | `/v0/inboxes/{{inboxId}}` | `conn_mod_def::GJz8Ahub3Uw::WAyoZjIcQ52psS3UEcMzgw` |

### Drafts

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Draft | GET | `/v0/drafts/{{draftId}}` | `conn_mod_def::GJz790qayzs::My3rYo4pR8S7cDz60XTdgA` |
| Get a Pod Draft | GET | `/v0/pods/{{podId}}/drafts/{{draftId}}` | `conn_mod_def::GJz797AAsqA::y7APVbLCSNqzhndN4cHvfA` |
| List a Pod’s Drafts | GET | `/v0/pods/{{podId}}/drafts` | `conn_mod_def::GJz7-TmXyII::ig-nd8tRQu6kFz_rKgkfnA` |
| List an Inbox’s Drafts | GET | `/v0/inboxes/{{inboxId}}/drafts` | `conn_mod_def::GJz7-DTmM-w::3NYLXLUpS12FkhSIP5Ditw` |
| List Drafts | GET | `/v0/drafts` | `conn_mod_def::GJz7-LMTQ_E::WOI4VWm_RbuuG9E1USWOLg` |
| Create a Draft in an Inbox | POST | `/v0/inboxes/{{inboxId}}/drafts` | `conn_mod_def::GJz79HUGpGQ::vBuQSh2kRA-gUKKcMX2JXA` |
| Delete an Inbox Draft | DELETE | `/v0/inboxes/{{inboxId}}/drafts/{{draftId}}` | `conn_mod_def::GJz79N9U648::kdRmKQFEQVyylq1WKTZXDA` |
| Send a Draft from an Inbox | POST | `/v0/inboxes/{{inboxId}}/drafts/{{draftId}}/send` | `conn_mod_def::GJz7-a-V7OI::AoE2KlqiREqMALPHKmENfw` |

### Domains

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Domain | GET | `/v0/domains/{{domainId}}` | `conn_mod_def::GJz775VRfZI::MJg0mRheQa-GdXqrpFrTRw` |
| Get a Domain's Zone File | GET | `/v0/domains/{{domainId}}/zone-file` | `conn_mod_def::GJz78HPdiV0::IO5kQ6W3QCeH-efdCCp-jg` |
| List Domains | GET | `/domains` | `conn_mod_def::GJz78W4IxeI::yXn9TDASSHyuUjsOuPo-Gg` |
| Create Domain | POST | `/domains` | `conn_mod_def::GJz77e5ng4I::ykM1fm0BSymdKx_EdP2HTA` |
| Delete a Domain | DELETE | `/v0/domains/{{domainId}}` | `conn_mod_def::GJz77sUn58c::n0m1wTf9T6K0VDzYBP0dvA` |
| Update a Domain | PATCH | `/v0/domains/{{domainId}}` | `conn_mod_def::GJz78p1ihJc::w6INtrDsT9aWW7A2m0xnnw` |
| Verify a Domain | POST | `/v0/domains/{{domainId}}/verify` | `conn_mod_def::GJz785ajzm0::lfZVYkPES1qVkLWxe0Q-vg` |

### Messages

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Message from an Inbox | GET | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}` | `conn_mod_def::GJz8CE8lDBY::IftjYoiMQDKOv4hERGmPww` |
| List an Inbox’s Messages | GET | `/v0/inboxes/{{inboxId}}/messages` | `conn_mod_def::GJz8CY-N4Dw::9MgcgZrxTViYsNG1wgVHcw` |
| Forward a Message from an Inbox | POST | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}/forward` | `conn_mod_def::GJz8B1hR-5M::lzVDSINrQFeWvQLniAxdkA` |
| Reply All to a Message in an Inbox | POST | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}/reply-all` | `conn_mod_def::GJz8CiZvJw4::ite_T4FITxaR0bmj8rWaBg` |
| Reply to a Message in an Inbox | POST | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}/reply` | `conn_mod_def::GJz8CpVmY3w::WDx9mHQuSeGzCiJPJLmJAQ` |
| Send a Message from an Inbox | POST | `/v0/inboxes/{{inboxId}}/messages/send` | `conn_mod_def::GJz8Cx1aM_M::yNe27ai6SuSWduFeY2jLzg` |
| Update an Inbox Message | PATCH | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}` | `conn_mod_def::GJz8C6MlBQc::AopK7rLhRtCi4UQyzoocjA` |

### Threads

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod’s Thread | GET | `/v0/pods/{{podId}}/threads/{{threadId}}` | `conn_mod_def::GJz8FBYZRLY::z9fm0iKYS6mAVe7Nd0J0ow` |
| Get a Thread | GET | `/v0/threads/{{threadId}}` | `conn_mod_def::GJz8E627IXc::IQgSgCP_Que6Qx3UIVEG3g` |
| Get an Inbox Thread | GET | `/v0/inboxes/{{inboxId}}/threads/{{threadId}}` | `conn_mod_def::GJz8EzzhCWY::Us8WwVAxSRuhjK02QQAxKg` |
| List a Pod’s Threads | GET | `/v0/pods/{{podId}}/threads` | `conn_mod_def::GJz8FbaMbdY::LYhzSPyxSzidI4Npm395tQ` |
| List an Inbox’s Threads | GET | `/v0/inboxes/{{inboxId}}/threads` | `conn_mod_def::GJz8FLcPNrM::nVnvo5x_TxuyOcMi1kr6TA` |
| List Threads | GET | `/threads` | `conn_mod_def::GJz8FTm0t5k::Ka-RUkPuQMq2r--9i7hj0Q` |
| Delete a Thread | DELETE | `/v0/threads/{{threadId}}` | `conn_mod_def::GJz8EMiMUEg::eLTdJ37ySsulfZiEo-2jow` |

### ApiKeys

| Action | Method | Path | Action id |
|---|---|---|---|
| List a Pod's API Keys | GET | `/v0/pods/{{podId}}/api-keys` | `conn_mod_def::GJz77YJJWzk::DtP3zvhTSX6eQvoLSc-O5w` |
| List API Keys | GET | `/v0/api-keys` | `conn_mod_def::GJz77Q2lrbo::89upfX1uS0OLFmRaO5Lmdw` |
| Create an API Key for a Pod | POST | `/v0/pods/{{podId}}/api-keys` | `conn_mod_def::GJz763LlpnE::QgywK9vfR7OzHM120SVkvQ` |
| Create API Key | POST | `/api-keys` | `conn_mod_def::GJz76wM3_2E::7EtaPayaRBOqWL1uPjfqJA` |
| Delete an API Key | DELETE | `/v0/api-keys/{{apiKey}}` | `conn_mod_def::GJz769pxBRc::S9AELphXT1e2qxXBLdo-xw` |

### PodDomains

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod Domain's Zone File | GET | `/v0/pods/{{podId}}/domains/{{domainId}}/zone-file` | `conn_mod_def::GJz78P0vw8k::OVjWj4UyQDiEVTMcR-wSJQ` |
| List a Pod’s Domains | GET | `/v0/pods/{{podId}}/domains` | `conn_mod_def::GJz78eVdxA0::7ohZ9JN7Sbem1PR0FbDlNQ` |
| Create a Pod Domain | POST | `/v0/pods/{{podId}}/domains` | `conn_mod_def::GJz77lye1fE::GFxgsk1rRlu-M0MXEXoWzQ` |
| Delete a Pod Domain | DELETE | `/v0/pods/{{podId}}/domains/{{domainId}}` | `conn_mod_def::GJz77zgQw5Q::6fD4eJzASBaWke4Q0JHC9Q` |
| Verify a Pod Domain | POST | `/v0/pods/{{podId}}/domains/{{domainId}}/verify` | `conn_mod_def::GJz79AP70Is::1Ibl97wwRRWFYeqmkqlu8Q` |

### Lists

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a List Entry | GET | `/v0/lists/{{direction}}/{{type}}/{{entry}}` | `conn_mod_def::GJz8BT3iQKM::lHzN_Gf9R32vqeSqc0SE0g` |
| List List Entries | GET | `/v0/lists/{{direction}}/{{type}}` | `conn_mod_def::GJz8Bky_m1s::5FliY0VJQVyTJsafTmmLRg` |
| Create a List Entry | POST | `/v0/lists/{{direction}}/{{type}}` | `conn_mod_def::GJz8AwnA06o::FB_1dDXNS2ycElthYFtzOg` |
| Delete a List Entry | DELETE | `/v0/lists/{{direction}}/{{type}}/{{entry}}` | `conn_mod_def::GJz8BEHjQg0::mwPeG0MvT7yQVRCPhObpTw` |

### Pods

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod | GET | `/v0/pods/{{podId}}` | `conn_mod_def::GJz8DzqeZvU::5Z425prMSoeIu8HZZaTpjQ` |
| List Pods | GET | `/pods` | `conn_mod_def::GJz8D83qaVY::u_Ec4rt8R52EOvmrzUzh1Q` |
| Create a Pod | POST | `/v0/pods` | `conn_mod_def::GJz8DjxjvgE::bSo7zufaTfuiqg3zJMfo9Q` |
| Delete a Pod | DELETE | `/v0/pods/{{podId}}` | `conn_mod_def::GJz8DthZYwo::SmjSar8VS8GwXwXRl09QXQ` |

### DraftAttachments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Draft Attachment | GET | `/v0/drafts/{{draftId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz79dsTYuo::q_NVqmxeR36qQKfVNju9ow` |
| Get a Draft Attachment | GET | `/v0/pods/{{podId}}/drafts/{{draftId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz79klXTuo::neN-dF9XRkCVp0vXK5dECA` |
| Get a Draft Attachment (Metadata + Download URL) | GET | `/v0/inboxes/{{inboxId}}/drafts/{{draftId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz79Ww5R5I::RyMFbDzhQPGBwh4E9jQhPg` |

### PodListEntries

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod List Entry | GET | `/v0/pods/{{podId}}/lists/{{direction}}/{{type}}/{{entry}}` | `conn_mod_def::GJz8BafhCo0::zZpQ7338Ts-RQL5k5HD_xA` |
| List a Pod’s List Entries | GET | `/v0/pods/{{podId}}/lists/{{direction}}/{{type}}` | `conn_mod_def::GJz8Bs-Cwig::B2zu-MQFSbKcW_bcloF__Q` |
| Delete a Pod List Entry | DELETE | `/v0/pods/{{podId}}/lists/{{direction}}/{{type}}/{{entry}}` | `conn_mod_def::GJz8BLlHEgM::GUWKsUKzR-GJv1ajmxbq6w` |

### PodsDomains

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Pod’s Domain | GET | `/v0/pods/{{podId}}/domains/{{domainId}}` | `conn_mod_def::GJz78BCOxUU::KJQ-S3hVTXyQvaqUqkCL7w` |
| Update a Pod’s Domain | PATCH | `/v0/pods/{{podId}}/domains/{{domainId}}` | `conn_mod_def::GJz78ykbnyQ::SowSqh38T_W_hYWJbR9Low` |

### InboxDrafts

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Inbox Draft | GET | `/v0/inboxes/{{inboxId}}/drafts/{{draftId}}` | `conn_mod_def::GJz79s0JMBM::jaZjN1wIRNuLX9Vd4b7q0Q` |
| Update an Inbox Draft | PATCH | `/v0/inboxes/{{inboxId}}/drafts/{{draftId}}` | `conn_mod_def::GJz7-jRbWok::yBmK1vetQd2udRi90vmeYQ` |

### ThreadAttachments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Thread Attachment | GET | `/v0/threads/{{threadId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz8Ei8BXu4::7x-JfCeKSeGvOZwJAeb4vw` |
| Get a Thread Attachment (Download URL) | GET | `/v0/pods/{{podId}}/threads/{{threadId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz8EqwF_tU::UzSv5puOTx6pF-FcDBC9qA` |

### PodApiKeys

| Action | Method | Path | Action id |
|---|---|---|---|
| Delete a Pod’s API Key | DELETE | `/v0/pods/{{podId}}/api-keys/{{apiKey}}` | `conn_mod_def::GJz77H3nU-w::hWCgZR5dSq2J7EXSwbFe5w` |

### MessageComplained

| Action | Method | Path | Action id |
|---|---|---|---|
| Message Complained (Webhook Event) | POST | `/message-complained` | `conn_mod_def::GJz7-8zJzxQ::ttyWQCvASY2GVlaI93kIPA` |

### MessageReceivedEvents

| Action | Method | Path | Action id |
|---|---|---|---|
| Message Received (Webhook Event) | POST | `{{webhookPath}}` | `conn_mod_def::GJz7_LuBD1E::Dyp634ZcRMmkrPSdRO2Fsg` |

### InboxMessageAttachments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Inbox Message Attachment | GET | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz8B8MYxqI::0v7EozQhQZemFpgnIHcMrg` |

### InboxMessages

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Inbox Message’s Raw Content Download URL | GET | `/v0/inboxes/{{inboxId}}/messages/{{messageId}}/raw` | `conn_mod_def::GJz8CONXf0k::MRpLMxmhSzOHWojyxJ1gcg` |

### PodMetrics

| Action | Method | Path | Action id |
|---|---|---|---|
| Query a Pod’s Metrics | GET | `/v0/pods/{{podId}}/metrics` | `conn_mod_def::GJz8DTLL5Bw::tmtwg-hySPeddO9P2Eoq3w` |

### Organizations

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Current Organization | GET | `/v0/organizations` | `conn_mod_def::GJz8Dbg0NpA::H8Ku9RATSJCk3YiiOk-iTQ` |

### InboxThreads

| Action | Method | Path | Action id |
|---|---|---|---|
| Delete an Inbox Thread | DELETE | `/v0/inboxes/{{inboxId}}/threads/{{threadId}}` | `conn_mod_def::GJz8ED_2IhE::gGx4eGFGShC-x2bG30n1xg` |

### PodThreads

| Action | Method | Path | Action id |
|---|---|---|---|
| Delete a Pod Thread | DELETE | `/v0/pods/{{podId}}/threads/{{threadId}}` | `conn_mod_def::GJz8ETj6sPc::qa168OPbTn6UKamuKhN6YA` |

### Attachments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Attachment for a Thread in an Inbox | GET | `/v0/inboxes/{{inboxId}}/threads/{{threadId}}/attachments/{{attachmentId}}` | `conn_mod_def::GJz8EauMc-M::6gPzKk6zSNStI26RFdt7Dw` |

### WebSocketEventStream

| Action | Method | Path | Action id |
|---|---|---|---|
| Connect to WebSocket Event Stream | GET | `/v0` | `conn_mod_def::GJz8GM_TKhY::sRD9nCCyQaGcYfrOFhhA5A` |

This lists 90 of 91 actions. For anything not here, call `search_one_platform_actions` with platform `agent-mail`. The full catalog is at https://www.withone.ai/knowledge/agent-mail.

## When a call fails

The error comes from AgentMail, not from One. A 400 or 422 means your parameters do not match the schema, so re-read the knowledge and fix the field. A 401 or 403 means the connection needs re-authorizing, which no retry will fix. A 404 means the id is not on this account. A 429 means slow down. Never retry a write more than once: the first attempt may have landed.

Full catalog: https://www.withone.ai/knowledge/agent-mail

Integration knowledge by One (withone.ai), licensed under [One-Knowledge-1.0](https://www.withone.ai/licenses/knowledge). Attribution must be preserved in derivative works.

