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/managed-servers |
The servers you own that have Server Management |
| GET |
/api/v1/orgs/{org_slug}/chat/meta |
Get customer support meta |
| GET |
/api/v1/orgs/{org_slug}/chat/staff/analytics |
How the support team is doing over a period, with the period before it for comparison |
| 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 |
| POST |
/api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id}/used |
Count org canned response use |
| 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} |
Update org conversation |
| 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 numbers above the inbox, under the audience the request carries |
| GET |
/api/v1/orgs/{org_slug}/chat/support-tier |
Which support tier the signed-in customer has, and what it changes |
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 |
[].customer_plan |
CustomerPlan or null |
[].customer_plan.key |
string |
[].customer_plan.name |
string |
[].customer_plan.support_level |
string or null |
[].customer_plan.first_response_minutes |
integer or null |
[].support_tier |
string or null |
[].managed |
boolean 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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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/managed-servers
The servers you own that have Server Management.
While Server Management is active on a server, our support team installs
and configures plugins, mods and modpacks on it when you ask by ticket.
This lists your own servers with that add-on. A server another customer
shared with you is not listed, because only its owner can ask for that
service. Each row has org_service_id, the ID to send as service_id
when you open a ticket about that server, the server's server_uuid and
name, and its hostname. A server being deleted is left out, and
the list is empty when none of your servers has the add-on.
| Name |
In |
Type |
Required |
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 |
Description |
servers |
array of ManagedServer |
The customer's servers that have Server Management, including servers shared with them. Empty when none do. |
servers[].org_service_id |
integer |
The server's order ID. Send it as service_id when opening a ticket about this server. |
servers[].server_uuid |
string or null |
The server's UUID, as the server list shows it. Empty while the server has no container. |
servers[].name |
string |
The server's name. |
servers[].hostname |
string or null |
The server's hostname, when it has one. |
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/analytics
How the support team is doing over a period, with the period before it for comparison.
Needs Tier 3 support or above. from and to are days in the brand's
own time zone (the last 30 days when left out, at most 366), and
compare sets them against another period (previous, week,
month, year, custom with compare_from and compare_to,
or none). A bad word, a period over 366 days or a custom comparison
without both days answers 422.
The answer holds opened (conversations created in the period),
closed (closed in it, whenever they opened), first_reply and
resolution (median and p90 in seconds by nearest rank, over the
conversations opened in the period for replies and over those closed in it
for resolution), first_reply.on_time_pct (the share of reply targets
kept), csat (ratings of conversations closed in the period, with
average, count and a distribution of { score, count } from
5 down to 1), by_day
(chat and email opened and conversations closed for each day),
first_reply_buckets and backlog_by_age (counts per bucket),
by_agent and by_department (each with its own medians), heatmap
(seven weekdays from Monday by 24 hours of conversations opened, in the
brand's time) and right_now (the queue as the inbox tiles show it
now). A conversation by email counts as email. previous repeats the
headline figures for the comparison period, or is null.
Quantile figures read at most 20,000 conversations per list, newest first;
truncated says when there were more.
| Name |
In |
Type |
Required |
Description |
org_slug |
path |
string |
yes |
|
from |
query |
string (date) or null |
no |
First day of the period, YYYY-MM-DD, in the brand's time zone. A period is at most 366 days. |
to |
query |
string (date) or null |
no |
Last day of the period, YYYY-MM-DD, in the brand's time zone. Left out, today. |
compare |
query |
string or null |
no |
What to set the period against: previous (the same number of days just before it; a calendar month compares to the prior month), week, month or year (the same days one week, month or year earlier), custom (the days between compare_from and compare_to) or none. Left out, none. |
compare_from |
query |
string (date) or null |
no |
First day of the comparison period for compare=custom, YYYY-MM-DD. |
compare_to |
query |
string (date) or null |
no |
Last day of the comparison period for compare=custom, YYYY-MM-DD. |
| 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 |
[].actions |
object or null |
[].usage_count |
integer |
[].last_used_at |
string (date-time) or null |
[].created_by |
object or null |
[].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 |
Description |
title |
string |
yes |
|
shortcut |
string |
yes |
|
body |
string |
yes |
|
department |
string or null |
no |
|
is_shared |
boolean |
no |
|
actions |
object or null |
no |
What sending a reply made from it also does: status (awaiting_customer, on_hold or closed), priority (low, medium, high or critical) and add_tags (up to ten), each optional; null for none |
| 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 |
actions |
object or null |
usage_count |
integer |
last_used_at |
string (date-time) or null |
created_by |
object or null |
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 |
Description |
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 |
|
actions |
object or null |
no |
As on create; null clears them, and leaving it out keeps them |
| 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 |
actions |
object or null |
usage_count |
integer |
last_used_at |
string (date-time) or null |
created_by |
object or null |
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. |
POST /api/v1/orgs/{org_slug}/chat/staff/canned-responses/{response_id}/used
Count one use of a canned reply: the console calls it when a member
sends a reply made from it. Any support tier may. It adds 1 to the
reply's usage_count, sets last_used_at to now and answers
{ usage_count }. A reply that is not this brand's answers 404. A
member who counts more than 600 uses an hour answers 429.
| Name |
In |
Type |
Required |
response_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/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, department
to one department and late to the tickets past a target. Every filter
is applied before the page is cut, so page and limit walk exactly
the tickets that match.
| Name |
In |
Type |
Required |
Description |
org_slug |
path |
string |
yes |
|
status |
query |
string |
no |
|
priority |
query |
string |
no |
|
department |
query |
string or null |
no |
A department's key, as GET chat/staff/departments lists it (slug). Only that department's tickets. |
late |
query |
string or null |
no |
1 or true keeps the tickets waiting on staff that are past a target: a first reply nobody sent or a resolution not reached in time, as the Past SLA figure counts them. 0, false or left out does not narrow the list. Any other word answers 422. |
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 |
[].customer_plan |
CustomerPlan or null |
[].customer_plan.key |
string |
[].customer_plan.name |
string |
[].customer_plan.support_level |
string or null |
[].customer_plan.first_response_minutes |
integer or null |
[].support_tier |
string or null |
[].managed |
boolean 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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
PATCH /api/v1/orgs/{org_slug}/chat/staff/conversations/{conversation_id}
Priority, department, status, tags, 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.
tags replaces the ticket's tags with the list it holds: at most 10,
each at most 40 characters, trimmed and lower case, blanks and repeats
dropped. An empty list clears them. More than 10 answers 422. The change
is on the activity log with the tags as saved.
| 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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
Description |
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 |
|
customer_plan |
CustomerPlan or null |
|
customer_plan.key |
string |
|
customer_plan.name |
string |
|
customer_plan.support_level |
string or null |
|
customer_plan.first_response_minutes |
integer or null |
|
support_tier |
string or null |
|
managed |
boolean or null |
|
| ... |
|
More fields than this page lists; the interactive reference has them all. |
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 |
[].customer_plan |
CustomerPlan or null |
[].customer_plan.key |
string |
[].customer_plan.name |
string |
[].customer_plan.support_level |
string or null |
[].customer_plan.first_response_minutes |
integer or null |
[].support_tier |
string or null |
[].managed |
boolean 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 |
customer_plan |
CustomerPlan or null |
customer_plan.key |
string |
customer_plan.name |
string |
customer_plan.support_level |
string or null |
customer_plan.first_response_minutes |
integer or null |
support_tier |
string or null |
managed |
boolean or null |
GET /api/v1/orgs/{org_slug}/chat/staff/stats
The numbers 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.
by_status counts every ticket of the brand under each status
(open, awaiting_customer, awaiting_agent, in_progress,
on_hold and closed), with a 0 for a status nothing is in.
avg_first_response_seconds is the average time from a ticket's
opening to its first reply, over the tickets whose first reply came in
the last 30 days; it is null when there were none.
my_open, my_awaiting_agent and claim_limit are for the member
who asks and are always current. Everything else is the same for every
member of one tier. It is normally under a minute old, and the first
request after a quiet spell can show numbers a few minutes old.
| 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 |
GET /api/v1/orgs/{org_slug}/chat/support-tier
Which support tier the signed-in customer has, and what it changes.
Customers with an active Priority Support service get tier: "priority".
Their new tickets open at high priority with the plan's first reply
target, and they can choose any priority. Everyone else is on
standard: a store that sells Priority Support opens their tickets at
the priority they choose, up to medium, with the store's standard first
reply target.
service describes the customer's Priority Support service, including
whether it ends at the end of its term. offer lists the plan and its
prices when the store sells Priority Support and the customer does not
have it yet. The answer covers this customer in this store only.
| Name |
In |
Type |
Required |
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 |
Description |
tier |
string |
priority while the customer has an active Priority Support service. Otherwise standard. |
first_reply_minutes |
integer or null |
The first reply target, in minutes, that this customer's new tickets get. Empty when the department's own target applies. |
standard_first_reply_minutes |
integer or null |
The first reply target, in minutes, for customers without Priority Support. Empty when the store sets none. |
priority_first_reply_minutes |
integer or null |
The first reply target, in minutes, with Priority Support. Empty when the store does not sell it. |
allowed_priorities |
array of string |
The priorities this customer can choose for a new ticket. A higher choice opens at medium instead of failing. |
service |
SupportTierService or null |
The customer's Priority Support service. Empty without one. |
service.id |
integer |
The service's ID. It is the same ID the customer sees in their services list. |
service.status |
string |
The service's status. Priority Support applies while it is active. |
service.billing_cycle |
string |
How often the service renews: monthly, quarterly or annually. |
service.amount |
string |
What each renewal costs, as a decimal string. |
service.next_due_date |
string (date-time) or null |
When the next renewal invoice is due. Empty while the service is set to end. |
service.cancel_at_end |
boolean |
true when the customer cancelled and the service ends at the end of the term. Priority Support stays until then. |
offer |
SupportTierOffer or null |
Priority Support as the customer can order it. Empty when the store does not sell it or the customer already has it. |
offer.org_product_id |
integer |
Send this as org_product_id when ordering Priority Support. |
offer.name |
string |
The plan's name. |
offer.description |
string or null |
What the plan includes, in the store's words. |
offer.benefits |
array of string |
Short sentences that say what the plan gives the customer. |
offer.pricing |
array of SupportTierPrice |
The billing cycles the customer can pick, shortest first. |