Skip to content

Thread-aware console reply from an org inbox

POST
/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/reply
org_id
required
string
project_id
required
string
addr
required
string

The full inbox address, URL-encoded (e.g. agent7%40extrovertmail.com).

One of:

Thread-aware reply. Exactly one of thread_id / message_id selects the parent; recipients default from that parent. Optional to replaces the derived To group, including reply-all. Subject and threading headers remain derived server-side. The resulting message must contain at most 50 combined To/Cc/Bcc recipients and 1,800,000 encoded bytes including headers, bodies and attachments.

object
thread_id
required
string
message_id
string
to

Replace derived To recipients. Omit to retain defaults; an explicit empty list is invalid.

Array<string>
>= 1 items <= 50 items
text
string
html
string
cc
Array<string>
bcc
Array<string>
reply_to
string
headers
object
key
additional properties
string
reply_all

Include all original recipients (reply-all) when true.

boolean
expected_last_message_id

Optional additional head assertion, validated for both thread and message selectors. Does not replace expected_context_version. Default replies target the newest message.

string
expected_context_version

Context_version from the complete thread read used to compose this reply. Missing returns reply_context_required (422); changed returns reply_context_changed (409). Read the thread and reconsider the draft before retrying.

string
>= 1 characters
attachments
Array<object>
<= 20 items

An outbound attachment on send/reply/forward.

object
filename
string
content_type
string
content_base64
required

Standard base64-encoded attachment bytes. Up to 20 attachments share the 1,800,000-byte encoded email limit with headers and both bodies.

string
mode

Review Loop per-send assertion (see SendRequest.mode).

string
Allowed values: review direct
intent

The agent’s “for the human reviewer” summary. summary is REQUIRED when the resolved mode is review (else the submit is 422).

object
summary

Free-text intent summary (who/what/why).

string
meta

Structured intent payload.

object
goal
string
recipient
string
prior_touches
integer
urgency
string
category_id

Opaque category id (cat_…) matched from the registry.

string
category_confidence

Agent-supplied confidence (0..1) in the category match (see SendRequest.category_confidence). Feeds the min_confidence auto-send gate only; the server never scores.

number format: float
<= 1
composition_token

Opaque token from a fresh, unfiltered GET /v1/rules for this agent, project, and category.

string
idempotency_key

DEPRECATED body-level alias for the Idempotency-Key header (see SendRequest.idempotency_key). Send the header instead.

string

Accepted for delivery.

The outcome of a reply or forward.

object
submission_id
string
sent_message_id
string
nullable
sent_copy_status

Whether the accepted message has a resolvable saved Sent copy. Archive failure never resends mail.

string
Allowed values: pending stored unavailable
transport

Per-recipient counts by transport state. Absent states have count zero.

object
queued
integer
waiting_for_parent
integer
transmitting
integer
accepted
integer
failed
integer
dependency_failed
integer
unknown
integer
message_id
string
thread_id
string
review_id

Opaque review id (rr_…) for the review row that governed this send. ADDITIVE. Every agent-plane send now creates one, so an agent that crashes after issuing the request can still call GET /v1/reviews/{id} and read closed / sent_message_id instead of guessing whether the message went out.

string

Invalid request.

The canonical error envelope. error is a stable machine code.

object
error
required

Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).

string
Example
forbidden
message

Human-readable detail (never leaks internals).

string
Example
missing required scope
reason

Machine-readable quota reason. inbox_limit_exceeded means billing account inbox capacity across all organizations and projects sharing that account; enrollment_token_mailbox_budget_exhausted means the enrollment key lifetime creation allowance. Read message for recovery; inbox counts are separate from sending quotas.

string
used

Consumed plus reserved units.

integer format: int64
delta

Requested additional units.

integer format: int64
limit
integer format: int64
remaining
integer format: int64
consumed
integer format: int64
reserved
integer format: int64
next_reset_at

Next UTC usage-period boundary; pending reservations survive this boundary.

string format: date-time
upgrade_required
boolean

Missing or invalid credential.

The canonical error envelope. error is a stable machine code.

object
error
required

Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).

string
Example
forbidden
message

Human-readable detail (never leaks internals).

string
Example
missing required scope
reason

Machine-readable quota reason. inbox_limit_exceeded means billing account inbox capacity across all organizations and projects sharing that account; enrollment_token_mailbox_budget_exhausted means the enrollment key lifetime creation allowance. Read message for recovery; inbox counts are separate from sending quotas.

string
used

Consumed plus reserved units.

integer format: int64
delta

Requested additional units.

integer format: int64
limit
integer format: int64
remaining
integer format: int64
consumed
integer format: int64
reserved
integer format: int64
next_reset_at

Next UTC usage-period boundary; pending reservations survive this boundary.

string format: date-time
upgrade_required
boolean

Resource not found.

The canonical error envelope. error is a stable machine code.

object
error
required

Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).

string
Example
forbidden
message

Human-readable detail (never leaks internals).

string
Example
missing required scope
reason

Machine-readable quota reason. inbox_limit_exceeded means billing account inbox capacity across all organizations and projects sharing that account; enrollment_token_mailbox_budget_exhausted means the enrollment key lifetime creation allowance. Read message for recovery; inbox counts are separate from sending quotas.

string
used

Consumed plus reserved units.

integer format: int64
delta

Requested additional units.

integer format: int64
limit
integer format: int64
remaining
integer format: int64
consumed
integer format: int64
reserved
integer format: int64
next_reset_at

Next UTC usage-period boundary; pending reservations survive this boundary.

string format: date-time
upgrade_required
boolean