Skip to main content
POST
Approve and send a draft

Authorizations

X-API-Key
string
header
required

Path Parameters

draft_id
string<uuid>
required

Body

application/json

What the person's composer shows under the draft's words when they approve it.

signature_block
string | null

The divider and signature exactly as the composer shows them under the draft's words, empty when the person removed them. Sent under the words in place of the mailbox's own signature, so the email is what they saw. Null signs as the mailbox does.

Maximum string length: 4000

Response

Successful Response

body_text
string
required
confidence
enum<string> | null
required

How sure the model is. Shown on the card; no band sends without a person.

Available options:
high,
medium,
low
confidence_reason
string | null
required
generated_body_text
string
required
id
string<uuid>
required
source
enum<string>
required
Available options:
auto_drafted,
on_demand
status
enum<string>
required

Where this reply stands. pending_approval: waiting for a person to approve, edit or discard it. scheduled: the agent will send it on its own at send_after unless a person discards or edits it first. sending: it is leaving now and can no longer be changed. send_unknown: it was sent, but the mailbox has not confirmed it yet; it settles on its own as sent or send_failed. send_failed: it did not go; write a fresh reply. sent: it went out. discarded: a person rejected it or asked for a new version. stale: the contact wrote again before anyone answered it.

Available options:
pending_approval,
sent,
discarded,
stale,
scheduled,
sending,
send_unknown,
send_failed
steer_text
string | null
required
subject
string | null
required
thread_id
string<uuid>
required
ask_reason
enum<string> | null

Why this reply is waiting for a person instead of going out on its own, for example low_confidence, always_ask, unverified_sender, different_sender or daily_cap. Null when nothing held it back, and on a reply a person asked for.

Available options:
low_confidence,
findings,
insufficient_data,
policy,
always_ask,
sequence_manual,
step_requires_approval,
daily_cap,
unverified_sender,
suppressed,
different_sender,
label,
question,
consecutive_cap,
thread_cap,
hourly_cap,
org_daily_cap,
stale_inbound,
sequence_gone,
bot_question,
automated_counterparty,
kill_switch,
authentication,
language,
linkedin_only,
send_interrupted,
sender_switched_to_manual
confidence_score
integer | null

The model's 0-100 calibration, clamped into the categorical band. Null for drafts that predate the field. Presentation only: every decision reads the categorical confidence.

outbound_message_id
string<uuid> | null

The agent's message this reply came from, when a sequence's agent wrote it. Edits, ratings and the send are recorded against that message too, which is how the agent learns from them. Null on a reply written in the default voice for a conversation outside any sequence.

rating
enum<string> | null

The human verdict on this draft, when one was given.

Available options:
good,
bad
send_after
string<date-time> | null

When a scheduled reply goes out on its own, unless a person discards or edits it first. Kept once the reply is sending or sent. Null on a reply that was never scheduled, and on one taken off the schedule, by a person editing it or by a check that held it back for a person (see ask_reason).

sent_by_kind
enum<string> | null

Who sent the reply: person when someone approved it, system when the agent sent it on its own. Null until it is sent.

Available options:
person,
system