Skip to main content
POST
Send a message to a conversation route

Authorizations

x-api-key
string
header
required

Path Parameters

route_name
string
required

Body

application/json

The client-facing inbound body of the authed API door POST /api/conversations/{route_name}/messages.

external_user_id is the caller's handle for the end user: it becomes the client_address the answer is delivered against and the conversation's thread key. Frozen.

external_user_id
string
required
Minimum string length: 1
text
string
required
Minimum string length: 1
attachments
MediaItem · object[] | null

Structured media the caller sent WITH the text (image/document/video/audio) — the inbound counterpart of an outbound answer's media. Delivered to a tool target's payload under attachments only when present; the text stays the whole turn every reader consumes.

form
Form · object | null

A structured participant submission (an ask-less form's answers) riding WITH the text. text stays required and non-blank — it is the CARRIER every reader consumes: a channel submits a faithful text form of the submission alongside the structured data, so a form-unaware consumer still sees the whole turn, and the attachments/location siblings ride the same pattern. The platform attaches no meaning and NO TRUST to the contents: participant-shaped data, never schema-conformant — a target that reads it validates it itself.

locale
string | null

The end user's BCP 47 language tag (e.g. he-IL). Captured onto the turn's subject so the platform's rendering layer resolves every template and list format against it — the caller states the language, the flow never selects one. null means none supplied (no silent default).

location
LocationElement · object | null

A geographic point the caller shared WITH the text. Delivered to a tool target's payload under location only when present; the text stays the whole turn every reader consumes.

params
Params · object | null

Opaque caller-supplied entry parameters delivered to a tool target's payload under params; the platform attaches no meaning and no trust.

wait_seconds
integer | null

Bounded sync-wait window (seconds); absent = async 202. The door clamps to its runtime cap.

Required range: x >= 0

Response

Success.

data
ConversationTurnAck · object
required

The ack a message/event submission returns: the accepted turn's message_id and its thread_id. answer is present on every inline-waited turn that finished in time (a 200) — including a silent one, which carries the silent marker (status silent, no answer text, dumped exclude_none); it is absent only on the default deferred 202, whose turn produced no outcome yet.