Customers
| Tool | REST endpoint | Annotations |
|---|---|---|
list_clients | GET /v1/clients | read-only, idempotent |
get_client | GET /v1/clients/{identifier} | read-only, idempotent |
list_client_conversations | GET /v1/clients/{clientId}/conversations | read-only, idempotent |
create_client | POST /v1/clients | write (upsert if it already exists) |
update_client | PATCH /v1/clients/{phoneNumber} | write, partial |
delete_client | DELETE /v1/clients/{identifier} | destructive |
block_client | PATCH /v1/clients/{identifier}/moderation | destructive |
unblock_client | PATCH /v1/clients/{identifier}/moderation | write |
reset_client_strikes | PATCH /v1/clients/{identifier}/moderation | destructive |
All three moderation tools hit the same declarative endpoint: the API exposes only one because the verbs overlap (unblocking already resets strikes), but they are kept as verbs here because the tool name is what tells the agent what it does.
Beyond status, get_client returns the full moderation object. list_clients returns status only.
list_clients
Lists customers in the workspace grouped, with pagination and optional filters.
| Field | Type | Default |
|---|---|---|
limit | 1-200 | 50 |
pageToken | string | — |
offset | ≥ 0 (max 100000) | 0 |
sortBy | "name" \| "creationDate" | name |
sortDirection | "asc" \| "desc" | asc |
searchTerm | string | — |
status | "active" \| "blocked" | — |
tags | string[] (max 10) | — |
dateFilter | object | — |
status: "active" includes customers that never had an explicit status.
pageToken is the cursor from the previous response and is preferred over offset; they cannot be combined.
get_client
| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | yes | Customer ID or phone number (E.164). |
Alongside the profile it returns the contact's moderation state (accumulated strikes, last offence, block reason and date). That section only shows up when the contact has history or is blocked.
list_client_conversations
Lists all conversations for a customer across channels and agents, including API chats. Each result
includes the full summary without messages: id, conversationId, clientId, agentId, canSendDirectMessage, workspaceId, channelId, contactName, phoneNumber, topic, platform, source, status, operation, messageCount, owners, tags, creationDate, and lastUpdate.
id is the canonical document, conversationId identifies the thread, and clientId identifies
the client. canSendDirectMessage can only be false on WhatsApp, Instagram, and
Messenger/Facebook, based on the latest user message; it is always true for internal Platica chats.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
clientId | string | yes | — | Customer ID or E.164 phone. |
channelId | string | no | — | Filter by channel. |
agentId | string | no | — | Filter by principal agent. |
limit | 1-200 | no | 50 | Maximum results. |
offset | ≥ 0 | no | 0 | Pagination offset. |
create_client
Creates a new customer; if one with the same phone number already exists, it updates it (upsert).
| Field | Type | Required |
|---|---|---|
phoneNumber | string E.164 | yes |
name | string | yes |
workspace | string | if multi-ws |
email, firstname, lastname, birthdate, gender, company, country, state, city, address, postalCode | string | no |
tags | string[] | no |
customFields | Record<string, unknown> | no |
owners | string[] | no |
Example
{
"name": "create_client",
"arguments": {
"phoneNumber": "+521234567890",
"name": "Ana López",
"email": "ana@example.com",
"tags": ["vip", "nuevo"]
}
} update_client
Updates a customer by phone number. Only the fields provided are applied.
Accepts the same fields as create_client (all optional except phoneNumber), plus:
| Field | Type | Description |
|---|---|---|
status | "active" \| "blocked" | Blocks or unblocks the contact, with the same effects as block_client / unblock_client. |
delete_client
| Field | Type | Required |
|---|---|---|
identifier | string | yes |
workspace | string | if multi-ws |
Irreversible deletion. The contact's document is kept with its channel identifiers, but their personal data, tags, and custom fields are wiped and they stop showing up in listings. Their private notes and the files attached to them are permanently deleted.
block_client
Blocks a contact: their future conversations start out as spam, agents stop replying to them, and the threads that were already open are marked as spam so the block applies right away.
| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | yes | Customer ID or phone (E.164). |
workspace | string | if multi-ws | — |
reason | string (max 120) | no | Reason recorded on the contact. Defaults to api_request. |
Example
{
"name": "block_client",
"arguments": {
"identifier": "+521234567890",
"reason": "abuse_reported"
}
} unblock_client
Unblocks a contact, moves the conversations the block sent to spam back to finished, and zeroes their strikes so one more offence does not block them again. The record of the last offence is kept.
| Field | Type | Required |
|---|---|---|
identifier | string | yes |
workspace | string | if multi-ws |
reset_client_strikes
Zeroes the contact's moderation strikes. Does not unblock them — use unblock_client for that, which already resets the strikes along the way. Use this one to forgive a contact who piled up offences but was never blocked.
| Field | Type | Required | Description |
|---|---|---|---|
identifier | string | yes | Customer ID or phone (E.164). |
workspace | string | if multi-ws | — |
clearHistory | boolean | no | Also wipes the record of the last offence (categories, terms, severity). |