Create a draft
https://anjal.app/v1/inboxes/{id}/draftslabels are applied to the message when the draft is sent. Set
sendAt to schedule the send: Anjal sends it at that time, no cron
needed.
Path parameters
idrequired string | Inbox UUID |
Request body
Content-Type: application/json
tostring | string[] | |
ccstring | string[] | |
bccstring | string[] | |
subjectstring | |
plainBodystring | |
htmlBodystring | |
replyToMessageIdstring | format: uuid |
labelsstring[] | string | Labels as an array or a comma-separated string. Stored lowercase and deduplicated; at most 32 labels of at most 64 characters, no commas. |
sendAtstring | Schedule the send: ISO 8601 with an offset, e.g. `2026-10-01T09:00:00-04:00`. Must be in the future and at most 90 days ahead. A scheduled draft needs at least one recipient and a body. On update, `null` cancels the schedule. Anjal checks for due drafts about every 20 seconds. If the send fails, the draft is kept, `sendError` is set, `sendAt` is cleared and `draft.send_failed` fires. format: date-time |
Responses
idstring | format: uuid |
inboxIdstring | format: uuid |
tostring[] | |
ccstring[] | |
bccstring[] | |
subjectstring | |
plainBodystring | |
htmlBodystring | |
replyToMessageIdstring | format: uuid |
labelsstring[] | Applied to the message when the draft is sent. |
sendAtstring | When Anjal will send this draft. Null if not scheduled. format: date-time |
sendErrorstring | Why the last scheduled send failed. The draft is kept and `sendAt` is cleared. |
createdAtstring | format: date-time |
updatedAtstring | format: date-time |
Authentication
Send your API key in the X-API-Key header (or Authorization: Bearer <key>). Any prefix accepted by this endpoint — tk_, wk_, ak_, or sa_ — is documented in the key prefix table.