Sending and scheduling both commit: something leaves, now or later. A draft is
the third thing, and the only one that puts a person back in the loop —
compose a reply, leave it in the Drafts folder, let somebody read it and press
send.
Required permission: Drafts → Read to list, Drafts → Write to create, edit
or delete.
Drafts written here appear in the dashboard. That is the point: a draft
nobody can see is just a string in a database. Whoever opens the web app finds
it in Drafts, opens it in the composer, edits it and sends it like any other.
These are organization drafts. A key never sees anybody’s personal drafts.Drafts written by a person in the web app belong to that person and are
invisible to every API key. Half-written mail is often the most sensitive thing
in an account, and a key leaked from a CI job should not expose what somebody
has not decided to send yet.The reverse is not symmetrical on purpose: drafts a key creates are visible
to your team in the dashboard, because a draft nobody can reach cannot be
reviewed.
List drafts
Takes no parameters — drafts belong to the organization, not to a mailbox.
Newest first, up to 200.
No bodies in the list — fetch one for its text.
Create a draft
201 Created, returning the draft including its id.
Every field is optional, including the recipients. A draft is unfinished by
definition — that is what makes it a draft. Refusing to save one because the
address is half-typed is how a drafts feature loses somebody’s work.Validation happens when the message is sent, not while it is being written.
Read one
The same fields as the list, plus text and html.
Replace one
Takes the same body as create.
This replaces the whole draft; it does not merge. A field you leave out is
cleared, not kept.A merging PATCH would need some way to say “clear the subject”, and the obvious
encoding — omit the field — is already how you say “leave it alone”. Send the
draft as you want it to be.
Delete one
Gone, along with its stored body. There is no Trash for drafts.
Sending a draft
There is no “send this draft” call. Read it, then
POST /v1/messages with its contents and a from, and delete
the draft once the send succeeds.
That is deliberate rather than missing. A draft has no sender — from is
chosen when the message goes, and a send endpoint that inherited it from a
draft would be a second, quieter way to decide which address your mail leaves
under.
Errors
See Errors for the full response shape.