Conventions
Consistent base URL, authentication, and response envelope across every endpoint.
Base URL
All endpoints are relative to the versioned base URL.
Authentication
Authenticate with an API key created in the Developer Console, passed in the x-api-key header. An API key acts with workspace-admin scope.
Keep keys secret
Response envelope
Successful responses wrap the payload in a consistent envelope.
List endpoints that paginate add a pagination object.
Errors return success: false with a human-readable message and an appropriate HTTP status.
Conversations
List, read, update, and delete conversations, and read or send messages within them.
/conversationsList conversations in the workspace, newest activity first. Paginated.
Query parameters
| Field | Type | Description |
|---|---|---|
status | string | Filter by conversation status (e.g. OPEN, CLOSED). |
agent_id | string | Filter by assigned agent; pass "unassigned" for none. |
department_id | string | Filter by department. |
search | string | Match subject, visitor name/email, or message content. |
page | number | Page number (default 1). |
per_page | number | Items per page (default 25, max 100). |
Request
Response
/conversationsCreate a conversation for a visitor. An agent is auto-assigned by the routing engine when available.
Body
| Field | Type | Description |
|---|---|---|
visitorIdRequired | string | Id of the visitor the conversation belongs to. |
departmentId | string | Optional department to route to. |
subject | string | Optional conversation subject. |
channel | string | Origin channel (default CHAT). |
Request
/conversations/{id}Retrieve a single conversation with its visitor, agent, department, and tags.
Request
/conversations/{id}Update a conversation's status, assignee, department, subject, priority, or metadata.
Body
| Field | Type | Description |
|---|---|---|
status | string | New status for the conversation. |
agentId | string | null | Assign to an agent, or null to unassign. |
departmentId | string | null | Optional department to route to. |
subject | string | null | Optional conversation subject. |
priority | string | Conversation priority. |
metadata | object | Arbitrary metadata object. |
Request
/conversations/{id}Soft-delete a conversation (moves to Trash). Deleting one already in Trash removes it permanently.
Request
Response
/conversations/{id}/messagesList messages in a conversation, oldest first. Paginated.
Query parameters
| Field | Type | Description |
|---|---|---|
page | number | Page number (default 1). |
per_page | number | Items per page (default 25, max 100). |
Request
/conversations/{id}/messagesSend a message into a conversation. Requires content, attachments, or a RICH type.
Body
| Field | Type | Description |
|---|---|---|
content | string | Message text. Required unless attachments or a RICH type are given. |
type | "TEXT" | "NOTE" | "RICH" | "FILE" | Message type. NOTE is an internal, agents-only note. |
attachments | array | Array of file attachments. |
replyToId | string | Id of the message this replies to. |
metadata | object | Arbitrary metadata object. |
Request
Response
Tickets
A full ticketing surface: list, create, read the 360 view, update, and comment.
/ticketsList tickets, most recently updated first. Note: uses page and pageSize (not per_page).
Query parameters
| Field | Type | Description |
|---|---|---|
status | string | Filter by status. Comma-separated list allowed (e.g. OPEN,PENDING). |
priority | string | Filter by priority (LOW, NORMAL, HIGH, URGENT). |
assigneeId | string | Filter by assignee; "me" for yourself, "unassigned" for none. |
requesterId | string | Filter by requester id. |
q | string | Match subject text or ticket number. |
page | number | Page number (default 1). |
pageSize | number | Items per page (default 25, max 100). |
Request
Response
/ticketsCreate a ticket. The requester must be a contact in the workspace.
Body
| Field | Type | Description |
|---|---|---|
subjectRequired | string (1–500) | Ticket subject, 1–500 characters. |
descriptionRequired | string | The ticket body. |
requesterIdRequired | string | Id of the requesting contact (VISITOR, LEAD, or USER). |
priority | "LOW" | "NORMAL" | "HIGH" | "URGENT" | Ticket priority. |
type | "QUESTION" | "INCIDENT" | "PROBLEM" | "TASK" | Ticket type. |
departmentId | string | null | Optional department to route to. |
assigneeId | string | null | Optional agent to assign. |
tags | string[] (max 50) | Up to 50 free-form tags. |
Request
/tickets/{id}Retrieve a ticket with its comments, events, and requester context (other tickets and conversations).
Request
Response
/tickets/{id}Update a ticket. Provide at least one field. Setting status to SOLVED triggers a CSAT survey.
Body
| Field | Type | Description |
|---|---|---|
status | "NEW" | "OPEN" | "PENDING" | "ON_HOLD" | "SOLVED" | "CLOSED" | New ticket status. |
priority | string | Ticket priority. |
type | string | Ticket type. |
assigneeId | string | null | Optional agent to assign. |
departmentId | string | null | Optional department to route to. |
tags | string[] | Up to 50 free-form tags. |
subject | string (1–500) | Ticket subject, 1–500 characters. |
Request
/tickets/{id}/commentsAdd a comment. Public replies email the other party; internal notes stay private.
Body
| Field | Type | Description |
|---|---|---|
bodyRequired | string | The comment text. |
isInternal | boolean | When true, the comment is an internal note (default false). |
Request
Response
Articles
Manage knowledge base articles (bilingual title and content).
/articlesList articles, newest first. Paginated.
Query parameters
| Field | Type | Description |
|---|---|---|
status | string | Filter by status (e.g. DRAFT, PUBLISHED). |
category_id | string | Filter by category. |
search | string | Match Arabic/English title or content. |
page | number | Page number (default 1). |
per_page | number | Items per page (default 25, max 100). |
Request
/articlesCreate an article. Slugs are generated automatically from the titles.
Body
| Field | Type | Description |
|---|---|---|
titleArRequired | string | Arabic title. |
titleEnRequired | string | English title. |
contentAr | string | Arabic body. |
contentEn | string | English body. |
categoryId | string | Category to file the article under. |
status | "DRAFT" | "PUBLISHED" | Publication status (default DRAFT). |
keywords | string[] | Search keywords. |
Request
Response
/articles/{id}Update an article. Content changes snapshot a prior version.
Request
/articles/{id}Delete an article permanently.
Request
FAQs
Manage bilingual frequently asked questions. The list endpoint returns a plain array (no pagination).
/faqsList FAQs, ordered by sort order.
Query parameters
| Field | Type | Description |
|---|---|---|
categoryId | string | Filter by (or file under) a category. |
q | string | Match the question or answer text. |
Request
Response
/faqsCreate an FAQ. All four bilingual fields are required.
Body
| Field | Type | Description |
|---|---|---|
questionArRequired | string | Arabic question. |
questionEnRequired | string | English question. |
answerArRequired | string | Arabic answer. |
answerEnRequired | string | English answer. |
categoryId | string | Filter by (or file under) a category. |
published | boolean | Whether the FAQ is visible (default true). |
sortOrder | number | Ordering weight (default 0). |
Request
/faqs/{id}Update an FAQ.
Request
/faqs/{id}Delete an FAQ.
Request
Categories
Manage knowledge base categories. The list endpoint returns a plain array with article counts and children.
/categoriesList all categories, ordered by sort order.
Request
Response
/categoriesCreate a category. Slugs and sort order are assigned automatically.
Body
| Field | Type | Description |
|---|---|---|
nameArRequired | string | Arabic name. |
nameEnRequired | string | English name. |
descriptionAr | string | Arabic description. |
descriptionEn | string | English description. |
icon | string | Icon name (default Folder). |
parentId | string | null | Parent category id for nesting. |
visibility | string | Visibility (default public). |
Request
/categories/{id}Update a category.
Request
/categories/{id}Delete a category. Its articles are unlinked, not deleted.
Request
Departments
Manage routing departments. The list endpoint returns a plain array.
/departmentsList all departments, oldest first.
Request
Response
/departmentsCreate a department.
Body
| Field | Type | Description |
|---|---|---|
nameArRequired | string | Arabic name. |
nameEnRequired | string | English name. |
description | string | Optional description. |
isDefault | boolean | Make this the default department (un-defaults the others). |
isOnline | boolean | Whether the department accepts chats (default true). |
priority | number | Routing priority weight (default 0). |
skills | string[] | Skill tags used by skills-based routing. |
Request
/departments/{id}Update a department.
Request
/departments/{id}Delete a department. The default department cannot be deleted.
Request
Saved replies
Manage canned responses (macros) keyed by a shortcut. The list endpoint returns a plain array.
/saved-repliesList saved replies, newest first.
Query parameters
| Field | Type | Description |
|---|---|---|
search | string | Match shortcut or title. |
Request
Response
/saved-repliesCreate a saved reply. The shortcut must be unique in the workspace.
Body
| Field | Type | Description |
|---|---|---|
shortcutRequired | string | The trigger shortcut, e.g. /refund. Must be unique. |
titleAr | string | Arabic title (defaults to the shortcut). |
titleEn | string | English title (defaults to the shortcut). |
contentArRequired | string | Arabic reply body. |
contentEnRequired | string | English reply body. |
Request
/saved-replies/{id}Update a saved reply.
Request
/saved-replies/{id}Delete a saved reply.
Request
Webhooks management
Programmatically create and manage webhook endpoints. See the Webhooks guide for delivery, signing, and retries.
/webhooksList webhook endpoints. Secrets are masked. Paginated.
Request
/webhooksCreate an endpoint. The full signing secret is returned exactly once — store it now.
Body
| Field | Type | Description |
|---|---|---|
urlRequired | string (https) | HTTPS endpoint URL (http allowed only for localhost). |
eventsRequired | string[] | Non-empty array of event names to subscribe to. |
description | string | Optional label for the endpoint. |
Request
Response
/webhooks/{id}Retrieve an endpoint (secret masked).
Request
/webhooks/{id}Update an endpoint's url, events, active flag, or description.
Body
| Field | Type | Description |
|---|---|---|
url | string (https) | HTTPS endpoint URL (http allowed only for localhost). |
events | string[] | Non-empty array of event names to subscribe to. |
active | boolean | Enable or disable the endpoint. Re-enabling resets the failure count. |
description | string | null | Optional label for the endpoint. |
Request
/webhooks/{id}Delete an endpoint.
Request
/webhooks/{id}/testSend a live ping to the endpoint. Does not affect its failure count.
Request
/webhooks/{id}/deliveriesList the latest 50 delivery attempts for an endpoint.
Request
Response
Reports
A read-only analytics summary for a date range.
/reportsReturn aggregate metrics — volumes, response and resolution times, breakdowns, top agents, and time series.
Query parameters
| Field | Type | Description |
|---|---|---|
range | number (days) | Number of days back to include (default 7). |
from | ISO date | Start date (ISO). Use with 'to' instead of range. |
to | ISO date | End date (ISO), inclusive of the whole day. |
Request
Response
Visitors
Read and update visitor (contact) profiles.
/visitors/{id}Retrieve a visitor profile with tags and conversation/message counts.
Request
Response
/visitors/{id}Update a visitor. Role changes are promotion-only (VISITOR → LEAD → USER). Contact fields are merged into metadata.
Body
| Field | Type | Description |
|---|---|---|
name | string | null | Display name, or null to clear. |
email | string | null | Email address, or null to clear. |
phone | string | Phone number (stored in metadata). |
company | string | Company name (stored in metadata). |
role | "LEAD" | "USER" | Promote the contact (VISITOR → LEAD → USER). |
score | number | Lead score (integer). |
Request