Part of Staff Support.
| Method |
Path |
Summary |
| GET |
/api/v1/orgs/{org_slug}/chat/conversations |
List customer conversations |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations |
Create customer conversation |
| GET |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id} |
Get customer conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments |
Upload customer attachment |
| GET |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments/{attachment_id} |
Download customer attachment |
| GET |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments/{attachment_id}/thumbnail |
Lets a thread show an image inline instead of a download link |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/close |
Close customer conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/csat |
Rate customer conversation |
| GET |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/messages |
Get customer messages |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/messages |
Send customer message |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/read |
Mark customer conversation read |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/reopen |
Reopen customer conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/approve |
Approve ticket request |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/decline |
Decline ticket request |
| POST |
/api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/revoke |
Take back access given from this ticket, before it closes |
| GET |
/api/v1/orgs/{org_slug}/chat/meta |
Get customer support meta |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/canned-responses |
List org canned responses |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/canned-responses |
Create org canned response |
| PUT |
/api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id} |
Update org canned response |
| DELETE |
/api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id} |
Delete org canned response |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/conversations |
Tickets, newest activity first |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations |
Open a ticket on a customer's behalf |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/bulk |
Bulk org staff conversations |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id} |
Get org staff conversation |
| PATCH |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id} |
Priority, department, status, and (Tier 3 and above) which customer the ticket belongs to |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/assign |
Claim a ticket, or with agentid (Tier 3 and above) give it to a teammate |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/attachments/{attachment_id} |
The file a customer attached, for the staff member reading the ticket |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/close |
Close org staff conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/duplicate |
Close this ticket as a duplicate of another of the same customer's |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/escalate |
Escalate org conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/escalate-tier |
Pass a ticket up to Tier 2 or Tier 3, back into the queue there |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/internal-note |
A note for the desk, on any ticket the caller may read |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/messages |
Get org staff messages |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/messages |
A reply to a closed ticket reopens it first |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/release |
Give a claimed ticket back to the queue |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/reopen |
Reopen org staff conversation |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests |
Every request on the ticket, newest first, as its card shows it |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests |
Create ticket request |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests/{request_id}/cancel |
Withdraw a request the customer has not answered yet |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests/{request_id}/release |
Give back server access before the ticket closes: done with it, or handing the work on |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/transfer |
Transfer org conversation |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/viewing |
Org ticket viewing |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/departments |
Departments with their names and SLAs, for anything staff-side that shows a ticket |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/queue |
Unclaimed tickets waiting for an answer, at the caller's tier or below |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/queue/take-next |
Claim the ticket at the front of the queue and hand it back |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/stats |
The figures above the inbox, under the audience the request carries |
GET /api/v1/orgs/{org_slug}/chat/conversations
| Name |
In |
Type |
Required |
Description |
org_slug |
path |
string |
yes |
|
status |
query |
string |
no |
|
priority |
query |
string |
no |
|
q |
query |
string |
no |
|
page |
query |
integer |
no |
Default: 1. |
limit |
query |
integer |
no |
Default: 20. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].conversation_number |
integer |
[].scope |
string |
[].subject |
string |
[].status |
string |
[].priority |
string |
[].department |
string or null |
[].assigned_agent_id |
integer or null |
[].assigned_agent_name |
string or null |
[].user_id |
integer or null |
[].user_email |
string or null |
[].user_name |
string or null |
[].customer_id |
integer or null |
[].channel |
string |
[].email_from |
string or null |
[].last_message_at |
string (date-time) or null |
[].last_message_preview |
string or null |
[].tags |
array of string or null |
[].unread_count |
integer |
[].waiting_seconds |
integer or null |
[].sla_first_response_due_at |
string (date-time) or null |
[].sla_resolution_due_at |
string (date-time) or null |
[].sla_breached_first_response |
boolean |
[].sla_breached_resolution |
boolean |
[].first_response_at |
string (date-time) or null |
[].csat_score |
integer or null |
[].created_at |
string (date-time) |
[].updated_at |
string (date-time) |
[].is_free |
boolean or null |
[].viewers |
array of string |
[].escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/conversations
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
subject |
string |
yes |
department |
string or null |
no |
priority |
string |
no |
body |
string |
yes |
service_id |
integer or null |
no |
tags |
array of string or null |
no |
client_request_id |
string or null |
no |
| Status |
Meaning |
201 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 201 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
GET /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
multipart/form-data (required)
| Field |
Type |
Required |
file |
string (binary) |
yes |
| Status |
Meaning |
201 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments/{attachment_id}
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
attachment_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/attachments/{attachment_id}/thumbnail
Lets a thread show an image inline instead of a download link.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
attachment_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/close
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/csat
Rating is only meaningful once the ticket is done, so it is refused
while the conversation is still open.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
score |
integer |
yes |
comment |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/messages
| Name |
In |
Type |
Required |
Description |
conversation_id |
path |
integer |
yes |
|
org_slug |
path |
string |
yes |
|
before_id |
query |
integer |
no |
|
after_id |
query |
integer |
no |
|
limit |
query |
integer |
no |
Default: 50. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].conversation_id |
integer |
[].sender_type |
string |
[].sender_id |
integer or null |
[].sender_name |
string or null |
[].body |
string or null |
[].content_type |
string |
[].is_internal |
boolean |
[].attachments |
array of AttachmentResponse |
[].attachments[].id |
integer |
[].attachments[].file_name |
string |
[].attachments[].file_size |
integer |
[].attachments[].mime_type |
string |
[].attachments[].created_at |
string (date-time) |
[].read_at |
string (date-time) or null |
[].created_at |
string (date-time) |
[].client_request_id |
string or null |
[].request |
object or null |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/messages
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
body |
string |
yes |
client_request_id |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_id |
integer |
sender_type |
string |
sender_id |
integer or null |
sender_name |
string or null |
body |
string or null |
content_type |
string |
is_internal |
boolean |
attachments |
array of AttachmentResponse |
attachments[].id |
integer |
attachments[].file_name |
string |
attachments[].file_size |
integer |
attachments[].mime_type |
string |
attachments[].created_at |
string (date-time) |
read_at |
string (date-time) or null |
created_at |
string (date-time) |
client_request_id |
string or null |
request |
object or null |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/read
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
up_to_message_id |
integer or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/reopen
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/approve
Share the logs asked for, or give the engineer who asked subuser access
until the ticket closes.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
request_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/decline
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
request_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/conversations/{conversation_id}/requests/{request_id}/revoke
Take back access given from this ticket, before it closes.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
request_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/meta
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/staff/canned-responses
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
department |
query |
string |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].org_id |
integer or null |
[].title |
string |
[].shortcut |
string |
[].body |
string |
[].department |
string or null |
[].is_shared |
boolean |
[].created_at |
string (date-time) |
[].updated_at |
string (date-time) |
POST /api/v1/orgs/{org_slug}/chat/staff/canned-responses
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
title |
string |
yes |
shortcut |
string |
yes |
body |
string |
yes |
department |
string or null |
no |
is_shared |
boolean |
no |
| Status |
Meaning |
201 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 201 response:
| Field |
Type |
id |
integer |
org_id |
integer or null |
title |
string |
shortcut |
string |
body |
string |
department |
string or null |
is_shared |
boolean |
created_at |
string (date-time) |
updated_at |
string (date-time) |
PUT /api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id}
| Name |
In |
Type |
Required |
response_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
title |
string or null |
no |
shortcut |
string or null |
no |
body |
string or null |
no |
department |
string or null |
no |
is_shared |
boolean or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
org_id |
integer or null |
title |
string |
shortcut |
string |
body |
string |
department |
string or null |
is_shared |
boolean |
created_at |
string (date-time) |
updated_at |
string (date-time) |
DELETE /api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id}
| Name |
In |
Type |
Required |
response_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
204 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/staff/conversations
Tickets, newest activity first. Tier 1 sees only the queue and its
own; assigned_to (one engineer's claims) is for Tier 3 and above,
escalated narrows to tickets escalated to a higher tier.
| Name |
In |
Type |
Required |
Description |
org_slug |
path |
string |
yes |
|
status |
query |
string |
no |
|
priority |
query |
string |
no |
|
q |
query |
string |
no |
|
assigned_to_me |
query |
boolean |
no |
Default: False. |
assigned_to |
query |
integer or null |
no |
|
escalated |
query |
boolean |
no |
Default: False. |
audience |
query |
string |
no |
|
page |
query |
integer |
no |
Default: 1. |
limit |
query |
integer |
no |
Default: 20. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].conversation_number |
integer |
[].scope |
string |
[].subject |
string |
[].status |
string |
[].priority |
string |
[].department |
string or null |
[].assigned_agent_id |
integer or null |
[].assigned_agent_name |
string or null |
[].user_id |
integer or null |
[].user_email |
string or null |
[].user_name |
string or null |
[].customer_id |
integer or null |
[].channel |
string |
[].email_from |
string or null |
[].last_message_at |
string (date-time) or null |
[].last_message_preview |
string or null |
[].tags |
array of string or null |
[].unread_count |
integer |
[].waiting_seconds |
integer or null |
[].sla_first_response_due_at |
string (date-time) or null |
[].sla_resolution_due_at |
string (date-time) or null |
[].sla_breached_first_response |
boolean |
[].sla_breached_resolution |
boolean |
[].first_response_at |
string (date-time) or null |
[].csat_score |
integer or null |
[].created_at |
string (date-time) |
[].updated_at |
string (date-time) |
[].is_free |
boolean or null |
[].viewers |
array of string |
[].escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations
Open a ticket on a customer's behalf. The customer sees a system line
saying staff opened it, then the staff member's message, and is emailed
like any reply; the paid-support gate does not apply because staff chose
to reach out.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
customer_id |
integer |
yes |
subject |
string |
yes |
body |
string |
yes |
priority |
string |
no |
department |
string or null |
no |
service_id |
integer or null |
no |
assign_to_me |
boolean |
no |
| Status |
Meaning |
201 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 201 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/bulk
The same change to many tickets at once: take them, drop them, close
them, or set their priority or department. Tickets outside this org are
skipped, not refused, so one bad id cannot spoil a selection.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
ids |
array of integer |
yes |
action |
string |
yes |
value |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
PATCH /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}
Priority, department, status, and (Tier 3 and above) which customer
the ticket belongs to. A status of closed closes it the way the close
button does, and moving a closed ticket to any other status reopens it
first, so whatever a close or a reopen sets in motion runs either way.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
priority |
string or null |
no |
department |
string or null |
no |
status |
string or null |
no |
tags |
array of string or null |
no |
subject |
string or null |
no |
customer_id |
integer or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/assign
Claim a ticket, or with agent_id (Tier 3 and above) give it to a
teammate. Either way the new holder must be able to take it and have
room under their claim limit.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
agent_id |
integer or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
GET /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/attachments/{attachment_id}
The file a customer attached, for the staff member reading the ticket.
The customer route is scoped to the owner; this one to the org.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
attachment_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/close
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/duplicate
Close this ticket as a duplicate of another of the same customer's.
The customer is told which ticket the conversation continues in; the
other ticket gets an internal note pointing back, so whoever answers it
knows there was a second report. Only tickets of the same customer can be
folded together, because folding two customers' tickets is always a mistake.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
Description |
of |
integer |
yes |
The ticket this one duplicates |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/escalate
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/escalate-tier
Pass a ticket up to Tier 2 or Tier 3, back into the queue there.
Tiers 1 and 2 may only send a ticket above themselves. Tier 3 and above
may also lower an escalation or clear it (tier: null). note tells
the next engineer what has been tried, as an internal note.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
tier |
integer or null |
no |
note |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/internal-note
A note for the desk, on any ticket the caller may read. Tier 2 can
leave one on a colleague's ticket it may not answer.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
body |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_id |
integer |
sender_type |
string |
sender_id |
integer or null |
sender_name |
string or null |
body |
string or null |
content_type |
string |
is_internal |
boolean |
attachments |
array of AttachmentResponse |
attachments[].id |
integer |
attachments[].file_name |
string |
attachments[].file_size |
integer |
attachments[].mime_type |
string |
attachments[].created_at |
string (date-time) |
read_at |
string (date-time) or null |
created_at |
string (date-time) |
client_request_id |
string or null |
request |
object or null |
GET /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/messages
| Name |
In |
Type |
Required |
Description |
conversation_id |
path |
integer |
yes |
|
org_slug |
path |
string |
yes |
|
before_id |
query |
integer |
no |
|
limit |
query |
integer |
no |
Default: 50. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].conversation_id |
integer |
[].sender_type |
string |
[].sender_id |
integer or null |
[].sender_name |
string or null |
[].body |
string or null |
[].content_type |
string |
[].is_internal |
boolean |
[].attachments |
array of AttachmentResponse |
[].attachments[].id |
integer |
[].attachments[].file_name |
string |
[].attachments[].file_size |
integer |
[].attachments[].mime_type |
string |
[].attachments[].created_at |
string (date-time) |
[].read_at |
string (date-time) or null |
[].created_at |
string (date-time) |
[].client_request_id |
string or null |
[].request |
object or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/messages
A reply to a closed ticket reopens it first. The composer says so,
and a staff member writing to a customer means to be heard, not refused.
An unassigned ticket becomes the replier's: whoever answers owns it,
unless somebody already does, and within the replier's claim limit.
With close the ticket is closed once the reply is in.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
body |
string |
yes |
client_request_id |
string or null |
no |
close |
boolean |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_id |
integer |
sender_type |
string |
sender_id |
integer or null |
sender_name |
string or null |
body |
string or null |
content_type |
string |
is_internal |
boolean |
attachments |
array of AttachmentResponse |
attachments[].id |
integer |
attachments[].file_name |
string |
attachments[].file_size |
integer |
attachments[].mime_type |
string |
attachments[].created_at |
string (date-time) |
read_at |
string (date-time) or null |
created_at |
string (date-time) |
client_request_id |
string or null |
request |
object or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/release
Give a claimed ticket back to the queue. The holder may release their
own; Tier 3 and above may release anyone's. note is left for
whoever takes it next, as an internal note.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json
| Field |
Type |
Required |
note |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/reopen
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
GET /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests
Every request on the ticket, newest first, as its card shows it.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests
Ask the ticket's customer for a server's logs (any tier) or for
subuser access to it (Tier 2 and above). The customer answers in their
thread; nothing is shared or granted until they do.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
kind |
string |
yes |
server_uuid |
string |
yes |
scope |
string |
yes |
note |
string or null |
no |
| Status |
Meaning |
201 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests/{request_id}/cancel
Withdraw a request the customer has not answered yet.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
request_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/requests/{request_id}/release
Give back server access before the ticket closes: done with it, or
handing the work on.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
request_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/transfer
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
application/json (required)
| Field |
Type |
Required |
agent_id |
integer or null |
no |
department |
string or null |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
org_id |
integer or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
email_mailbox |
string or null |
subject |
string |
department |
string or null |
priority |
string |
status |
string |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
assigned_at |
string (date-time) or null |
service_id |
integer or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
closed_at |
string (date-time) or null |
reopened_count |
integer |
tags |
array of string or null |
first_response_at |
string (date-time) or null |
first_response_by_id |
integer or null |
resolved_at |
string (date-time) or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
csat_score |
integer or null |
csat_comment |
string or null |
csat_rated_at |
string (date-time) or null |
unread_count |
integer |
messages |
array of ChatMessageResponse |
messages[].id |
integer |
messages[].conversation_id |
integer |
messages[].sender_type |
string |
messages[].sender_id |
integer or null |
messages[].sender_name |
string or null |
messages[].body |
string or null |
messages[].content_type |
string |
messages[].is_internal |
boolean |
messages[].attachments |
array of AttachmentResponse |
messages[].read_at |
string (date-time) or null |
messages[].created_at |
string (date-time) |
messages[].client_request_id |
string or null |
messages[].request |
object or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}/viewing
The console's heartbeat on an open ticket: "I am looking at this one",
answered with who else is. One presence row per staff member follows
them from ticket to ticket; a row older than VIEWING_TTL is a closed
tab and is not reported.
| Name |
In |
Type |
Required |
conversation_id |
path |
integer |
yes |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
viewers |
array of object |
GET /api/v1/orgs/{org_slug}/chat/staff/departments
Departments with their names and SLAs, for anything staff-side that
shows a ticket. Tickets carry only the slug; without this the console
printed billing where a customer sees "Billing".
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
GET /api/v1/orgs/{org_slug}/chat/staff/queue
Unclaimed tickets waiting for an answer, at the caller's tier or below.
| Name |
In |
Type |
Required |
Description |
org_slug |
path |
string |
yes |
|
department |
query |
string |
no |
|
audience |
query |
string |
no |
|
page |
query |
integer |
no |
Default: 1. |
limit |
query |
integer |
no |
Default: 20. |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
A 200 response is a list; each item has these fields:
| Field |
Type |
[].id |
integer |
[].conversation_number |
integer |
[].scope |
string |
[].subject |
string |
[].status |
string |
[].priority |
string |
[].department |
string or null |
[].assigned_agent_id |
integer or null |
[].assigned_agent_name |
string or null |
[].user_id |
integer or null |
[].user_email |
string or null |
[].user_name |
string or null |
[].customer_id |
integer or null |
[].channel |
string |
[].email_from |
string or null |
[].last_message_at |
string (date-time) or null |
[].last_message_preview |
string or null |
[].tags |
array of string or null |
[].unread_count |
integer |
[].waiting_seconds |
integer or null |
[].sla_first_response_due_at |
string (date-time) or null |
[].sla_resolution_due_at |
string (date-time) or null |
[].sla_breached_first_response |
boolean |
[].sla_breached_resolution |
boolean |
[].first_response_at |
string (date-time) or null |
[].csat_score |
integer or null |
[].created_at |
string (date-time) |
[].updated_at |
string (date-time) |
[].is_free |
boolean or null |
[].viewers |
array of string |
[].escalated_tier |
integer or null |
POST /api/v1/orgs/{org_slug}/chat/staff/queue/take-next
Claim the ticket at the front of the queue and hand it back.
One click instead of open the inbox, pick the top row, press Take. The
lock means two people pressing at the same moment get two different
tickets, not the same one. null when nobody is waiting. Refused with
409 when the caller already holds as many tickets as their tier may.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
department |
query |
string |
no |
audience |
query |
string |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
id |
integer |
conversation_number |
integer |
scope |
string |
subject |
string |
status |
string |
priority |
string |
department |
string or null |
assigned_agent_id |
integer or null |
assigned_agent_name |
string or null |
user_id |
integer or null |
user_email |
string or null |
user_name |
string or null |
customer_id |
integer or null |
channel |
string |
email_from |
string or null |
last_message_at |
string (date-time) or null |
last_message_preview |
string or null |
tags |
array of string or null |
unread_count |
integer |
waiting_seconds |
integer or null |
sla_first_response_due_at |
string (date-time) or null |
sla_resolution_due_at |
string (date-time) or null |
sla_breached_first_response |
boolean |
sla_breached_resolution |
boolean |
first_response_at |
string (date-time) or null |
csat_score |
integer or null |
created_at |
string (date-time) |
updated_at |
string (date-time) |
is_free |
boolean or null |
viewers |
array of string |
escalated_tier |
integer or null |
GET /api/v1/orgs/{org_slug}/chat/staff/stats
The figures above the inbox, under the audience the request carries.
closed_today is the tickets closed since midnight in the brand's own
timezone (OrgSettings.timezone; UTC when the brand has not set one),
so "what we finished today" is the day the team is working in. Waiting
counts what the caller's tier may take; claim_limit is how many the
caller may hold, and Tier 3 and above also get claims per engineer.
| Name |
In |
Type |
Required |
org_slug |
path |
string |
yes |
audience |
query |
string |
no |
| Status |
Meaning |
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Fields of a 200 response:
| Field |
Type |
total_waiting |
integer |
agents_online |
integer |
my_open |
integer |
my_awaiting_agent |
integer |
total_active |
integer |
open |
integer |
total_on_hold |
integer |
sla_breached |
integer |
closed_today |
integer |
oldest_waiting_seconds |
integer or null |
avg_first_response_seconds |
number or null |
avg_resolution_seconds |
number or null |
by_department |
By Department |
by_priority |
By Priority |
by_status |
By Status |
claim_limit |
integer or null |
escalated_waiting |
integer |
claims |
array of object or null |