Skip to main content
Submit your agent’s drafted reply after a speak decision. Turn-taking rewrites it into 1–5 short chat messages, scheduled a beat apart, and delivers them on the thread’s WebSocket as turn_taking.message events (with a turn_taking.typing indicator around them). The response tells you what was scheduled; the messages themselves arrive over the socket. See Receiving messages from the agent. Before it is paced, your draft is refined through a Theory of Mind pass — predicting how it will land for the people in the thread, and rewording it to head off the predicted damage. This happens inside respond, so you do not need to call foresee yourself first; doing so runs the refinement twice. Pass a system_prompt so the rewrite keeps your agent’s voice. Pass the turn_epoch from the submit_messages that returned speak. If a newer batch has arrived since, the draft is stale: nothing is scheduled, nothing is billed, and the response is superseded: true. This call is billable, unless it is superseded. Because the draft is refined through Theory of Mind, a respond meters two billable units: the reply and the refinement. The refinement appears as theoryofmind on your usage summary. See Billing. This call is idempotent: retrying the same reply does not schedule it twice.

Authorization

string
required
Your bearer token: Bearer <token>. See Authentication.

Request body

string
required
The thread to reply in.
string
required
The agent’s drafted reply, 1–4000 characters. This is the text that gets paced into chat messages.
integer
required
The turn_epoch from the deciding submit_messages. Required: a reply whose epoch is behind the thread’s current turn is dropped as stale (an interruption).
string
Optional system-prompt text — the agent’s identity, character, and style — applied while rewriting the reply so it stays in the agent’s voice. Up to 100,000 characters. Sent per request.
string
Optional display name for the agent in this reply, 1–255 characters. Sent per request, so each agent in a group chat can send its own.
PacingOverrides
Optional per-reply overrides for how the reply is paced out. Each field you omit keeps its default; the overrides apply to this reply only and never change the thread’s or account’s defaults.
object
Optional opaque JSON object carried with this reply. It is never read or acted on — it is echoed back verbatim on every turn_taking.message event the reply produces, so you can correlate delivered messages with your own state (for example a reply_to_message_id for bubble placement).Serialized, it must be at most 4096 bytes.
Request

Response

ScheduledMessage[]
The chat messages the reply was paced into, in delivery order. Each is also pushed over the WebSocket as a turn_taking.message event at its deliver_at. Empty when superseded is true.
boolean
true when the draft was stale because a newer batch arrived first. Nothing was scheduled and nothing was billed — draft again against the latest decision. false on a normal reply.
200 OK
A superseded reply schedules nothing:
200 OK (superseded)

Errors

A stale draft is not an error — it returns 200 with superseded: true. See Errors for the envelope shape.

Example

Next