curl --silent --show-error --fail-with-body --request POST \
--url 'https://api.example.com/api/admin/live-chat/{id}/notes' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"text": "Waiting for the carrier update before replying.",
"operatorName": "Alex",
"clientNoteId": "operator_note_20261020_001"
}'
{
"note": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"text": "Two-person tent, green — replacement for damaged pole set.",
"authorName": "string",
"timestamp": "2026-08-31T14:22:05Z"
},
"replayed": true
}
Save a private operator note
Does not require an active claim. At most 100 notes and 64,000 characters per thread. Identical ID/content/operator replays…
POST
/
api
/
admin
/
live-chat
/
{id}
/
notes
curl --silent --show-error --fail-with-body --request POST \
--url 'https://api.example.com/api/admin/live-chat/{id}/notes' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"text": "Waiting for the carrier update before replying.",
"operatorName": "Alex",
"clientNoteId": "operator_note_20261020_001"
}'
{
"note": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"text": "Two-person tent, green — replacement for damaged pole set.",
"authorName": "string",
"timestamp": "2026-08-31T14:22:05Z"
},
"replayed": true
}
Does not require an active claim. At most 100 notes and 64,000 characters per thread. Identical ID/content/operator replays; changed content returns note_id_conflict. Notes are excluded from customer messages and model context. Requires WIDGET_LIVE_CHAT_ENABLED=true, an admin bearer key and verified thread ownership. Responses use Cache-Control: no-store. Mutations share the customer/AI thread execution lease. Limited to 120 requests/minute per credential (shared with Redis when configured).
Path parameters
Request body
object
Nonblank operator display name; control characters are rejected. Minimum length:
1. Maximum length: 80.Stable ID for this intentional action. Reuse only with identical content when recovering delivery. Minimum length:
8. Maximum length: 128.Response
object
Status codes
| Code | Meaning |
|---|---|
200 | Persisted result |
400 | Invalid operator name, message or note |
401 | Missing or invalid admin key |
404 | Thread not found in the authenticated organization |
409 | Claim, content-ID, note-limit or thread lease conflict |
429 | Rate limit exceeded |
503 | Live chat disabled or persistence unavailable |
Using this contract
Read the source OpenAPI document for declared schemas and alternatives. This page also includes documented corrections from the spec overlays. Example IDs and values are illustrative; replace them with records from your workspace.curl --silent --show-error --fail-with-body --request POST \
--url 'https://api.example.com/api/admin/live-chat/{id}/notes' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"text": "Waiting for the carrier update before replying.",
"operatorName": "Alex",
"clientNoteId": "operator_note_20261020_001"
}'
{
"note": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"text": "Two-person tent, green — replacement for damaged pole set.",
"authorName": "string",
"timestamp": "2026-08-31T14:22:05Z"
},
"replayed": true
}
Last modified on November 13, 2026