Send a user message — trigger a new flow or resume a waiting one
Body shape decides the call:
- Trigger (
text+intentName, nowaitToken): starts a new execution of the chosen intent. TheintentNamemust be one of the intents listed in the session’sintentsarray. - Resume (
waitToken+executionIdpresent): submitsvaluesagainst the schema the previous reply advertised inexpectedInput.
The response is always a Reply envelope — same shape either way.
Authorizations
Token issued by POST /api/public/v1/chat/sessions. Lifetime 1h.
Body
- Option 1
- Option 2
New execution. The user's free-text message becomes part of the flow context.
User's verbatim message.
1 - 4000Which intent to trigger. Must be one of the names returned in the session's intents array.
Free-form key/value bag merged into the execution context (page URL, referrer, A/B variant, …). Avoid PII.
Optional conversation variables merged into the conversation row and
surfaced to the flow as untrusted input. Constraints (rejected with a
422 validation_failed on the chat surface, 422 invalid_input on the
Engine API):
- at most 50 keys;
- at most 4096 bytes total when JSON-encoded;
- keys are snake_case matching
^[a-z][a-z0-9_]{0,63}$; - values are scalar, null, or arrays nested at most 4 levels deep (plain objects/maps as values are rejected).
{
"cart_total": 129,
"page_path": "/pricing",
"tags": ["returning", "vip"]
}Client-reported LLM token usage for the reply this message turn produces,
when that reply was generated by the integrator's own model. The server
prices the counts from the tenant's model price table and attaches the
result to the turn's agent message; the priced tokenUsage is echoed on
the reply.
Response
Flow processed the message