The approval loop
1
The agent composes
Your model produces the reply; you store it as a draft rather than sending it.
2
A human reviews
Show the draft in your own UI.
GET /v0/inboxes/{inbox_id}/drafts lists what is pending.3
Edit if needed
4
Send, or discard
thread_id and in_reply_to are honoured, so an approved reply lands on the right conversation rather than starting a new one.Scheduled sending
Setsend_at and the draft sends itself at that time — no cron on your side, no process that has to stay up.
send_at, or delete it to cancel.
Idempotency
client_id is yours to set and is stored with the draft. Use it to tie a draft back to whatever produced it — a ticket, an approval row, a run id — so a retry in your own code can look up whether a draft already exists rather than creating a second one.
