API reference
Sends
Follow a submitted message from checking to sent with GET /v0/sends/{send_id}, and cancel scheduled or pending sends.
docs.simail.ai/api/sends
Every send, reply, forward or draft send returns a send_id (out_…). It is the release service’s
record of that message.
Get a send
Section titled “Get a send”/v0/sends/{send_id}Permission message_read.
{ "send_id": "out_01JZX4C0D1E2F3G4H5J6K7M8N9", "inbox_id": "shop-helper@simail.email", "thread_id": "thr_01JZX4C0D1E2F3G4H5J6K7M8NB", "message_id": "msg_01JZX4C0D1E2F3G4H5J6K7M8NA", "status": "pending_approval", "reasons": [], "flags": ["first_contact"], "approval_id": "apr_01JZX4C0D1E2F3G4H5J6K7M8NG", "send_at": null, "created_at": "2026-10-18T17:05:40Z", "updated_at": "2026-10-18T17:05:40Z"}Status
Section titled “Status”status | Meaning | Final |
|---|---|---|
checking | being checked | |
scheduled | waiting for send_at | |
pending_approval | waiting for a human | |
approved | approved; waits for the final check | |
sending | leaving now | |
sent | handed to the mail network | yes |
blocked | refused; reasons says why | yes |
rejected | an approver rejected it | yes |
expired | nobody approved it in time, or it waited too long for a limit or a lock | yes |
cancelled | cancelled before sending | yes |
failed | the mail network refused it; submit again with a new key if you still mean to | yes |
outcome_unknown | it may or may not have gone out; never resent automatically, corrected when a delivery event arrives |
checking → blocked | pending_approval | scheduled | approvedpending_approval → approved | rejected | expired | cancelledscheduled | approved → sending → sent | failed | outcome_unknown | blockedscheduled | approved → cancelledWhile a message waits (platform pause, organization pause, thread lock, daily limit), it stays
scheduled or approved and a send.deferred event says why.
Cancel a send
Section titled “Cancel a send”/v0/sends/{send_id}Permission message_send. Cancels a send that is scheduled, pending_approval or approved.
Returns the send with status: "cancelled" and publishes send.cancelled. If it is already sending or
final, returns 409 conflict with reason: "already_sending" or "already_final".
Errors: 404 not_found (unknown or outside your scope), 409 conflict.
MCP: get_send_status.