Slim catalogs that populate the chat-list filter chips β inboxes, agents, channel types, teams, campaigns, AI agents, statuses, and WhatsApp templates.
List configured channels (inboxes)
Channels configured for the organization β one row per inbox instance. INACTIVE, ERROR, and MAINTENANCE channels are intentionally returned so the filter UX can surface them for triage.
Distinct from /channels/types: that endpoint collapses to one row per brand (with active_inbox_count); this one lists every inbox instance.
query Parameters
statusInbox operational state.
qSubstring on channels.name (ILIKE).
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitRows per page. Capped at 100.
List configured channels (inboxes) βΊ Responses
Inboxes page.
successList human agents (chat-filter dropdown)
Active human users in the organization (OWNER + MANAGER + AGENT). Soft-deleted and non-ACTIVE users are filtered out.
This is the slim shape for the chat-list Agent filter chip. Use /users instead for the ticket-assignee picker and other surfaces that need the full user profile.
query Parameters
qSubstring on users.full_name (ILIKE).
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitRows per page. Capped at 100.
List human agents (chat-filter dropdown) βΊ Responses
Agents page.
successChannel-brand catalog for the org
Returns one row per distinct channels.type the organization has at least one ACTIVE inbox of, decorated with a human-readable display name and brand color from a server-side static catalog.
Powers the chat-list Channel filter chip β instead of hardcoding all six known channels client-side, the picker only shows brands the org actually uses, and the mobile client gets new brands automatically when a new channel type is added (no app update needed).
If the server adds a new channel type before the static catalog map is updated, the entry still appears with a title-cased display_name and neutral grey color. Clients should not hardcode the full enum set β render whatever the server returns.
No pagination β there are never more than a handful of channel types per organization.
Channel-brand catalog for the org βΊ Responses
Channel-brand catalog.
successList teams
Org-scoped paginated list of teams. Powers the Handled By β Team picker on the chat info panel β agents can hand a conversation off to a team and one of the team's active members is auto-distributed if the team has that flag set.
Mirrors chatmo-dashboard /api/teams β same shape, same pagination.
query Parameters
searchILIKE substring on teams.name.
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitSmaller default (10) than the chat list β the picker is a short dropdown.
List teams βΊ Responses
Teams page.
successList campaigns
Paginated list of campaigns (stored as broadcasts). Powers the chat-list Campaign filter dropdown β pair the returned id with ?campaign_id= on GET /conversations.
Sorted created_at DESC β latest campaigns surface first.
query Parameters
qILIKE substring on broadcasts.name.
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitRows per page. Capped at 100.
List campaigns βΊ Responses
Campaigns page.
successList AI agents
Paginated list of AI agents in the organization. Powers the chat-list AI Agent filter dropdown β pair with ?ai_agent_id= on GET /conversations.
Sorted name ASC.
query Parameters
qILIKE substring on ai_agents.name.
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitRows per page. Capped at 100.
List AI agents βΊ Responses
AI agents page.
successCanonical chat-status catalog
Catalog of the canonical chat statuses with display name and brand color. Mirrors the /channels/types contract β when the server-side enum gains a new value, the mobile filter picker renders it automatically without a client release.
Hyphenated path so it does not collide with the /conversations/{conversation_id} detail route.
The catalog changes on a release cadence (not per request) β clients can cache it for the lifetime of the auth token without staleness risk.
Canonical chat-status catalog βΊ Responses
Status catalog.
successApproved WhatsApp templates for a channel
Approved WhatsApp Business template catalog scoped to a channel. Powers the New Chat sheet's "Select Template" picker on chatmo-app and the broadcast composer's template picker on the dashboard.
The default status filter is APPROVED so only sendable templates surface. Pass status=DRAFT (or any other value from the enum) to inspect the full lifecycle.
Sorted updated_at DESC, created_at DESC β recently-changed templates float to the top.
query Parameters
channel_idWhatsApp Official channel β templates are per-channel.
statussearchSubstring match on name.
page1-indexed page number. Capped at 500 to bound deep-scan cost.
limitApproved WhatsApp templates for a channel βΊ Responses
Templates page.
successResolve a channel by its identifier
Resolve a channel's channel_id (and details) from a memorable identifier you already know β so you don't have to remember UUIDs. The identifier that matches depends on the channel type:
| Channel | Identifier to pass |
|---|---|
| WHATSAPP_OFFICIAL | phone number (e.g. 628123456789) |
| WHATSAPP_UNOFFICIAL | device phone number |
@username (or username) | |
| Page name | |
| TELEGRAM | bot @username or numeric bot id |
| WEBCHAT | widget id |
Phone numbers are matched digit-normalized, so +62β¦, 62β¦, spaces and dashes all resolve. Pass the optional type to disambiguate when one identifier could match more than one channel. Returns a single channel object; 404 when nothing matches.
Use the returned id as the channel_id in POST /messages. For a full paginated list of your channels, use GET /inboxes instead.
query Parameters
identifierThe memorable identifier β phone / @username / Page name / widget id.
typeOptional channel type to disambiguate.
Resolve a channel by its identifier βΊ Responses
The matching channel.
successcodemessage