POST
/v1/me/mail/draftsThe same message as a send, before it leaves. A draft may
be half a thought, so only address_id is required.
Keep the id that comes back and send it as draft_id on the next save, and on
the send. Without it every save writes a second draft and the writer leaves a
trail of copies behind them.
Request
curl -X POST https://api.proppertrading.com/v1/me/mail/drafts \
-H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 2c4e6a80-1b3d-4f5a-8c9e-0d1f2a3b4c5d" \
-d '{
"address_id": "mbx_w6sy3skvgydh5e3b",
"to": ["[email protected]"],
"subject": "Re: Payout request",
"body": "<p>Your payout is</p>",
"draft_id": "msg_q9w3k7x2n8m4t6vb"
}'
Same fields as Send a message, with the same string
ids. Only address_id is required, and to, subject and body may all be
empty.
Response
{
"data": {
"id": "msg_q9w3k7x2n8m4t6vb",
"object": "mail_message",
"thread_id": "thr_c4n8w2k7p5x9m3qd",
"address_id": "mbx_w6sy3skvgydh5e3b",
"folder": "drafts",
"subject": "Re: Payout request",
"to_recipients": [{ "email": "[email protected]", "name": null }],
"cc_recipients": [],
"message_at": "2026-08-19T18:04:08.000000Z"
},
"meta": { "request_id": "req_01kz4bkr1aj1gv63d8fv3133ey" }
}
Autosaving
Every save is a POST and needs its own Idempotency-Key. Generate a fresh one
per save: reusing one would replay the previous answer instead of storing what
has been typed since.
A draft is an ordinary message in the drafts folder, so it appears in
the list and can be
erased like anything else.
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | missing_idempotency_key | Every POST needs one |
| 400 | not_a_draft | draft_id points at a message that is not a draft |
| 403 | insufficient_scope | This device does not hold mail:write |
| 404 | resource_not_found | The mailbox or the draft is not one of yours |
| 422 | validation_failed | address_id missing, a field is malformed, or an id was sent as a number |