Chatters
These endpoints manage chatters. A chatter is a person who chats with your agents but never sees the dashboard, such as a customer or a member of your community. A chatter can only use the agents you grant them. Teams & roles explains chatters and teammates.
For example, when someone buys a course on your site, your backend can create a chatter for them, grant them the course's tutor agent, and send them a sign-in link. When their access ends, your backend revokes the agent or switches the account off.
Read the overview first for the base URL, keys, errors and paging.
Who can call these endpoints: the owner, or a teammate with Chatters.
The chatter object
{
"id": "0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c",
"name": "Jane Doe",
"email": "[email protected]",
"deactivated": false,
"messages_limit": 200,
"created_at": "2026-10-25T11:00:00+00:00"
}| Field | Type | Meaning |
|---|---|---|
id |
string | The chatter's id. |
name |
string | The chatter's name. |
email |
string or null | The email they sign in with. |
deactivated |
boolean | true when the account is switched off. A deactivated chatter can't sign in or send messages. |
messages_limit |
integer or null | How many messages the chatter may send a month. null means no limit of their own. See Message limits. |
created_at |
string | When the chatter was created. |
List chatters
Returns your workspace's chatters, newest first.
GET /api/v1/chatterscurl https://chat.example.com/api/v1/chatters \
-H "Authorization: Bearer $CHATVIA_API_KEY"The answer is { "data": [chatter, …], "next_cursor": … }. See Pagination.
Create a chatter
Creates a chatter account with access to one or more agents.
POST /api/v1/chatters| Body field | Type | Required | Notes |
|---|---|---|---|
name |
string | yes | Up to 255 characters. |
email |
string | yes | Their sign-in email. Each email can be used once among your chatters. Case doesn't matter. |
password |
string | yes | 8 to 255 characters. They can sign in to the Hosted Chat with it. |
agent_ids |
array of strings | yes | The ids of the agents they may use. At least one. Every id must be one of your agents. |
curl https://chat.example.com/api/v1/chatters \
-H "Authorization: Bearer $CHATVIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Doe",
"email": "[email protected]",
"password": "a-long-random-password",
"agent_ids": ["a3f9c2e17b4d08"]
}'{
"data": {
"id": "0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c",
"name": "Jane Doe",
"email": "[email protected]",
"created_at": "2026-10-25T11:00:00+00:00"
}
}The answer is 201 Created. It is shorter than the chatter object: it holds only id, name, email and created_at. Keep the id to make sign-in links.
An email your workspace already has is a 422. A chatter's email is only checked against your own chatters, so the same email can exist in another workspace.
Get a chatter
GET /api/v1/chatters/{chatter}curl https://chat.example.com/api/v1/chatters/0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c \
-H "Authorization: Bearer $CHATVIA_API_KEY"The answer is { "data": chatter }.
Update a chatter
Changes the chatter's message limit or switches the account off and on. A field you leave out keeps its value.
PATCH /api/v1/chatters/{chatter}| Body field | Type | Notes |
|---|---|---|
messages_limit |
integer or null | At least 1. null removes the chatter's own limit. |
deactivated |
boolean | true switches the account off. false switches it back on. |
deactivation_reason |
string or null | A note for your own records, up to 255 characters. The chatter doesn't see it. |
curl -X PATCH https://chat.example.com/api/v1/chatters/0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c \
-H "Authorization: Bearer $CHATVIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "deactivated": true, "deactivation_reason": "Subscription ended" }'The answer is { "data": chatter } with the new values. A deactivated chatter's sign-in links stop working at once.
Delete a chatter
Deletes the chatter and everything tied to them: their agent access, chat sessions, conversations and uploaded files.
DELETE /api/v1/chatters/{chatter}curl -X DELETE https://chat.example.com/api/v1/chatters/0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c \
-H "Authorization: Bearer $CHATVIA_API_KEY"The answer is 204 No Content.
This can't be undone
To take away access but keep the account and its history, revoke agents or switch the account off with Update a chatter instead.
Grant agents
Gives the chatter access to more agents. Agents they already have stay as they are.
POST /api/v1/chatters/{chatter}/agents| Body field | Type | Required | Notes |
|---|---|---|---|
agent_ids |
array of strings | yes | At least one. Every id must be one of your agents, or nothing is granted. |
curl https://chat.example.com/api/v1/chatters/0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c/agents \
-H "Authorization: Bearer $CHATVIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_ids": ["a3f9c2e17b4d08", "b81e04c9d2f7a6"] }'The answer is 204 No Content.
Revoke agents
Takes away the chatter's access to some agents. The account stays, and so does access to the agents you don't list.
DELETE /api/v1/chatters/{chatter}/agentsThis DELETE has a body:
| Body field | Type | Required | Notes |
|---|---|---|---|
agent_ids |
array of strings | yes | At least one. Every id must be one of your agents. An agent the chatter didn't have is ignored. |
curl -X DELETE https://chat.example.com/api/v1/chatters/0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c/agents \
-H "Authorization: Bearer $CHATVIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_ids": ["b81e04c9d2f7a6"] }'The answer is 204 No Content.
Make a sign-in link
Makes a link that signs a person in to one agent's Hosted Chat, without a password. Send the link to the person, or redirect them to it from your own site after they signed in there.
POST /api/v1/chatters/sign| Body field | Type | Required | Default | Notes |
|---|---|---|---|---|
agent_id |
string | yes | One of your agents. | |
user_id |
string | yes | One of your chatters, or the owner or a teammate of your workspace. Find teammates with List users. | |
ttl_seconds |
integer | no | 3600 |
How long the link works, from 60 seconds to 86,400 (one day). |
curl https://chat.example.com/api/v1/chatters/sign \
-H "Authorization: Bearer $CHATVIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "a3f9c2e17b4d08",
"user_id": "0199f401-7d8e-7f9a-8b0c-1d2e3f4a5b6c",
"ttl_seconds": 900
}'{
"data": {
"url": "https://chat.example.com/chat/help-desk?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"expires_at": "2026-10-25T11:15:00+00:00"
}
}The answer is 201 Created.
Good to know:
- The link can be opened more than once until it expires. Treat it like a password and send it only to its person.
- The person must have access to the agent. A link for a chatter who wasn't granted the agent won't sign them in.
- The token in the link is the same kind of token your own backend can sign with the agent's signing secret. Identity verification shows how to make one yourself, and Protected agents shows how to pass it to the widget.
- An unknown
agent_idoruser_idis a422, worded the same whether the id doesn't exist or belongs to another workspace.