Skip to content

Send a message from an org inbox

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

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

object
to
required
Array<string>
>= 1 items
subject
string
text

Plain-text body. This is the canonical name and matches ReplyRequest.text, ForwardRequest.text and Message.text.

string
body

DEPRECATED alias for text, kept accepted indefinitely so already-deployed callers keep working; it will never be removed. Send text in new code. Supplying BOTH with different content is a 400 (code bad_request, errors[].code conflicting_alias); the server never guesses which bytes to relay; supplying both with identical content is accepted.

string
html

Optional HTML body

string
cc
Array<string>
bcc
Array<string>
reply_to

Override the Reply-To header.

string
headers

Arbitrary custom headers (reserved/unsafe header names are dropped).

object
key
additional properties
string
in_reply_to

Message-ID to thread under (optional).

string
attachments
Array<object>

An outbound attachment on send/reply/forward.

object
filename
string
content_type
string
content_base64
required

Standard base64-encoded attachment bytes.

string
mode

Review Loop (HITL) per-send assertion. review (default) routes the message into the human-review queue; direct requests an immediate send. The authoritative account/inbox review policy may downgrade direct to review. Setting any of mode/intent/category_id opts the send into the Review Loop.

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. Never a name.

string
category_confidence

Agent-supplied confidence (0..1) in the category match. Feeds the submit-time min_confidence auto-send gate ONLY; the server never scores ($0 LLM). Below the effective threshold (or omitted when a threshold is set) the would-be auto-send routes to needs_review (gate_outcome held:low_confidence).

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, tolerated for @extrovert.dev/sdk <= 0.1.0 builds that serialize the whole request object. Send the header instead; when both are present the header wins. Note that the replay key is scoped to a hash of the RAW request body, so the same logical message retried once as body and once as text under one key is a body mismatch and answers 409 idempotency_conflict. Different bytes are a different request.

string

Accepted for delivery.

object
status
string
message_id

A stable identifier for the submitted message the sender can self-correlate on: the opaque msg_ id when the Sent append resolved, else the bracketed RFC5322 Message-ID header value. Present on the direct-send response; always non-empty when status is “sent”.

string
review_id

Opaque review id (rr_…) for the review row that governed this send. ADDITIVE; see SendResult.review_id.

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

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

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