# Drafts

Messages that wait for a person to approve them.

## What a draft is

A draft is a message, InMail, or connection request with a note that is not sent until someone in the workspace approves it. It goes from one connected account to one lead, so it belongs to that conversation.

## Where drafts come from

- **The API or MCP.** Your automations can [create a draft](/docs/api-reference/create-draft) for a lead from a connected account. The text is sent exactly as written, so `{{variables}}` are not filled in.
- **Campaigns.** An AI message step can wait for approval. When it runs, its text becomes a draft and the lead's sequence waits until it is reviewed.

A conversation has one API draft waiting at a time: creating another discards the waiting one as `superseded`. A campaign draft waits alongside it.

## Reviewing

Members with access to the connected account review drafts in the inbox. The Drafts filter and the count next to Inbox in the sidebar show the conversations with one waiting. A reviewer can:

- **Approve** it, optionally editing the text first. It sends from the connected account.
- **Discard** an API draft so it never sends.
- **Stop enrollment** for a campaign draft, which discards it and stops the lead in that campaign.

Approving is only possible in the app, so a person always decides what is sent. If an approved API draft fails to send, it goes back to review with the error.

Before anyone reviews it, the API can [withdraw a draft](/docs/api-reference/withdraw-draft) it created.

## Status

A draft is `awaiting_review`, then `sending` once approved, and finally `sent`, `failed`, or `discarded`. A discarded draft has a `discardReason`: `rejected`, `superseded`, `withdrawn`, `enrollment_stopped`, `campaign_archived`, or `task_cancelled`.

## Events

Every draft records `draft_created`, `draft_approved`, `draft_discarded`, and `draft_failed` [events](/docs/webhooks#event-types). An approval records whether the reviewer edited the text and, if so, the original text. The sent message event carries the `draftId` and the member who approved it.
