List clients
curl --request GET \
--url https://woes.dev/api/v1/clients \
--header 'Authorization: Bearer <token>'const url = 'https://woes.dev/api/v1/clients';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://woes.dev/api/v1/clients"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://woes.dev/api/v1/clients', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "list",
"hasMore": false,
"truncated": false,
"clients": [
{
"object": "client",
"id": "example-api-co",
"name": "Example API Co",
"health": "watch",
"healthScore": {
"label": "watch",
"score": 72,
"activity": 85,
"conversations": 66,
"resolutions": 70,
"reasons": [
"1/4 conversations still open.",
"75% resolution rate."
]
},
"metrics": {
"conversations": 4,
"openConversations": 1,
"messages": 38,
"verifiedContacts": 2,
"visits": 6
},
"channels": [
{
"channel": "live-chat",
"count": 3
},
{
"channel": "email",
"count": 1
}
],
"contacts": [
{
"id": "cus_123",
"name": "Ada Lovelace",
"email": "ada@example.com",
"identitySource": "headers",
"lastMessageAt": "2026-06-29T13:00:00.000Z",
"online": false,
"visits": 4
}
],
"recentConversations": [
{
"id": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33",
"channel": "live-chat",
"subject": "OAuth redirect URI mismatch",
"preview": "Customer reports a redirect_uri mismatch.",
"status": "open",
"lastMessageAt": "2026-06-29T13:00:00.000Z"
}
],
"tasks": [
{
"id": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33",
"subject": "OAuth redirect URI mismatch",
"preview": "Customer reports a redirect_uri mismatch.",
"status": "open",
"priority": "High",
"lastMessageAt": "2026-06-29T13:00:00.000Z"
}
],
"firstContactAt": "2026-06-20T16:00:00.000Z",
"lastMessageAt": "2026-06-29T13:00:00.000Z",
"latestConversationId": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33"
}
]
}{
"code": "invalid_request",
"error": "Request body is invalid."
}{
"code": "unauthorized",
"error": "A valid workspace API key is required."
}{
"code": "insufficient_scope",
"error": "This API key is missing the required scope."
}{
"code": "rate_limited",
"error": "Too many API requests. Slow down and try again shortly."
}{
"code": "internal_error",
"error": "The API request could not be completed."
}List clients
Lists client account aggregates derived from conversations in the API key workspace.
GET
https://woes.dev
/
api
/
v1
/
clients
List clients
curl --request GET \
--url https://woes.dev/api/v1/clients \
--header 'Authorization: Bearer <token>'const url = 'https://woes.dev/api/v1/clients';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://woes.dev/api/v1/clients"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://woes.dev/api/v1/clients', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "list",
"hasMore": false,
"truncated": false,
"clients": [
{
"object": "client",
"id": "example-api-co",
"name": "Example API Co",
"health": "watch",
"healthScore": {
"label": "watch",
"score": 72,
"activity": 85,
"conversations": 66,
"resolutions": 70,
"reasons": [
"1/4 conversations still open.",
"75% resolution rate."
]
},
"metrics": {
"conversations": 4,
"openConversations": 1,
"messages": 38,
"verifiedContacts": 2,
"visits": 6
},
"channels": [
{
"channel": "live-chat",
"count": 3
},
{
"channel": "email",
"count": 1
}
],
"contacts": [
{
"id": "cus_123",
"name": "Ada Lovelace",
"email": "ada@example.com",
"identitySource": "headers",
"lastMessageAt": "2026-06-29T13:00:00.000Z",
"online": false,
"visits": 4
}
],
"recentConversations": [
{
"id": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33",
"channel": "live-chat",
"subject": "OAuth redirect URI mismatch",
"preview": "Customer reports a redirect_uri mismatch.",
"status": "open",
"lastMessageAt": "2026-06-29T13:00:00.000Z"
}
],
"tasks": [
{
"id": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33",
"subject": "OAuth redirect URI mismatch",
"preview": "Customer reports a redirect_uri mismatch.",
"status": "open",
"priority": "High",
"lastMessageAt": "2026-06-29T13:00:00.000Z"
}
],
"firstContactAt": "2026-06-20T16:00:00.000Z",
"lastMessageAt": "2026-06-29T13:00:00.000Z",
"latestConversationId": "6f6b6f9a-1b6a-4e42-9f71-1b9a3f3d2a33"
}
]
}{
"code": "invalid_request",
"error": "Request body is invalid."
}{
"code": "unauthorized",
"error": "A valid workspace API key is required."
}{
"code": "insufficient_scope",
"error": "This API key is missing the required scope."
}{
"code": "rate_limited",
"error": "Too many API requests. Slow down and try again shortly."
}{
"code": "internal_error",
"error": "The API request could not be completed."
}Authorizations
Workspace API key that starts with woesk_. Paste your own key into the docs playground; never expose it in browser code.
Query Parameters
Search by client id, name, channel, or contact.
Required string length:
1 - 160Filter clients by computed health label.
Available options:
attention, healthy, watch Number of records to return.
Required range:
1 <= x <= 100Response
Client list.
Allowed value:
"list"Hide child attributes
Hide child attributes
Allowed value:
"client"Available options:
attention, healthy, watch Hide child attributes
Hide child attributes
Available options:
attention, healthy, watch Required range:
0 <= x <= 100Required range:
0 <= x <= 100Required range:
0 <= x <= 100Required range:
0 <= x <= 100Hide child attributes
Hide child attributes
Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Hide child attributes
Hide child attributes
Required range:
x >= 0Hide child attributes
Hide child attributes
Available options:
open, waiting, solved Last modified on July 4, 2026
Was this page helpful?
⌘I
