/m2m/v1. Send Authorization: Bearer <key>. Tenant identity comes from the key.
Receive, read, reply, track
If your integration owns replies, enable manual mode before processing callbacks. Receiving a webhook does not pause Visito AI; otherwise both systems may reply.- Subscribe to
message.createdwithwebhooks:writeandconversations:read. - Process only
data.direction=inboundwhen automatically replying. Outbound replies also generate events. - Read
GET /conversations/{conversationId}/messageswithconversations:read; paginate to the suppliedmessageIdif necessary. Webhooks do not carry message text. - Reply through existing
POST /conversations/{conversationId}/reply, withconversations:writeand a stableIdempotency-Keyderived from the inbound event. - Use the returned
requestEventIdatGET /message-requests/{requestEventId}/statuswithmessages:read. Subscribe tomessage.delivery.updatedfor subsequent changes.
queued, sent, delivered, read, failed, blocked, partial_sent, and unknown. Individual message lookup uses GET /messages/{messageId}/status. Multi-message requests return individual messages; inspect these if the aggregate is unknown.
AI and human ownership
Pause AI with
{"manualEnabled":true}; resume with {"manualEnabled":false}. Policy also accepts statusAction (archive, unarchive, block, unblock), freezeForMinutes, and unfreeze. A freeze and unfreeze:true cannot be combined. Unresolved handoffs lock policy changes. Other channel and conversation gates still apply after resuming.
Assignment accepts {"operatorId":"operator_id"} or {"operatorId":null} to clear. The operator must belong to the same tenant. Resolving a handoff accepts optional resolutionNote and returns the conversation to AI mode; it does not resolve a separate pending reply obligation.
Normal replies target an existing conversation. To initiate WhatsApp outreach, use the existing approved-template send endpoint.