Vexar API

Operators / Live Chat

Endpoints that power the live-chat operator panel: take over a conversation from the AI, message visitors, manage status, transfer and block. All require authentication, except the SSE stream which authenticates via a token query parameter.

Messaging & lifecycle

POST /api/v1/operator/message Auth

Send an operator message to a conversation.

Request body
{ "conversation_id": 50, "content": "Hi, this is Alex.", "image_url": "" }
Response
{ "success": true }
POST /api/v1/operator/accept/{id} Auth

Accept (take over) a conversation — switches mode to operator.

Response
{ "success": true }
POST /api/v1/operator/close/{id} Auth

Close a conversation.

Response
{ "success": true }
POST /api/v1/operator/transfer/{id} Auth

Transfer a conversation to another operator.

Request body
{ "operator_id": 7 }
Response
{ "success": true }
POST /api/v1/operator/typing Auth

Send a typing indicator.

Request body
{ "conversation_id": 50 }
Response
{ "success": true }
POST /api/v1/operator/note Auth

Add a private note to a conversation.

Request body
{ "conversation_id": 50, "content": "VIP customer" }
Response
{ "success": true }
POST /api/v1/operator/proactive-message Auth

Send a proactive message to an online visitor.

Request body
{ "site_id": 1, "session_id": "sess_…", "content": "Need help?" }
Response
{ "success": true }
POST /api/v1/operator/upload-image Auth

Upload an image to send to a visitor (multipart).

Response
{ "success": true, "url": "https://cdn…" }

Status & realtime

GET /api/v1/operator/stream Public

SSE stream of live events. Authenticated via ?token=JWT (EventSource cannot send headers).

Response
(text/event-stream)
POST /api/v1/operator/heartbeat Auth

Keep the operator marked online (send every ~30s).

Request body
{ "site_ids": [1, 2] }
Response
{ "success": true }
GET /api/v1/operator/status Auth

Get the operator’s online status.

Response
{ "success": true, "online": true }
POST /api/v1/operator/set-status Auth

Set online/offline for a site.

Request body
{ "site_id": 1, "online": true }
Response
{ "success": true }
POST /api/v1/operator/fcm-token Auth

Register a push (FCM) token.

Request body
{ "token": "…" }
Response
{ "success": true }
DELETE /api/v1/operator/fcm-token Auth

Remove a push token.

Response
{ "success": true }

Chats & visitors

GET /api/v1/operator/active-chats Auth

Active chats for the current site.

Response
{ "success": true, "chats": [ … ] }
GET /api/v1/operator/all-active-chats Auth

Active chats across all sites.

Response
{ "success": true, "chats": [ … ], "current_user_id": 3 }
GET /api/v1/operator/all-chat-counts Auth

Pending/active counts.

Response
{ "success": true, "pending": 2, "active": 5 }
GET /api/v1/operator/online-visitors Auth

Online visitors on a site.

Response
{ "success": true, "visitors": [ … ] }
GET /api/v1/operator/all-online-visitors Auth

Online visitors across all sites.

Response
{ "success": true, "visitors": [ … ] }
GET /api/v1/operator/operators Auth

List operators (for transfers).

Response
{ "success": true, "operators": [ … ] }
GET /api/v1/operator/blocked Auth

List blocked visitors.

Response
{ "success": true, "visitors": [ … ] }
GET /api/v1/operator/conversation/{id} Auth

Get conversation details.

Response
{ "success": true, "conversation": { … } }
PUT /api/v1/operator/conversation/{id}/visitor Auth

Update a visitor’s custom data (name/email/phone/info).

Request body
{ "name": "Jane", "email": "[email protected]" }
Response
{ "success": true }
POST /api/v1/operator/conversation/{id}/block Auth

Block/unblock a visitor. block_type: both | ai | operator.

Request body
{ "blocked": true, "block_type": "both" }
Response
{ "success": true }

Translation

POST /api/v1/operator/translation/toggle Auth

Enable/disable live translation for a conversation.

Request body
{ "conversation_id": 50, "enabled": true }
Response
{ "success": true }
POST /api/v1/operator/translation/set-lang Auth

Set the visitor’s language for translation.

Request body
{ "conversation_id": 50, "lang": "de" }
Response
{ "success": true }