Two HITL modes
Approvals
The assistant pauses mid-conversation before executing a tool call or workflow action. A human operator reviews the pending action, then approves or denies it. The assistant automatically resumes with the decision and continues the conversation.
Handoffs
The assistant transfers the entire conversation to a human operator. The operator sends messages that are relayed directly to the end user. When the issue is resolved, the operator closes the handoff and the session ends gracefully.
Handling approvals
When a conversation reaches an action that requires sign-off, the assistant entersawaiting_approval status and waits — it will not proceed until a decision is recorded.
1
List pending approval requests
Poll this endpoint from your operator dashboard or webhook handler to surface requests that need attention.The response lists approval summaries including the
subject_ref, approver_role, and the suspend_message shown to the user.2
Fetch full approval detail
Retrieve the complete record for a specific approval — including the action payload the assistant wants to execute.ApprovalRequestDetail fields:
3
Submit your decision
Approve or deny the pending action. Include a Once the decision is submitted, the conversation automatically resumes. If approved, the assistant executes the action. If denied, the assistant receives the denial note and responds to the user accordingly.
note when denying so the assistant can explain the outcome to the user.Handling handoffs
When an assistant triggers a handoff, the conversation transitions towaiting_for_human status. The assistant is no longer generating responses — a human operator takes over completely.
1
List pending handoffs
2
Review the handoff context
Fetch the full handoff record to understand why the assistant escalated and what the customer’s situation is before you write your first message.The
packet field contains everything the assistant prepared for the handoff:3
Relay a message to the user
Send messages as the human operator. They appear in the customer’s conversation thread immediately.You can send as many messages as needed. The customer replies are visible by polling
GET /v1/conversations/{id}/messages.4
Resolve the handoff
When the issue is resolved, close the handoff. The conversation is marked
HANDOFF_RESOLVED and the session ends.Poll
GET /v1/conversations/{id}/messages?since_seq={n} to receive the end user’s replies in real time during an active handoff. Pass the sequence number of the last message you’ve read as since_seq to receive only new messages.Custom approval messages
While a conversation is paused waiting for approval, the end user sees a holding message. You can customize both the initial holding message and the follow-up patience message to match your brand voice.Configuring HITL in workflows
Approval and handoff behaviors are configured as nodes in your assistant’s workflow graph. Here’s how both node types look in a workflow definition:condition is a deterministic expression: when it evaluates to false the node is a pass-through and no approval is requested. When it’s true, the runtime suspends and emits an approval request. On resume, on_approve and on_deny each name the next node to route to for that decision — a timeout is recorded as a deny, so it follows the on_deny path.