# Let your agent draft, approve and send yourself

> Give your agent a Pidgeon key that reads and drafts but can never send, then review and send each reply yourself from the dashboard or Apple Mail.

Your agent reads the mail and writes the replies. You read each reply and
send it. The agent holds a key that **can never send**, so nothing reaches a
customer that you did not see first — however the agent is prompted, and
whatever a stranger's email tells it to do.

## 1. Give the agent a read-and-draft key

In the dashboard, **API keys → New key**, choose the address, and
under **What it can do** choose **Read and draft**. Or from a key you already
hold:

```bash
curl https://pidgeon.ai/api/v1/api-keys \
-H "Authorization: Bearer $PIDGEON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "name": "Support agent",
  "identity_ids": ["0c939bd7-2d69-4150-a2ac-de994f0e4887"],
  "access": "draft"
}'
```

```ts
const { data: key } = await keysCreate({
body: {
  name: 'Support agent',
  identity_ids: ['0c939bd7-2d69-4150-a2ac-de994f0e4887'],
  access: 'draft',
},
throwOnError: true,
});
```

```python
httpx.post(
  "https://pidgeon.ai/api/v1/api-keys",
  headers={"Authorization": f"Bearer {os.environ['PIDGEON_API_KEY']}"},
  json={"name": "Support agent", "identity_ids": [identity_id], "access": "draft"},
)
```

Connecting over MCP by signing in? Choose **Read and draft** on the consent
screen. The agent keeps everything it needs to run the inbox: reading,
searching, labels, archive, trash, and handing a conversation to you. Sending,
replying, forwarding, scheduling and calendar invitations all answer `403`,
with a message that tells the agent to write a draft instead.

## 2. The agent writes drafts

Over MCP the tool is `create_draft`. Over the API it is `POST /v1/drafts`. To
answer a message, pass its id as `in_reply_to` and its sender as `to`, and the
draft is sent as a reply in the same conversation:

```sh
curl https://pidgeon.ai/api/v1/drafts \
-H "Authorization: Bearer $PIDGEON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "identity_id": "0c939bd7-2d69-4150-a2ac-de994f0e4887",
  "in_reply_to": "48532ec7-db7a-4437-ada6-c55132a3d735",
  "to": "priya@example.com",
  "text": "Reissued, thank you."
}'
```

The agent can change or delete its drafts until you send them.

## 3. You read it and send it

**In the dashboard.** Open the conversation: under the last message a card
says the agent wrote a reply, with its first lines. Press **Review and send**
and it opens ready to go — recipients, subject and text, all editable, with the
message it answers folded underneath. Change what you want and press **Send**.
Every draft is also under **Drafts**. On a phone it is the same two taps.

Sent from the dashboard, the reply is still the agent's: the conversation
stays with it, and its next message is answered by it, not you. Signing off a
draft is not taking over.

**In Apple Mail, or any mail app.** Add the address over IMAP with an
[app password](https://pidgeon.ai/docs/mail-clients.md) you make for yourself in the dashboard.
The agent's drafts are in the **Drafts** mailbox. Open one, edit it, press
Send.

Sent from a mail app, the reply is yours: the conversation moves to you, the
same as any reply you write yourself, and the agent sees a
[hand-off](https://pidgeon.ai/docs/handover.md). To give it back, set the thread's owner to
`agent`.

## What the key cannot do

- Send, reply, reply all or forward.
- Send or schedule a draft, or change a draft you have scheduled.
- Invite people to a calendar event, or answer an invitation.
- Make an app password, which is the only credential SMTP accepts.
- Create a key that can do more than it can.

Each of those answers `403`. The full list of access levels is in
[Authentication](https://pidgeon.ai/docs/authentication.md#what-a-key-can-do).
