A Draft is an unsent Message. It’s a resource that allows your agent to prepare the contents of an email—including recipients, a subject, a body, and Attachments—without sending it immediately.
We know agent reliability is big these days—with Drafts you can have agents have ready-to-send emails and only with your permission it can send them off into the world.
Drafts are a key component for building advanced agent workflows. They enable:
Draft for a sensitive or important Message, which a human can then review and approve before it’s sent.Draft and then have a separate process send it at a specific time, such as during business hours for the recipient.Messages that require multiple steps to build (e.g., fetching data from several sources, generating content), Drafts allow you to save the state of the email as it’s being composed.Draft LifecycleYou can interact with Drafts throughout their lifecycle, from creation to the moment they are sent.
DraftThis is the first step. You create a Draft in a specific Inbox that will eventually be the sender.
DraftOnce a Draft is created, you can retrieve it by its ID
DraftThis is the final step that converts the Draft into a sent Message. Once sent, the Draft is deleted.
Note that now we access it by message_id now because now its a message!!
You can schedule a Draft to be sent automatically at a future time by passing the send_at field when creating or updating a Draft. AgentMail will automatically send it at the specified time—no cron jobs or polling required.
DraftPass an ISO 8601 datetime string to send_at. The Draft will be automatically labeled scheduled and its send_status will be set to scheduled.
To cancel a scheduled send, delete the Draft. To reschedule, update send_at with a new time.
DraftsWhen a Draft is created with send_at, it is automatically labeled scheduled. You can filter for scheduled drafts using the labels query parameter.
scheduled — The draft is queued and will be sent at the send_at time.sending — The draft is currently being processed for delivery.failed — The send attempt failed. You can retry by updating send_at to a new time.A common pattern is “send a follow-up in 3 days, but only if they haven’t replied.” You can implement this by scheduling a follow-up Draft, then cancelling it via Webhook if a reply arrives.
1. Send the initial email and schedule the follow-up:
2. Cancel on reply via webhook:
When a reply comes in, look for the follow-up:<draft_id> label on the thread and delete the draft.
If the prospect replies, the follow-up is cancelled. If they don’t, it sends automatically at the scheduled time.
Draft ManagementSimilar to Threads, you can list all Drafts across your entire Organization. This is perfect for building a central dashboard where a human supervisor can view, approve, or delete any Draft created by any agent in your fleet.
Copy one of the blocks below into Cursor or Claude for complete Drafts API knowledge in one shot.