`GET /api/conversations` — one server-paginated, filtered page of the board.
const url = 'https://example.com/api/conversations';const options = {method: 'GET', headers: {cookie: 'supacloud_session=<supacloud_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/conversations \ --cookie supacloud_session=<supacloud_session>Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Free-text over the subject AND the message bodies (full-text), so a thread is findable by something said inside it, not only by its title.
Status chip. Matched as an opaque string — the column carries no CHECK because a provider may define its own status.
Channel chip (chatwoot | intercom | …).
Restrict to one assignee (“mine”).
Only threads nobody has picked up.
Whitelisted sort column: last_message_at | created_at | subject.
asc | desc (default desc).
Recompute the facet chips (default true); the board sends false on a
page/sort change because the chip counts are workspace-wide.
Responses
Section titled “Responses”One page of conversations.
GET /api/conversations body — the {items, total, facets} board standard.
object
The facet chips a conversations board renders.
object
Per-channel counts, workspace-wide.
object
Per-status counts, workspace-wide.
object
Threads with no assignee — the queue that needs picking up.
One row of the conversations board.
object
provider | local — WHICH SYSTEM owns the assignment. The UI must not
offer a local reassign control on a provider row; that assignment lives in
Chatwoot/Intercom and a local write would be silently overwritten on the
next delivery.
Examplegenerated
{ "facets": { "channels": { "additionalProperty": 1 }, "statuses": { "additionalProperty": 1 }, "unassigned": 1 }, "items": [ { "assigned_to": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "assignment_origin": "example", "channel": "example", "contact_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "created_at": "2026-04-15T12:00:00Z", "external_id": "example", "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "last_message_at": "2026-04-15T12:00:00Z", "status": "example", "subject": "example" } ], "total": 1}Structured client error
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Authentication required
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Permission denied
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Structured server error
The canonical JSON body of every error response — the single source of truth
the frontend binds to. Every AppError serializes as this exact shape, and
the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is
what the frontend error schema is generated from, so there is no hand-written
error schema on either end.
object
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}