Drafts

A draft is a message you have not sent. Use drafts for human review, or to schedule a send.

curl -X POST "$BASE_URL/v0/inboxes/$INBOX_ID/drafts" \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"to": "you@example.com", "subject": "Later", "text": "Scheduled.", "send_at": "2026-12-01T09:00:00Z"}'
FieldNotes
in_reply_toMessage id to reply to. Mutually exclusive with forward_of.
reply_allRequires in_reply_to; cannot be combined with to, cc or bcc.
send_atMust be in the future. Adds the scheduled label.
client_idIdempotency handle for creation.

Update with PATCH .../drafts/:draft_id; set a field to null to clear it, use add_attachments and remove_attachments for files. Send immediately with POST .../drafts/:draft_id/send, which returns { message_id, thread_id } and removes the draft.

A scheduled draft carries send_status: scheduled, sending or failed. If the inbox is paused when the time arrives, the draft fails and is not retried when the inbox resumes.

The dashboard creates, edits, sends and deletes drafts but has no field for send_at; scheduling is API, SDK and MCP only. After a draft is sent it no longer exists (GET answers 404).

GET /v0/drafts lists drafts across all inboxes.