Skip to main content
POST
Deliver a structured event to a conversation thread as a turn

Authorizations

x-api-key
string
header
required

Path Parameters

route_name
string
required

Body

application/json

The inbound body of the event door POST /api/conversations/{route_name}/events.

An :class:ConversationEvent addressed to an EXISTING thread by EXACTLY ONE (non-blank) of address (the thread's client address) or thread_id (the id the monitoring listing exposes). wait_seconds bounds a sync-wait window exactly as :attr:ConversationMessage.wait_seconds. There is NO callback field — an event's answer is delivered against the target thread's route. Frozen.

event
ConversationEvent · object
required

A structured event delivered to an existing thread as a turn.

event_id (non-blank after trim, ≤ EVENT_ID_MAX_CHARS) is the idempotency key; kind is an identifier-like label matching EVENT_KIND_RE; payload is opaque, untrusted data bounded as pure transport by :func:validate_bounded_object. Frozen.

address
string | null
thread_id
string | null
wait_seconds
integer
default:0

Bounded sync-wait window (seconds); 0 = 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.