Contact Center
- OpenAPI Version:
3.1.1 - API Version:
2
The Contact Center APIs allow developers to interface with Contact Center features programmatically.
Servers
- URL:
https://api.zoom.us/v2
Operations
List address books
- Method:
GET - Path:
/contact_center/address_books - Tags: Address Books
Return a list of all address books.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:list_address_books:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Address books list returned.
Content-Type: application/json
-
address_booksarray— Information about the address books.Items:
-
address_book_descriptionstring— The address book's description. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
total_contactsinteger— The address book's total number of contacts. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"address_books": [
{
"address_book_id": "zeYjXoDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"address_book_description": "This is an address book.",
"total_contacts": 30,
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Unit"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1902` <br> The `unit_id` field cannot be an empty value. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1901` <br> Unit does not exist: $unitId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create an address book
- Method:
POST - Path:
/contact_center/address_books - Tags: Address Books
Create an address book. An address book is a collection of consumer information like display names, phone numbers, and locations.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:write:address_book:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
address_book_descriptionstring— The address book's description. -
address_book_namestring— The address book's name. -
unit_idstring— The address book's unit ID.
Example:
{
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"address_book_description": "This is an address book."
}
Responses
Status: 201 **HTTP Status Code:** `201` Address book created.
Content-Type: application/json
-
address_book_descriptionstring— The address book's description. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
Example:
{
"address_book_id": "zeYjXoDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"address_book_description": "This is an address book.",
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Unit"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1902` <br> The `unit_id` field cannot be an empty value. <br> **Error Code:** `1903` <br> The `address_book_name` field cannot be an empty value. <br> **Error Code:** `2003` <br> The address book name is not supported. <br> **Error Code:** `2002` <br> Address book already exists. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1901` <br> Unit does not exist: $unitId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List a contact's custom fields
- Method:
GET - Path:
/contact_center/address_books/contacts/{contactId}/custom_fields - Tags: Address Books
List all custom fields on a contact.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book_custom_field:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 HTTP Status Code: 200 Contact custom fields are returned.
Content-Type: application/json
-
custom_fieldsarray— Array of custom field list.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. * string * number * boolean * email * phone - E.164 format * percent * currency * dateTime - unix timestamp * pick_list -
custom_field_valuestring— The contact's custom field value. -
outdatedboolean— Whether the `custom_field_value` is outdated.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "Preferred Contact Method",
"data_type": "pick_list",
"custom_field_value": "phone",
"outdated": false
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2101` <br> Contact does not exist: $contactId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List an address book's custom fields
- Method:
GET - Path:
/contact_center/address_books/custom_fields - Tags: Address Books
Return all address book custom fields.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book_custom_field:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 The address book's custom fields list is returned.
Content-Type: application/json
-
custom_fieldsarray— Information about the address book custom fields.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. string number boolean email phone - E.164 format percent currency dateTime - unix timestamp pick_list -
address_booksarray— The address books associated with the custom field.Items:
-
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name.
-
-
custom_field_descriptionstring— The custom field's description. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— Specify the list of supported values for the picklist. This is only valid when data_type is pick_list.Items:
string -
show_in_inbound_notificationboolean— Whether or not to show the custom fields on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether or not to show the custom fields on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether or not to show the custom fields in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether or not to use the `custom_field_name` in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether or not to use the custom fields in the consumer routing profile.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizenumber— The number of records returned within a single API call. -
total_recordsnumber— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"custom_fields": [
{
"custom_field_id": "7381d210 Contact Method",
"custom_field_name": "Preferred Contact Method",
"custom_field_description": "Custom field for contact method",
"data_type": "pick_list",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"address_books": [
{
"address_book_id": "X2e_jsLNRkCjI0sQg2kRQQ",
"address_book_name": "Jill's address book"
}
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create an address book custom field
- Method:
POST - Path:
/contact_center/address_books/custom_fields - Tags: Address Books
Create an address book custom field.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:write:address_book_custom_field:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. string number boolean email phone - E.164 format percent currency dateTime - unix timestamp pick_list -
address_book_idsarray— The address book IDs that should be associated with the custom field.Items:
string— The address book's ID. -
custom_field_descriptionstring— The custom field's description. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— Specify the list of supported values for the picklist. This is only valid when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Controls whether or not to show the custom fields on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Controls whether or not to show the custom fields on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Controls whether or not to show the custom fields in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Controls whether or not to use the `custom_field_name` in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Controls whether or not to use the custom fields in the consumer routing profile.
Example:
{
"custom_field_name": "Preferred Contact Method",
"custom_field_description": "The custom field for contact method",
"data_type": "pick_list",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"address_book_ids": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Responses
Status: 201 Custom field created.
Content-Type: application/json
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. string number boolean email phone - E.164 format percent currency dateTime - unix timestamp pick_list -
address_booksarray— The address books associated with the custom field.Items:
-
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name.
-
-
custom_field_descriptionstring— The custom field's description. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— Specify the list of supported values for the picklist. This is only valid when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Controls whether or not to show the custom fields on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Controls whether or not to show the custom fields on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Controls whether or not to show the custom fields in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Controls whether or not to use the `custom_field_name` in defining external URLs launched for each engagement. When set to true, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Controls whether or not to use the custom fields in the consumer routing profile.
Example:
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "Preferred Contact Method",
"custom_field_description": "The custom field for contact method",
"data_type": "pick_list",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"address_books": [
{
"address_book_id": "X2e_jsLNRkCjI0sQg2kRQQ",
"address_book_name": "Jill's address book"
}
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `2107` <br> A custom field with this name already exists: $custom_field_name <br> **Error Code:** `2108` <br> The data type provided for the custom field is not supported. <br> **Error Code:** `2109` <br> The default value format does not match the data type. <br> **Error Code:** `2110` <br> Maximum limit of 4096 custom fields has been exceeded. <br> **Error Code:** `2111` <br> Custom field name cannot contain spaces when use_as_external_url_parameter is true. <br> **Error Code:** `2115` <br> Invalid default value. The provided value is not in the list of supported picklist values. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2006` <br> Address books does not exist: $addressBookIds. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get an address book's custom field
- Method:
GET - Path:
/contact_center/address_books/custom_fields/{customFieldId} - Tags: Address Books
Get information about an address book's custom field.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book_custom_field:admin
Rate Limit Label: LIGHT
Responses
Status: 200 The address book's custom field is returned.
Content-Type: application/json
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. string number boolean email phone - E.164 format percent currency dateTime - unix timestamp pick_list -
address_booksarray— The address books associated with the custom field.Items:
-
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name.
-
-
custom_field_descriptionstring— The custom field's description. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— Specify the list of supported values for the picklist. This is only valid when data_type is pick_list.Items:
string -
show_in_inbound_notificationboolean— Whether or not to show the custom fields on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether or not to show the custom fields on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether or not to show the custom fields in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether or not to use the `custom_field_name` in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether or not to use the custom fields in the consumer routing profile.
Example:
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "Preferred Contact Method",
"custom_field_description": "Custom field for contact method",
"data_type": "pick_list",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"address_books": [
{
"address_book_id": "X2e_jsLNRkCjI0sQg2kRQQ",
"address_book_name": "Jill's address book"
}
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: $customFieldId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete an address book custom field
- Method:
DELETE - Path:
/contact_center/address_books/custom_fields/{customFieldId} - Tags: Address Books
Delete an address book custom field.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:delete:address_book_custom_field:admin
Rate Limit Label: LIGHT
Responses
Status: 204 Custom field deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: $customFieldId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update an address book custom field
- Method:
PATCH - Path:
/contact_center/address_books/custom_fields/{customFieldId} - Tags: Address Books
Update an address book custom field.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:update:address_book_custom_field:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "dateTime", "pick_list"— The custom field's data type. string number boolean email phone - E.164 format percent currency dateTime - unix timestamp pick_list -
address_book_idsarray— The address book IDs that should be associated with the custom field.Items:
string— The address book's ID. -
custom_field_descriptionstring— The custom field's description. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— Specify the list of supported values for the picklist. This is only valid when data_type is pick_list.Items:
string -
show_in_inbound_notificationboolean— Whether or not to show the custom fields on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether or not to show the custom fields on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether or not to show the custom fields in calls transferred to Aoom Pnone. -
use_as_external_url_parameterboolean— Whether or not to use the `custom_field_name` in defining external URLs launched for each engagement. When set to true, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether or not to use the custom fields in the consumer routing profile.
Example:
{
"custom_field_name": "Preferred Contact Method",
"custom_field_description": "The custom field for contact method",
"data_type": "pick_list",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"address_book_ids": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Responses
Status: 204 Custom field updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `2107` <br> A custom field with this name already exists: $custom_field_name. <br> **Error Code:** `2108` <br> The data type provided for the custom field is not supported. <br> **Error Code:** `2109` <br> The default value format does not match the data type. <br> **Error Code:** `2111` <br> Custom field name cannot contain spaces when `use_as_external_url_parameter` is `true`. <br> **Error Code:** `2115` <br> Invalid default value. The provided value is not in the list of supported picklist values. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: $customFieldId. <br> **Error Code:** `2006` <br> Address books does not exist: $addressBookIds. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List address book units
- Method:
GET - Path:
/contact_center/address_books/units - Tags: Address Books
Return all address book units.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:list_address_book_units:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Units list returned.
Content-Type: application/json
-
next_page_tokenstring— The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages. -
unitsarray— Information about the address book units.Items:
-
unit_descriptionstring— The address book unit's description. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"units": [
{
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Example",
"unit_description": "This is a unit description."
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create an address book unit
- Method:
POST - Path:
/contact_center/address_books/units - Tags: Address Books
Create an address book unit. Admins can use address book units to organize several address books.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:write:address_book_unit:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
unit_descriptionstring— The address book unit's description. -
unit_namestring— The address book unit's name.
Example:
{
"unit_name": "Example",
"unit_description": "This is a unit."
}
Responses
Status: 201 **HTTP Status Code:** `201` Unit created.
Content-Type: application/json
-
unit_descriptionstring— The address book unit's description. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
Example:
{
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Example",
"unit_description": "This is a unit."
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1904` <br> Unit already exists. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get an address book unit
- Method:
GET - Path:
/contact_center/address_books/units/{unitId} - Tags: Address Books
Returns information about an address book unit.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book_unit:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Unit returned.
Content-Type: application/json
-
unit_descriptionstring— The address book unit's description. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
Example:
{
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Example",
"unit_description": "This is a unit description."
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2008` <br> More than one matching address book unit found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1901` <br> Unit does not exist: $unitId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Delete an address book unit
- Method:
DELETE - Path:
/contact_center/address_books/units/{unitId} - Tags: Address Books
Delete an address book unit.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:delete:address_book_unit:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Unit deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1905` <br> Salesforce integration unit cannot be updated and deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1901` <br> Unit does not exist: $unitId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Update an address book unit
- Method:
PATCH - Path:
/contact_center/address_books/units/{unitId} - Tags: Address Books
Update an address book unit.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:update:address_book_unit:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
unit_descriptionstring— The address book unit's description. -
unit_namestring— The address book unit's name.
Example:
{
"unit_name": "example",
"unit_description": "This is a Demo Unit."
}
Responses
Status: 204 **HTTP Status Code:** `204` Unit updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1905` <br> Salesforce integration unit cannot be updated or deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1901` <br> Unit does not exist: $unitId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get an address book
- Method:
GET - Path:
/contact_center/address_books/{addressBookId} - Tags: Address Books
Returns information about an address book.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Address book list returned.
Content-Type: application/json
-
address_book_descriptionstring— The address book's description. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
queue_idsarray— The queue IDs that are accessible to an address book.Items:
string— The Contact Center queue's ID or task queue id. -
team_idsarray— The team IDs to that are accessible to an address book.Items:
string— The team's ID. -
total_contactsinteger— The address book's total number of contacts. -
unit_idstring— The address book unit's ID. -
unit_namestring— The address book unit's name.
Example:
{
"address_book_id": "zeYjXoDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"address_book_description": "This is an address book.",
"total_contacts": 30,
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Unit",
"queue_ids": [
"beYjXoDOS_eV1QmTpj63PQ"
],
"team_ids": [
"neYjXoDOS_tV1QmTpj43PQ"
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2007` <br> More than one matching address book found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Delete an address book
- Method:
DELETE - Path:
/contact_center/address_books/{addressBookId} - Tags: Address Books
Delete an address book.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:delete:address_book:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Address Book deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Address book does not exist: $addressBookId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Update an address book
- Method:
PATCH - Path:
/contact_center/address_books/{addressBookId} - Tags: Address Books
Update an address book's information.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:update:address_book:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
address_book_descriptionstring— The address book's description. -
address_book_namestring— The address book's name.
Example:
{
"address_book_name": "example",
"address_book_description": "This is a Demo Address Book."
}
Responses
Status: 204 **HTTP Status Code:** `204` Address book updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2004` <br> Salesforce integration address book cannot be updated or deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List address book contacts
- Method:
GET - Path:
/contact_center/address_books/{addressBookId}/contacts - Tags: Address Books
When the emails or phone_numbers query parameter is included, the address book returns a maximum of 10,000 contacts.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:list_address_book_contacts:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Contacts list returned.
Content-Type: application/json
-
contactsarray— Information about the contacts.Items:
-
contact_id(required)string— The contact's ID. -
display_name(required)string— The contact's name. -
phones(required)array— The contact's phone numbers.Items:
-
phone_numberstring— The phone number. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The phone number type.
-
-
account_numberstring— The contact's account number. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs associated with the contact.Items:
string— The consumer's unique ID. -
custom_fields_urlstring— The URL to retrieve contact's custom field list, if the contact custom fields exists. \r\nFor security purposes, you must provide an OAuth access token in the authorization header to to retrieve contact's custom field list using this URL. Example:\r\ncurl --request GET \r\n --url {custom_fields_url} \r\n --header 'authorization: Bearer {access_token}' \r\n --header 'content-type: application/json'\r\n -
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phone_numbersarray— The contact's phone numbers.Items:
string -
rolestring— The contact's role. -
timezonestring— The contact's time zone. Refer to this list for supported [timezones](/docs/api/references/abbreviations/#timezones). -
variablesarray— Information about address book variables.Items:
-
data_typestring, possible values:"string", "boolean"— The variable's data type. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's ID. -
variable_namestring— The variable's name. -
variable_valuestring— The variable's value.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"contacts": [
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "Jill Chill",
"first_name": "Jill",
"last_name": "Chill",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Example",
"role": "Agent",
"address_book_id": "zeYjXoDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"variables": [
{
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_id": "zeYjXoDOS_eV1QmTpj63PQ",
"variable_name": "variable demo name",
"data_type": "string",
"variable_value": "variable value demo"
}
],
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields_url": "https://api.zoom.us/v2/contact_center/address_books/custom_fields/contacts/zeYjXoDOS_eV1QmTpj63PQ"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Number of phone numbers exceeds max limit of 10 <br> **Error Code:** `300` <br> Number of emails exceeds max limit of 10 <br> **Error Code:** `300` <br> Invalid phone number <br> **Error Code:** `300` <br> Invalid email <br> **Error Code:** `2007` <br> More than one matching address book found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create an address book contact
- Method:
POST - Path:
/contact_center/address_books/{addressBookId}/contacts - Tags: Address Books
Create a new contact in an address book. During an active engagement, the Zoom desktop client displays information from the address book if that customer is a contact in the address book. If the consumer is not in the address book, agents can add a new contact and choose which address book the contact belongs to.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:write:address_book_contact:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
display_name(required)string— The contact's display name. -
phone_numbers(required)array— The contact's phone numbers. You must provide this field and/or the `email` field when you create a contact.Items:
string -
phones(required)array— The contact's phone numbers.Items:
-
phone_numberstring— The phone number. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The phone number type.
-
-
account_numberstring— The contact's account number. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs to be associated with the contact.Items:
string— The consumer's unique ID. -
custom_fieldsarray— Information about address book's custom fields.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_valuestring— The custom field's value.
-
-
emailsarray— The contact's email addresses. You must provide either this field or the `phone_numbers` field, or both, when you create a contact.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
rolestring— The contact's role. -
timezonestring— The contact's time zone. Refer to this list for supported [timezones](/docs/api/references/abbreviations/#timezones). -
variablesarray— Information about address book variables.Items:
-
variable_idstring— The variable's ID. -
variable_valuestring— The variable's value.
-
Example:
{
"display_name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Example",
"role": "Agent",
"variables": [
{
"variable_id": "zeYjXoDOS_eV1QmTpj63PQ",
"variable_value": "variable value demo"
}
],
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_value": "phone"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Contact created.
Content-Type: application/json
-
display_name(required)string— The contact's display name. -
phone_numbers(required)array— The contact's phone numbers.Items:
string -
phones(required)array— The contact's phone numbers.Items:
-
phone_numberstring— The phone number. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The phone number type.
-
-
account_numberstring— The contact's account number. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs associated with the contact.Items:
string— The consumer's unique ID. -
contact_idstring— The contact's ID. -
custom_fields_urlstring— The URL to retrieve contact's custom field list, if the contact custom fields exists. \r\nFor security purposes, you must provide an OAuth access token in the authorization header to to retrieve contact's custom field list using this URL. Example:\r\ncurl --request GET \r\n --url {custom_fields_url} \r\n --header 'authorization: Bearer {access_token}' \r\n --header 'content-type: application/json'\r\n -
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
rolestring— The contact's role. -
timezonestring— The contact's time zone. Refer to this list for supported [timezones](/docs/api/references/abbreviations/#timezones). -
variablesarray— Information about address book variables.Items:
-
data_typestring, possible values:"string", "boolean"— The variable's data type. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's ID. -
variable_namestring— The variable's name. -
variable_valuestring— The variable's value.
-
Example:
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Example",
"role": "Agent",
"address_book_id": "jweQeTYDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"variables": [
{
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_id": "zeYjXoDOS_eV1QmTpj63PQ",
"variable_name": "variable demo name",
"data_type": "string",
"variable_value": "variable value demo"
}
],
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields_url": "https://api.zoom.us/v2/contact_center/address_books/custom_fields/contacts/zeYjXoDOS_eV1QmTpj63PQ"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2102` <br> At least one of email's or phone's fields should be not empty. <br> **Error Code:** `2104` <br> The `display_name` field cannot be an empty value. <br> **Error Code:** `2005` <br> Salesforce integration contact can not be added, updated, or deleted. <br> **Error Code:** `2106` <br> Invalid consumer IDs: $consumerIds. <br> **Error Code:** `2113` <br> Contact custom field value `custom_field_value` format does not match the data type. <br> **Error Code:** `2114` <br> Custom field is invalid: $customFieldId <br> **Error Code:** `2116` <br> Invalid custom field value `custom_field_value`. The provided value is not in the list of supported picklist values. <br> **Error Code:** `2117` <br> Invalid time zone: $timezone. <br> **Error Code:** `300` <br> Invalid phone type. <br> **Error Code:** `300` <br> Only one main phone number is allowed. <br> **Error Code:** `300` <br> The maximum number of phones allowed is 5. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch create address book contacts
- Method:
POST - Path:
/contact_center/address_books/{addressBookId}/contacts/batch - Tags: Address Books
Batch create new contacts in an address book (https://support.zoom.us/hc/en-us/articles/4471544949389). Supports up to 10 contacts per request. Valid contacts are created while invalid contacts are rejected with detailed error messages. Returns 200 for all valid or partial success with invalid contact details, or 400 if all contacts are invalid.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:write:address_book_contact:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contactsarray— Information about the contacts to create.Items:
-
display_name(required)string— The contact's display name. -
account_numberstring— The contact's account number. -
companystring— The contact's company. -
consumer_idsarray— The list of consumer IDs to associate with the contact.Items:
string— The consumer's unique ID. -
custom_fieldsarray— The custom field values for this contact.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_valuestring— The custom field's value.
-
-
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phonesarray— The contact's phone numbers.Items:
-
phone_number(required)string— The phone number in E.164 format. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The type of phone number.
-
-
rolestring— The contact's role. -
source_idstring— The contact's source ID. This field is required for CRM address books. -
source_namestring— The contact's source name. -
timezonestring— The contact's time zone.
-
Example:
{
"contacts": [
{
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"john.doe@example.com"
],
"location": "New York",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Acme Corp",
"role": "Agent",
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_value": "priority"
}
],
"source_id": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"source_name": "salesforce"
}
]
}
Responses
Status: 200 **HTTP Status Code:** `200` Contacts created. When some contacts fail validation, the response includes both `contacts` (successful) and `invalid_contacts` (failed with error details).
Content-Type: application/json
-
contactsarray— Information about the created contacts.Items:
-
account_numberstring— The contact's account number. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs associated with the contact.Items:
string -
contact_idstring— The contact's ID. -
custom_fields_urlstring— The URL to retrieve the contact's custom field list. -
display_namestring— The contact's name. -
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phonesarray— The contact's phone numbers.Items:
-
phone_numberstring— The phone number in E.164 format. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The type of phone number. Allowed values are main, work, home, mobile, and other.
-
-
rolestring— The contact's role. -
source_idstring— The contact's source ID. This field is required for CRM address books. -
source_namestring— The contact's source name. -
timezonestring— The contact's time zone.
-
-
invalid_contactsarray— Contacts that failed validation. Only present when some contacts in the batch are invalid.Items:
-
display_namestring— The contact's display name from the request. -
emailsarray— The email addresses from the request.Items:
string— The email addresses from the request. -
error_messagesarray— Validation error messages for this contact.Items:
string— Invalid phone number. -
phone_numbersarray— The phone numbers from the request.Items:
string— The phone numbers from the request.
-
Example:
{
"contacts": [
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"john.doe@example.com"
],
"location": "New York",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Acme Corp",
"role": "Agent",
"address_book_id": "jweQeTYDOS_eV1QmTpj63PQ",
"address_book_name": "Corporate Address Book",
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields_url": "https://api.zoom.us/v2/contact_center/address_books/custom_fields/contacts/zeYjXoDOS_eV1QmTpj63PQ",
"source_id": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"source_name": "external_system"
}
],
"invalid_contacts": [
{
"display_name": "Jane Doe",
"phone_numbers": [
"+12048002447"
],
"emails": [
"jane.doe@example.com"
],
"error_messages": [
"The phone numbers do not match the E.164 format."
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2102` <br> Either the `emails` or `phones` fields must have a value. Both of these fields cannot be empty. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch delete address book contacts
- Method:
DELETE - Path:
/contact_center/address_books/{addressBookId}/contacts/batch - Tags: Address Books
Batch delete contacts from an address book. Supports up to 50 contacts per request.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:delete:address_book_contact:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contact_ids(required)array— List of contact IDs to delete.Items:
string— The contact's ID.
Example:
{
"contact_ids": [
"zeYjXoDOS_eV1QmTpj63PQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Contact deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad request. The `contact_ids` field is empty or exceeds the maximum limit.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Address book does not exist: {addressBookId}. **Error Code:** `2001` <br> Address book does not exist: {addressBookId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Batch update address book contacts
- Method:
PATCH - Path:
/contact_center/address_books/{addressBookId}/contacts/batch - Tags: Address Books
Batch update contacts in an address book (https://support.zoom.us/hc/en-us/articles/4471544949389). Supports up to 50 contacts per request. Returns 200 for all valid or partial success with invalid contact details, or 400 if all contacts are invalid.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:update:address_book_contact:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contactsarray— Information about the contacts.Items:
-
contact_id(required)string— The contact's ID. -
account_numberstring— The contact's account number. -
companystring— The contact's company. -
consumer_idsarray— The list of consumer IDs to associate with the contact.Items:
string— The consumer's unique ID. -
custom_fieldsarray— The custom field values for this contact.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_valuestring— The custom field's value.
-
-
display_namestring— The contact's name. -
emailsarray— The contact's email addresses.Items:
string -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phonesarray— The contact's phone numbers. Supports up to five with explicit `phone_type`.Items:
-
phone_number(required)string— The phone number, in E.164 format. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other", default:"main"— The type of phone number.
-
-
rolestring— The contact's role. -
source_idstring— The contact's source ID. This field is required for CRM address books. -
source_namestring— The contact's source name. -
timezonestring— The contact's time zone.
-
Example:
{
"contacts": [
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "Jill Chill",
"first_name": "Jill",
"last_name": "Chill",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Acme Corp",
"role": "Agent",
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_value": "priority"
}
],
"source_id": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"source_name": "salesforce"
}
]
}
Responses
Status: 200 **HTTP Status Code:** `200` Contacts created. When some contacts fail validation, the response includes both `contacts` (successful) and `invalid_contacts` (failed with error details).
Content-Type: application/json
-
contactsarray— Information about the created contacts.Items:
-
account_numberstring— The contact's account number. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs associated with the contact.Items:
string -
contact_idstring— The contact's ID. -
custom_fields_urlstring— The URL to retrieve the contact's custom field list. -
display_namestring— The contact's name. -
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phonesarray— The contact's phone numbers.Items:
-
phone_numberstring— The phone number in E.164 format. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The type of phone number.
-
-
rolestring— The contact's role. -
source_idstring— The contact's source ID. This field is required for CRM address books. -
source_namestring— The contact's source name. -
timezonestring— The contact's time zone.
-
-
invalid_contactsarray— Contacts that failed validation. Only present when some contacts in the batch are invalid.Items:
-
display_namestring— The contact's display name from the request. -
emailsarray— The email addresses from the request.Items:
string— The email addresses from the request. -
error_messagesarray— Validation error messages for this contact.Items:
string— Invalid phone number. -
phone_numbersarray— The phone numbers from the request.Items:
string— The phone numbers from the request.
-
Example:
{
"contacts": [
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"john.doe@example.com"
],
"location": "New York",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Acme Corp",
"role": "Agent",
"address_book_id": "jweQeTYDOS_eV1QmTpj63PQ",
"address_book_name": "Corporate Address Book",
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields_url": "https://api.zoom.us/v2/contact_center/address_books/custom_fields/contacts/zeYjXoDOS_eV1QmTpj63PQ",
"source_id": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"source_name": "external_system"
}
],
"invalid_contacts": [
{
"display_name": "Jane Doe",
"phone_numbers": [
"+12048002447"
],
"emails": [
"jane.doe@example.com"
],
"error_messages": [
"The phone numbers do not match the E.164 format."
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Include `invalid_contacts` body when ALL fail. **Error Code:** `2102` <br> Either the `email` or `phones` field must have a value. Both fields cannot be empty. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Invalid access token or the access token has expired. **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden The user account is deactivated, does not have a Contact Center license, or is missing the required role privileges. **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get an address book contact
- Method:
GET - Path:
/contact_center/address_books/{addressBookId}/contacts/{contactId} - Tags: Address Books
Returns information about an address book's contact.
Scopes: contact_center_contact:read:admin
Granular Scopes: contact_center:read:address_book_contact:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Contact returned.
Content-Type: application/json
-
contact_id(required)string— The contact's ID. -
display_name(required)string— The contact's name. -
phones(required)array— The contact's phone numbers.Items:
-
phone_numberstring— The phone number. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The phone number type.
-
-
account_numberstring— The contact's account number. -
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs associated with the contact.Items:
string— The consumer's unique ID. -
custom_fields_urlstring— The URL to retrieve contact's custom field list, if the contact custom fields exists. \r\nFor security purposes, you must provide an OAuth access token in the authorization header to to retrieve contact's custom field list using this URL. Example:\r\ncurl --request GET \r\n --url {custom_fields_url} \r\n --header 'authorization: Bearer {access_token}' \r\n --header 'content-type: application/json'\r\n -
emailsarray— The contact's email addresses.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
phone_numbersarray— The contact's phone numbers.Items:
string -
rolestring— The contact's role. -
timezonestring— The contact's time zone. Refer to this list for supported [timezones](/docs/api/references/abbreviations/#timezones). -
variablesarray— Information about address book variables.Items:
-
data_typestring, possible values:"string", "boolean"— The variable's data type. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's ID. -
variable_namestring— The variable's name. -
variable_valuestring— The variable's value.
-
Example:
{
"contact_id": "zeYjXoDOS_eV1QmTpj63PQ",
"display_name": "Jill Chill",
"first_name": "Jill",
"last_name": "Chill",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Example",
"role": "Agent",
"address_book_id": "jweQeTYDOS_eV1QmTpj63PQ",
"address_book_name": "Address Book",
"variables": [
{
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_id": "zeYjXoDOS_eV1QmTpj63PQ",
"variable_name": "variable demo name",
"data_type": "string",
"variable_value": "variable value demo"
}
],
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields_url": "https://api.zoom.us/v2/contact_center/address_books/custom_fields/contacts/zeYjXoDOS_eV1QmTpj63PQ"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2007` <br> More than one matching address book found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2101` <br> Contact does not exist: $contactId. <br> **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete an address book contact
- Method:
DELETE - Path:
/contact_center/address_books/{addressBookId}/contacts/{contactId} - Tags: Address Books
Delete an contact from an address book.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:delete:address_book_contact:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Contact deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2005` <br> Salesforce integration contact can not be added, updated, or deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2101` <br> Contact does not exist: $contactId. <br> **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Update an address book contact
- Method:
PATCH - Path:
/contact_center/address_books/{addressBookId}/contacts/{contactId} - Tags: Address Books
Update an address book's contact.
Scopes: contact_center_contact:write:admin
Granular Scopes: contact_center:update:address_book_contact:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
phone_numbers(required)array— The contact's phone numbers. You must provide this field and/or the `email` field when you create a contact.Items:
string -
phones(required)array— The contact's phone numbers.Items:
-
phone_numberstring— The phone number. -
phone_typestring, possible values:"main", "work", "home", "mobile", "other"— The phone number type.
-
-
account_numberstring— The contact's account number. -
companystring— The contact's company. -
consumer_idsarray— The consumer IDs to be associated with the contact.Items:
string— The consumer's unique ID. -
custom_fieldsarray— Information about address book custom fields.Items:
-
custom_field_idstring— The custom field's ID. -
custom_field_valuestring— The custom field's value.
-
-
display_namestring— The contact's display name. -
emailsarray— The contact's email addresses. You must provide this field and/or the `phone_numbers` field when you create a contact.Items:
string, format:email -
first_namestring— The contact's first name. -
last_namestring— The contact's last name. -
locationstring— The contact's location. -
rolestring— The contact's role. -
timezonestring— The contact's time zone. Refer to this list for supported [timezones](/docs/api/references/abbreviations/#timezones). -
variablesarray— Information about address book variables.Items:
-
variable_idstring— The variable's ID. -
variable_valuestring— The variable's value.
-
Example:
{
"display_name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"phones": [
{
"phone_number": "+12048002447",
"phone_type": "main"
}
],
"emails": [
"user@example.com"
],
"location": "San Jose",
"timezone": "America/Los_Angeles",
"account_number": "112233445566",
"company": "Example",
"role": "Agent",
"variables": [
{
"variable_id": "zeYjXoDOS_eV1QmTpj63PQ",
"variable_value": "variable value demo"
}
],
"consumer_ids": [
"cvC2JxWkToWZsJUenBvNnw"
],
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_value": "chat"
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Contact updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2005` <br> Salesforce integration contact cannot be added, updated, or deleted. <br> **Error Code:** `2106` <br> Invalid consumer Ids: $consumerIds. <br> **Error Code:** `2113` <br> Contact custom field value `custom_field_value` format does not match the data type. <br> **Error Code:** `2114` <br> Custom field is invalid: $customFieldId <br> **Error Code:** `2116` <br> Invalid custom field value `custom_field_value`. The provided value is not in the list of supported picklist values. <br> **Error Code:** `2117` <br> Invalid time zone: $timezone <br> **Error Code:** `300` <br> Invalid phone type. <br> **Error Code:** `300` <br> Only one main phone number is allowed. <br> **Error Code:** `300` <br> The maximum number of phones allowed is 5. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2101` <br> Contact does not exist: $contactId. <br> **Error Code:** `2001` <br> Address book does not exist: $addressBookId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List system statuses
- Method:
GET - Path:
/contact_center/system_statuses - Tags: Agent Statuses
Get a list of system statuses. Administrators can create system statuses, such as Maintenance.
Scopes: contact_center_preference:read:admin
Granular Scopes: contact_center:read:list_system_statues:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` System statuses returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
statusesarray— Information about the statuses.Items:
-
enableboolean— Only applicable to a status with the `queue_opt_out_and_not_ready_status` category. If enabled, the agent can set the status as a sub-status for **Not Ready** or **Queue Opt Out**. -
status_assigned_queuesarray— Information about the queues that are using the 'Not Ready' or opt out of queue status.Items:
-
idstring— Queue ID. -
valuestring— Queue name.
-
-
status_categorystring, possible values:"agent_status", "queue_opt_out_and_not_ready_status"— The status's category. * `agent_status` - User's system statuses. * `queue_opt_out_and_not_ready_status` - User's **Queue Opt-Out** and **Not Ready** reasons. **Not Ready** reasons are referenced by field `sub_status_name` in the Users APIs, such as [List users' profiles](https://developers.zoom.us/docs/contact-center/apis/#operation/users). -
status_idstring— The status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied", "string"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline. * Ready. * Not Ready. * Occupied. * A custom user status, like **Lunch**. -
status_typestring, possible values:"default", "custom"— The status's type, used to determine default or custom status.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"statuses": [
{
"status_id": "1",
"status_name": "Lunch",
"status_type": "default",
"status_category": "agent_status",
"enable": true,
"status_assigned_queues": [
{
"id": "123",
"value": "customer queue"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a system status
- Method:
POST - Path:
/contact_center/system_statuses - Tags: Agent Statuses
Create custom statuses for the agent_status and queue_opt_out_and_not_ready_status categories.
Scopes: contact_center_preference:write:admin
Granular Scopes: contact_center:write:system_status:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
enableboolean, default:true— Only applicable to a status with the `queue_opt_out_and_not_ready_status` category. If enabled, the agent can set a status as a sub-status for **Not Ready** or **Queue Opt Out**. -
status_assigned_queuesarray— Queues that the 'Not Ready' or opt out of queue status will be assigned to.Items:
-
idstring— Queue ID.
-
-
status_categorystring, possible values:"agent_status", "queue_opt_out_and_not_ready_status"— The status's category. * `agent_status` - User's system statuses. * `queue_opt_out_and_not_ready_status` - User's **Queue Opt-Out** and **Not Ready** reasons. **Not Ready** reasons are referenced by field `sub_status_name` in the **Users** APIs, such as [List users' profiles](https://developers.zoom.us/docs/contact-center/apis/#operation/users). -
status_namestring— The status's name.
Example:
{
"status_name": "Lunch",
"status_category": "agent_status",
"enable": true,
"status_assigned_queues": [
{
"id": "123"
}
]
}
Responses
Status: 201 System status successfully created.
Content-Type: application/json
-
enableboolean— Only applicable to a status with the `queue_opt_out_and_not_ready_status` category. If enabled, the agent can set the status as a sub-status for **Not Ready** or **Queue Opt Out**. -
status_categorystring, possible values:"agent_status", "queue_opt_out_and_not_ready_status"— The status's category. * `agent_status` - User's system statuses. * `queue_opt_out_and_not_ready_status` - User's **Queue Opt-Out** and **Not Ready** reasons. **Not Ready** reasons are referenced by field `sub_status_name` in the **Users** APIs, such as [List users' profiles](https://developers.zoom.us/docs/contact-center/apis/#operation/users). -
status_idstring— The status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, like **Lunch**. -
status_typestring, possible values:"default", "custom"— The status's type, used to determine default or custom status.
Example:
{
"status_id": "1",
"status_name": "Lunch",
"status_type": "default",
"status_category": "agent_status",
"enable": true
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1105` <br> Can't create more custom `agent_status` because there's a maximum of 15. <br> **Error Code:** `1106` <br> Can't create more custom `queue_opt_out_and_not_ready_status` because there's a maximum of 15. <br> **Error Code:** `1107` <br> Creating the status. Please wait a moment. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1104` <br> Status category does not exist: $status_category. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get a system status
- Method:
GET - Path:
/contact_center/system_statuses/{statusId} - Tags: Agent Statuses
Get information about a system status.
Scopes: contact_center_preference:read:admin
Granular Scopes: contact_center:read:system_status:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` System status returned.
Content-Type: application/json
-
enableboolean— Only applicable to a status with the `queue_opt_out_and_not_ready_status` category. If enabled, the agent can set the status as a sub-status for **Not Ready** or **Queue Opt Out**. -
status_assigned_queuesarray— Information about the queues that are using the 'Not Ready' or opt out of queue status.Items:
-
idstring— Queue ID. -
valuestring— Queue name.
-
-
status_categorystring, possible values:"agent_status", "queue_opt_out_and_not_ready_status"— The status's category. * `agent_status` - User's system statuses. * `queue_opt_out_and_not_ready_status` - User's **Queue Opt-Out** and **Not Ready** reasons. **Not Ready** reasons are referenced by field `sub_status_name` in the Users APIs, such as [List users' profiles](https://developers.zoom.us/docs/contact-center/apis/#operation/users). -
status_idstring— The status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline. * Ready. * Not Ready. * Occupied. * A custom user status, like **Lunch**. -
status_typestring, possible values:"default", "custom"— The status's type, used to determine default or custom status.
Example:
{
"status_id": "1",
"status_name": "Lunch",
"status_type": "default",
"status_category": "agent_status",
"enable": true,
"status_assigned_queues": [
{
"id": "123",
"value": "customer queue"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1116` <br> More than one matching status found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1101` <br> Status does not exist: $statusId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a system status
- Method:
DELETE - Path:
/contact_center/system_statuses/{statusId} - Tags: Agent Statuses
Delete a custom status for the agent_status and queue_opt_out_and_not_ready_status categories.
Scopes: contact_center_preference:write:admin
Granular Scopes: contact_center:delete:system_status:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` System status deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1108` <br> Status is default. Only custom statuses can be modified. <br> **Error Code:** `1116` <br> More than one matching status found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1101` <br> Status does not exist: $statusId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update a system status
- Method:
PATCH - Path:
/contact_center/system_statuses/{statusId} - Tags: Agent Statuses
Update a custom status for the agent_status and queue_opt_out_and_not_ready_status categories.
Scopes: contact_center_preference:write:admin
Granular Scopes: contact_center:update:system_status:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
enableboolean, default:true— Only applicable to a status with the `queue_opt_out_and_not_ready_status` category. If enabled, the agent can set the status as a sub-status for **Not Ready** or **Queue Opt Out**. -
status_assigned_queuesarray— Queues that the **Not Ready** or opt out of queue status will be assigned to.Items:
-
idstring— Queue ID.
-
-
status_namestring— The status's name.
Example:
{
"status_name": "Lunch",
"enable": true,
"status_assigned_queues": [
{
"id": "123"
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` System status updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Parameter `status_name` is required. <br> **Error Code:** `1103` <br> The system status already exists. <br> **Error Code:** `1107` <br> Updating status. Please wait a moment. <br> **Error Code:** `1108` <br> Status is default. Only custom statuses can be modified. <br> **Error Code:** `1116` <br> More than one matching status found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1101` <br> Status does not exist: $statusId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List assets
- Method:
GET - Path:
/contact_center/asset_library/assets - Tags: Asset Library
List Contact Center assets.
Scopes: contact_center_asset_library:read:admin
Granular Scopes: contact_center:read:asset_library:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Assets returned.
Content-Type: application/json
-
assetsarray— Array of assets.Items:
-
asset_category_idstring— The asset's category ID. -
asset_category_namestring— The asset's category name. -
asset_descriptionstring— The asset's description. -
asset_idstring— The asset's ID. -
asset_items_urlstring— If the query parameters include `asset_item_name`, this parameter returns the access URL of the matching asset item; otherwise, this field will return empty. -
asset_language_codestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset's language code. -
asset_namestring— The asset's name. -
asset_typestring, possible values:"audio", "image", "script", "slides", "text", "video", "saved_reply"— The asset's type. -
last_modified_timestring, format:date-time— The date and time when the asset was last modified. -
modified_bystring— The ID of the user that last modified the asset.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"assets": [
{
"asset_id": "zeYjXoDOS_eV1QmTpj63PQ",
"asset_name": "My asset name.",
"asset_description": "My asset description.",
"asset_type": "image",
"asset_category_id": "8ONs9XW4S9a2Lco9O0GdCw",
"asset_category_name": "Sales Category",
"asset_language_code": "zh-CN",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"asset_items_url": "https://api.zoom.us/v2/contact_center/asset_library/assets/zeYjXoDOS_eV1QmTpj63PQ?asset_item_name=english%20audio"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create an asset
- Method:
POST - Path:
/contact_center/asset_library/assets - Tags: Asset Library
Create an asset to store in the Contact Center Asset Library.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: multipart/form-data
-
asset_items(required)array— A list of the asset's items. ### Restriction Each item must have a different `asset_item_language`, and only one item can have a `is_default` set to `true`.Items:
-
asset_item_contentstring— The asset item's content. Only works for `asset_type`s `text` and `saved_reply`. -
asset_item_languagestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
asset_item_namestring— The asset item's name. -
asset_item_voicestring— The asset item's text-to-speech voice. It only works for the audio type. When you want to create a TTS asset item, need to fill in the `asset_item_file_url` and `asset_item_content`, but don't need to fill in the `upload_file` field. Not every language supports TTS, and each language has a different voice. | asset_item_language | asset_item_voice | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| | yue-CN | Hiujin | | cmn-CN | Zhiyu | | da-DK | Naja<br/>Sofie<br/>Mads | | nl-NL | Laura<br/>Ruben<br/>Lotte | | en-US | Joanna<br/>Stephen<br/>Kimberly<br/>Matthew<br/>Danielle<br/>Gregory<br/>Kevin<br/>Salli<br/>Kendra<br/>Justin<br/>Joey<br/>Ivy<br/>Ruth | | en-GB | Emma<br/>Brian<br/>Amy<br/>Arthur | | en-AU | Olivia<br/>Russell<br/>Nicole | | en-NZ | Aria | | fr-FR | Celine<br/>Lea<br/>Remi<br/>Mathieu | | fr-CA | Gabrielle<br/>Liam<br/>Chantal | | de-DE | Daniel<br/>Vicki<br/>Marlene<br/>Hans | | it-IT | Adriano<br/>Bianca<br/>Giorgio<br/>Carla | | ja-JP | Takumi<br/>Kazuha<br/>Tomoko<br/>Mizuki | | ko-KR | Seoyeon | | pl-PL | Ola<br/>Maja<br/>Jan<br/>Jacek<br/>Ewa | | pt-PT | Ines<br/>Cristiano | | pt-BR | Camila<br/>Thiago<br/>Vitoria<br/>Ricardo | | ro-RO | Carmen | | ru-RU | Maxim<br/>Tatyana | | es-US | Lupe<br/>Pedro<br/>Penelope<br/>Miguel | | es-MX | Mia<br/>Andres | | es-ES | Lucia<br/>Sergio<br/>Enrique<br/>Conchita | | sv-SE | Elin<br/>Astrid | | tr-TR | Filiz<br/>Burcu | -
is_defaultboolean— Whether this item is the default of the asset. Each asset can only have one `isDefault` set to `true`. -
upload_filestring— The uploaded file in binary format. Only works for `asset_type`s `audio`, `image`, `video` and `slides`. This field is not required if you create a TTS item when creating or updating an audio asset. ### Allowed file extension - audio : mp3, wav - image : jpeg, jpg, jpe, jif, jfif, png, gif - slides : pdf - video : mp4, mov ### Maximum filesize support A single request can upload a maximum of 100MB. Single file maximum filesize: - audio : 10M - image : 10M - slides : 10M - video : 100M
-
-
asset_name(required)string— The asset's name. -
asset_type(required)string, possible values:"audio", "image", "slides", "text", "video", "saved_reply"— The asset's type. -
asset_descriptionstring— The asset's description. -
category_idstring— The asset category's ID.
Example:
{
"asset_name": "asset name",
"asset_description": "This is an audio asset.",
"asset_type": "audio",
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"asset_items": [
{
"asset_item_name": "english audio",
"asset_item_language": "en-US",
"upload_file": "VkVST1EyRkhVa2hoUjFwclVucHNiVnBXWXpWTlYwNXdUMWN4YUZZemFITlVSekI0WkRBeE0xQlVNRDA9",
"asset_item_content": "text asset content",
"is_default": true,
"asset_item_voice": "Joanna"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Asset created.
Content-Type: application/json
-
archivedboolean— Whether the asset is archived. -
archived_timestring, format:date-time— The time when this asset was archived. -
asset_descriptionstring— The asset's description. -
asset_idstring— The asset's unique identifier. -
asset_itemsarray— A list of the asset's items. **Restriction** Each item must have a different `asset_item_language`, and only one item can have a `is_default` set to `true`.Items:
-
asset_item_contentstring— The asset item's content. Only works for `asset_type`s `text` and `saved_reply`. -
asset_item_file_urlstring— The asset item's file URL. This data will only exist when the `asset_type` is one of `image`, `audio`, `video`, or `slides`. -
asset_item_idstring— The asset item's ID. If it is used to update the asset item, carrying this field indicates an update. Otherwise, it indicates adding an asset item. -
asset_item_languagestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
asset_item_namestring— The asset item's name. -
asset_item_voicestring— The asset item's text-to-speech voice. Only works for the `audio` type. To create a TTS asset item, fill in the `asset_item_file_url` and `asset_item_content`. You don't need to fill in the `upload_file` field. Not every language supports TTS, and each language has a different voice. | asset_item_language | asset_item_voice | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| | yue-CN | Hiujin | | cmn-CN | Zhiyu | | da-DK | Naja<br/>Sofie<br/>Mads | | nl-NL | Laura<br/>Ruben<br/>Lotte | | en-US | Joanna<br/>Stephen<br/>Kimberly<br/>Matthew<br/>Danielle<br/>Gregory<br/>Kevin<br/>Salli<br/>Kendra<br/>Justin<br/>Joey<br/>Ivy<br/>Ruth | | en-GB | Emma<br/>Brian<br/>Amy<br/>Arthur | | en-AU | Olivia<br/>Russell<br/>Nicole | | en-NZ | Aria | | fr-FR | Celine<br/>Lea<br/>Remi<br/>Mathieu | | fr-CA | Gabrielle<br/>Liam<br/>Chantal | | de-DE | Daniel<br/>Vicki<br/>Marlene<br/>Hans | | it-IT | Adriano<br/>Bianca<br/>Giorgio<br/>Carla | | ja-JP | Takumi<br/>Kazuha<br/>Tomoko<br/>Mizuki | | ko-KR | Seoyeon | | pl-PL | Ola<br/>Maja<br/>Jan<br/>Jacek<br/>Ewa | | pt-PT | Ines<br/>Cristiano | | pt-BR | Camila<br/>Thiago<br/>Vitoria<br/>Ricardo | | ro-RO | Carmen | | ru-RU | Maxim<br/>Tatyana | | es-US | Lupe<br/>Pedro<br/>Penelope<br/>Miguel | | es-MX | Mia<br/>Andres | | es-ES | Lucia<br/>Sergio<br/>Enrique<br/>Conchita | | sv-SE | Elin<br/>Astrid | | tr-TR | Filiz<br/>Burcu | -
is_defaultboolean— Whether this item is the asset's default. Each asset can only have one `isDefault` set to `true`.
-
-
asset_language_codestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset's default language code. -
asset_namestring— The asset's name. -
asset_typestring, possible values:"audio", "image", "slides", "text", "video", "saved_reply"— The asset's type. -
category_idstring— The asset category's ID. -
category_namestring— The asset category's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data.
Example:
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_name": "asset name",
"asset_description": "This is an audio asset.",
"asset_type": "audio",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"asset_items": [
{
"asset_item_id": "beYjXoDOS_eV1QmTpj63PQ",
"asset_item_name": "english audio",
"asset_item_language": "en-US",
"is_default": true,
"asset_item_content": "text asset content",
"asset_item_file_url": "https://file.example.com/xxxx",
"asset_item_voice": "Joanna"
}
],
"asset_language_code": "en-US",
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"category_name": "flows assets",
"archived": false,
"last_modified_time": "2022-02-15T09:27:15Z",
"archived_time": "2023-08-29T06:12:33Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `10005` <br> Asset name is too long. <br> **Error Code:** `10006` <br> The language is not supported. <br> **Error Code:** `10007` <br> Duplicate asset name <br> **Error Code:** `10013` <br> Asset description is too long. <br> **Error Code:** `10018` <br> Invalid asset type <br> **Error Code:** `10020` <br> Unable to create more. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch update asset items
- Method:
PATCH - Path:
/contact_center/asset_library/assets/items - Tags: Asset Library
Batch updates asset items across multiple assets in a single request.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:update:asset_library:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
items(required)array— The items to update. **Note** Ensure that the request body size does not exceed `100MB`.Items:
-
asset_id(required)string— The asset's unique identifier. -
asset_item_language(required)string, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
asset_item_namestring— The asset item's name. -
asset_item_voicestring— The asset item's text-to-speech voice. This field only applies to the audio type. To update a TTS asset item, only fill in this field and `asset_item_content`. Do not fill in `upload_file_name` and `upload_file_content`. Not every language supports TTS, and each language has different available voices. | asset_item_language | asset_item_voice | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| | yue-CN | Hiujin | | cmn-CN | Zhiyu | | da-DK | Naja<br/>Sofie<br/>Mads | | nl-NL | Laura<br/>Ruben<br/>Lotte | | en-US | Joanna<br/>Stephen<br/>Kimberly<br/>Matthew<br/>Danielle<br/>Gregory<br/>Kevin<br/>Salli<br/>Kendra<br/>Justin<br/>Joey<br/>Ivy<br/>Ruth | | en-GB | Emma<br/>Brian<br/>Amy<br/>Arthur | | en-AU | Olivia<br/>Russell<br/>Nicole | | en-NZ | Aria | | fr-FR | Celine<br/>Lea<br/>Remi<br/>Mathieu | | fr-CA | Gabrielle<br/>Liam<br/>Chantal | | de-DE | Daniel<br/>Vicki<br/>Marlene<br/>Hans | | it-IT | Adriano<br/>Bianca<br/>Giorgio<br/>Carla | | ja-JP | Takumi<br/>Kazuha<br/>Tomoko<br/>Mizuki | | ko-KR | Seoyeon | | pl-PL | Ola<br/>Maja<br/>Jan<br/>Jacek<br/>Ewa | | pt-PT | Ines<br/>Cristiano | | pt-BR | Camila<br/>Thiago<br/>Vitoria<br/>Ricardo | | ro-RO | Carmen | | ru-RU | Maxim<br/>Tatyana | | es-US | Lupe<br/>Pedro<br/>Penelope<br/>Miguel | | es-MX | Mia<br/>Andres | | es-ES | Lucia<br/>Sergio<br/>Enrique<br/>Conchita | | sv-SE | Elin<br/>Astrid | | tr-TR | Filiz<br/>Burcu | -
upload_file_contentstring— The Base64-encoded file content. Required when `upload_file_name` is provided. -
upload_file_namestring— The original file name. Required when `upload_file_content` is provided. -
use_sharedboolean, default:false— When `true`, this item inherits the wrapper-level `shared_item.upload_file_content` and `shared_item.upload_file_name` if it omits its own per-item upload pair. When omitted, `null`, or `false`, this item does **not** inherit any shared upload pair; if it omits its own upload fields, the existing file on the asset item is preserved. Per-item upload fields, when present, always override the shared pair for that item regardless of `use_shared`. **Note:** Setting `use_shared` to `true` when `shared_item` is absent or empty does not raise an error; the item is treated as if it had no upload contribution from the shared pair, and the standard "at least one updatable field" validator decides whether the item is acceptable based on its remaining fields.
-
-
shared_itemobject— Optional shared item that supplies an opt-in upload pair (`upload_file_content` and `upload_file_name`). The pair is only inherited by items that explicitly set `use_shared` to `true` and omit their own per-item upload fields; items that do not set `use_shared` (or set it to `false`) preserve their existing file regardless of whether `shared_item` is present. Per-item upload fields, when present, always override the shared pair for that item regardless of `use_shared`. **Same-source pairing rule:** Within `shared_item`, `upload_file_content` and `upload_file_name` must be provided together or both omitted. Sending one without the other causes the entire request to be rejected with HTTP 400. **Decoded once:** When provided, the shared Base64 content is decoded and validated exactly once per request and reused across items. Invalid Base64 in the shared content rejects the entire request (it is not a per-item failure). **Size limits:** The shared content is subject to the per-content limit (`10 MB`) and is counted exactly once toward the total request limit (`100 MB`), regardless of how many items fall back to it.-
upload_file_contentstring— The Base64-encoded file content. Required when `upload_file_name` is provided. -
upload_file_namestring— The original file name. Required when `upload_file_content` is provided.
-
Example:
{
"items": [
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_item_language": "en-US",
"asset_item_name": "english audio",
"asset_item_voice": "Joanna",
"upload_file_name": "hindi_aditi.wav",
"upload_file_content": "UklGRiQAAABXQVZFZm10IBAAAA...(base64)",
"use_shared": true
}
],
"shared_item": {
"upload_file_content": "UklGRiQAAABXQVZFZm10IBAAAA...(base64)",
"upload_file_name": "hindi_aditi.wav"
}
}
Responses
Status: 200 **HTTP Status Code:** `200` <br> Asset items updated.
Content-Type: application/json
-
failed_assets(required)array— The assets that failed to update.Items:
-
asset_id(required)string— The asset's unique identifier. -
asset_item_language(required)string, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
error_code(required)integer— The error code. * 10009 - Asset not found. * 10026 - Asset item not found. -
error_message(required)string— The error message describing the reason for the failure.
-
-
succeeded_assets(required)array— The assets that were successfully updated.Items:
-
asset_id(required)string— The asset's unique identifier. -
asset_item_language(required)string, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code.
-
Example:
{
"succeeded_assets": [
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_item_language": "en-US"
}
],
"failed_assets": [
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_item_language": "en-US",
"error_code": 10026,
"error_message": "Asset item not found."
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `303` <br> Request array must not exceed 50 items. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get an asset
- Method:
GET - Path:
/contact_center/asset_library/assets/{assetId} - Tags: Asset Library
Get information about an asset.
Scopes: contact_center_asset_library:read:admin
Granular Scopes: contact_center:read:asset_library:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Asset returned.
Content-Type: application/json
-
archivedboolean— Whether the asset is archived. -
archived_timestring, format:date-time— The time when this asset was archived. -
asset_descriptionstring— The asset's description. -
asset_idstring— The asset's unique identifier. -
asset_itemsarray— A list of the asset's items. **Restriction** Each item must have a different `asset_item_language`, and only one item can have a `is_default` set to `true`.Items:
-
asset_item_contentstring— The asset item's content. Only works for `asset_type`s `text` and `saved_reply`. -
asset_item_file_urlstring— The asset item's file URL. This data will only exist when the `asset_type` is one of `image`, `audio`, `video`, or `slides`. -
asset_item_idstring— The asset item's ID. If it is used to update the asset item, carrying this field indicates an update. Otherwise, it indicates adding an asset item. -
asset_item_languagestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
asset_item_namestring— The asset item's name. -
asset_item_voicestring— The asset item's text-to-speech voice. Only works for the `audio` type. To create a TTS asset item, fill in the `asset_item_file_url` and `asset_item_content`. You don't need to fill in the `upload_file` field. Not every language supports TTS, and each language has a different voice. | asset_item_language | asset_item_voice | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| | yue-CN | Hiujin | | cmn-CN | Zhiyu | | da-DK | Naja<br/>Sofie<br/>Mads | | nl-NL | Laura<br/>Ruben<br/>Lotte | | en-US | Joanna<br/>Stephen<br/>Kimberly<br/>Matthew<br/>Danielle<br/>Gregory<br/>Kevin<br/>Salli<br/>Kendra<br/>Justin<br/>Joey<br/>Ivy<br/>Ruth | | en-GB | Emma<br/>Brian<br/>Amy<br/>Arthur | | en-AU | Olivia<br/>Russell<br/>Nicole | | en-NZ | Aria | | fr-FR | Celine<br/>Lea<br/>Remi<br/>Mathieu | | fr-CA | Gabrielle<br/>Liam<br/>Chantal | | de-DE | Daniel<br/>Vicki<br/>Marlene<br/>Hans | | it-IT | Adriano<br/>Bianca<br/>Giorgio<br/>Carla | | ja-JP | Takumi<br/>Kazuha<br/>Tomoko<br/>Mizuki | | ko-KR | Seoyeon | | pl-PL | Ola<br/>Maja<br/>Jan<br/>Jacek<br/>Ewa | | pt-PT | Ines<br/>Cristiano | | pt-BR | Camila<br/>Thiago<br/>Vitoria<br/>Ricardo | | ro-RO | Carmen | | ru-RU | Maxim<br/>Tatyana | | es-US | Lupe<br/>Pedro<br/>Penelope<br/>Miguel | | es-MX | Mia<br/>Andres | | es-ES | Lucia<br/>Sergio<br/>Enrique<br/>Conchita | | sv-SE | Elin<br/>Astrid | | tr-TR | Filiz<br/>Burcu | -
is_defaultboolean— Whether this item is the asset's default. Each asset can only have one `isDefault` set to `true`.
-
-
asset_language_codestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset's default language code. -
asset_namestring— The asset's name. -
asset_typestring, possible values:"audio", "image", "slides", "text", "video", "saved_reply"— The asset's type. -
category_idstring— The asset category's ID. -
category_namestring— The asset category's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data.
Example:
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_name": "asset name",
"asset_description": "This is an audio asset.",
"asset_type": "audio",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"archived": false,
"archived_time": "2023-08-29T06:12:33Z",
"asset_items": [
{
"asset_item_id": "beYjXoDOS_eV1QmTpj63PQ",
"asset_item_name": "english audio",
"asset_item_language": "en-US",
"is_default": true,
"asset_item_content": "text asset content",
"asset_item_file_url": "https://file.example.com/xxxx",
"asset_item_voice": "Joanna"
}
],
"asset_language_code": "en-US",
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"category_name": "flows assets"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10009` <br> Asset not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete an asset
- Method:
DELETE - Path:
/contact_center/asset_library/assets/{assetId} - Tags: Asset Library
Delete or achive an existing asset. You can only operate assets that have not been assigned to other modules. Only assets in archived status can be deleted. Set the asset to archived through this API before deleting.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:delete:asset_library:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Asset deleted or archived.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10009` <br> Asset not found. <br> **Error Code:** `10010` <br> Unable to delete asset directly, archive it first. <br> **Error Code:** `10002` <br> This asset is being used. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Update an asset
- Method:
PATCH - Path:
/contact_center/asset_library/assets/{assetId} - Tags: Asset Library
Update an asset.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: multipart/form-data
-
asset_descriptionstring— The asset's description. -
asset_itemsarray— A list of the asset's items. **Restriction** Each item must have a different `asset_item_language`, and only one item can have a `is_default` set to `true`. If this field is not filled in, it means no modifications will be made to the asset items. If this field is filled in, the provided data will overwrite the current asset items. To update an existing asset item, fill in the `asset_item_id`. Otherwise, it will be considered adding a new asset item. This API can only update or add asset items, not delete them.Items:
-
asset_item_contentstring— The asset item's content. Only works for `asset_type`s `text` and `saved_reply`. -
asset_item_idstring— The asset item's ID. If it is used to update the asset item, carrying this field indicates an update; otherwise, it indicates adding an asset item. -
asset_item_languagestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The asset item's language code. -
asset_item_namestring— The asset item's name. -
asset_item_voicestring— The asset item's text-to-speech voice. It only works for the audio type. When you want to create a TTS asset item, need to fill in the `asset_item_file_url` and `asset_item_content`, but don't need to fill in the `upload_file` field. Not every language supports TTS, and each language has a different voice. | asset_item_language | asset_item_voice | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| | yue-CN | Hiujin | | cmn-CN | Zhiyu | | da-DK | Naja<br/>Sofie<br/>Mads | | nl-NL | Laura<br/>Ruben<br/>Lotte | | en-US | Joanna<br/>Stephen<br/>Kimberly<br/>Matthew<br/>Danielle<br/>Gregory<br/>Kevin<br/>Salli<br/>Kendra<br/>Justin<br/>Joey<br/>Ivy<br/>Ruth | | en-GB | Emma<br/>Brian<br/>Amy<br/>Arthur | | en-AU | Olivia<br/>Russell<br/>Nicole | | en-NZ | Aria | | fr-FR | Celine<br/>Lea<br/>Remi<br/>Mathieu | | fr-CA | Gabrielle<br/>Liam<br/>Chantal | | de-DE | Daniel<br/>Vicki<br/>Marlene<br/>Hans | | it-IT | Adriano<br/>Bianca<br/>Giorgio<br/>Carla | | ja-JP | Takumi<br/>Kazuha<br/>Tomoko<br/>Mizuki | | ko-KR | Seoyeon | | pl-PL | Ola<br/>Maja<br/>Jan<br/>Jacek<br/>Ewa | | pt-PT | Ines<br/>Cristiano | | pt-BR | Camila<br/>Thiago<br/>Vitoria<br/>Ricardo | | ro-RO | Carmen | | ru-RU | Maxim<br/>Tatyana | | es-US | Lupe<br/>Pedro<br/>Penelope<br/>Miguel | | es-MX | Mia<br/>Andres | | es-ES | Lucia<br/>Sergio<br/>Enrique<br/>Conchita | | sv-SE | Elin<br/>Astrid | | tr-TR | Filiz<br/>Burcu | -
is_defaultboolean— Whether this item is the default of the asset. Each asset can only have one `isDefault` set to `true`. -
upload_filestring— The uploaded file, in binary format. Only works for `asset_type`s `audio`, `image`, `video` and `slides`. This field is not required if you create a TTS item when creating or updating an audio asset. **Allowed file extensions** * audio - mp3, wav * image - jpeg, jpg, jpe, jif, jfif, png, gif * slides - pdf * video - mp4, mov **Maximum supported filesize** A single request can upload a maximum of 100MB. **Single file maximum filesize** * audio - 10M * image - 10M * slides - 10M * video - 100M
-
-
asset_namestring— The asset's name. -
category_idstring— The asset category's ID. -
restoreboolean— Whether this asset should be restored. Only assets in archived status can be restored. Take care to avoid name duplication with current assets. If there is a conflict, the name of this asset needs to be changed as well. If this field is `true`, this request will ignore updates to other fields apart from the initial `asset_name`.
Example:
{
"asset_description": "This is an audio asset.",
"asset_name": "asset name",
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"asset_items": [
{
"asset_item_id": "beYjXoDOS_eV1QmTpj63PQ",
"asset_item_name": "english audio",
"upload_file": "Vm10V1UxUXhSWGxTYTJoV1lUSm9iMVZxUm5kamJGWjFZMGhPYVZadVFsaFhXSEJYVkd4WmQwNVlaRlZOVjA0MFdWVmFXbVZ0UmtsVWJGWlRaV3RKTUZkclVrSmxSVEI0VVd4V1RsSkVRVGs9",
"asset_item_content": "text asset content",
"is_default": true,
"asset_item_voice": "Joanna",
"asset_item_language": "en-US"
}
],
"restore": true
}
Responses
Status: 204 **HTTP Status Code:** `204` Asset updated
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `10005` <br> Asset name is too long. <br> **Error Code:** `10007` <br> Duplicate asset name <br> **Error Code:** `10013` <br> Asset description is too long. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10009` <br> Asset not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Duplicate an asset
- Method:
POST - Path:
/contact_center/asset_library/assets/{assetId}/duplicate - Tags: Asset Library
Creates new assets based on an existing asset.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
assets(required)array— List of new asset information to be created.Items:
-
asset_name(required)string— The asset's name. -
asset_descriptionstring— The asset's description.
-
Example:
{
"assets": [
{
"asset_name": "asset name",
"asset_description": "This is an audio asset."
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Asset duplicated.
Content-Type: application/json
-
results(required)array— Array containing the duplication results for each asset.Items:
-
status(required)string, possible values:"success", "failed"— The duplication status of the asset. -
asset_idstring— The asset's unique identifier. -
asset_namestring— The asset's name. -
errorstring— The reason for duplication failure. This field is returned only when duplication fails.
-
Example:
{
"results": [
{
"asset_id": "WkdWelkzSnBjSEZwYjI0PQ11",
"asset_name": "asset name",
"status": "success",
"error": "Asset name is too long."
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10009` <br> Asset not found. If the source asset you input does not exist or is in an archived state, this error will occur. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete asset items
- Method:
DELETE - Path:
/contact_center/asset_library/assets/{assetId}/items - Tags: Asset Library
Delete specific asset items. The default asset item can't be deleted.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
asset_item_idsarray— The list of asset item IDs.Items:
string— The asset item's ID.
Example:
{
"asset_item_ids": [
"BeSjXoDOS_eV1QmTpj63PQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Asset items deleted.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10009` <br> Asset not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List asset categories
- Method:
GET - Path:
/contact_center/asset_library/categories - Tags: Asset Library
List asset categories.
Scopes: contact_center_asset_library:read:admin
Granular Scopes: contact_center:read:asset_library:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Asset categories returned.
Content-Type: application/json
-
categoriesarray— Array of assets categories.Items:
-
category_idstring— The asset category's ID. -
category_namestring— The asset category's name. -
category_scopestring, possible values:"system", "agent"— The asset category's scope.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"categories": [
{
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"category_name": "flows assets",
"category_scope": "system"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create an asset category
- Method:
POST - Path:
/contact_center/asset_library/categories - Tags: Asset Library
Create an asset category.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
category_name(required)string— The asset category's name. -
category_scope(required)string, possible values:"system", "agent"— The asset category's scope.
Example:
{
"category_name": "flows assets",
"category_scope": "system"
}
Responses
Status: 201 **HTTP Status Code:** `201` Assets category created.
Content-Type: application/json
-
category_idstring— The asset category's ID. -
category_namestring— The asset category's name. -
category_scopestring, possible values:"system", "agent"— The asset category's scope.
Example:
{
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"category_name": "flows assets",
"category_scope": "system"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `10015` <br> Duplicate category name. <br> **Error Code:** `10020` <br> Unable to create more. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get an asset category
- Method:
GET - Path:
/contact_center/asset_library/categories/{categoryId} - Tags: Asset Library
Get an asset category.
Scopes: contact_center_asset_library:read:admin
Granular Scopes: contact_center:read:asset_library:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Assets category returned.
Content-Type: application/json
-
category_idstring— The asset category's ID. -
category_namestring— The asset category's name. -
category_scopestring, possible values:"system", "agent"— The asset category's scope.
Example:
{
"category_id": "bnGEj1yrRb6qlNMvyMK08g",
"category_name": "flows assets",
"category_scope": "system"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10023` <br> Asset category not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete an asset category
- Method:
DELETE - Path:
/contact_center/asset_library/categories/{categoryId} - Tags: Asset Library
Delete an existing asset category.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:delete:asset_library:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Asset deleted.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10023` <br> Asset category not found. <br> **Error Code:** `10019` <br> This asset category is being used. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Update an asset category
- Method:
PATCH - Path:
/contact_center/asset_library/categories/{categoryId} - Tags: Asset Library
Update an asset category.
Scopes: contact_center_asset_library:write:admin
Granular Scopes: contact_center:write:asset_library:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
category_namestring— The asset category's name.
Example:
{
"category_name": "flows assets"
}
Responses
Status: 204 **HTTP Status Code:** `204` The assets category updated
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `10015` <br> Duplicate category name. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10023` <br> Asset category not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List block list rules for IP addresses
- Method:
GET - Path:
/contact_center/block_list_rules/ip_addresses - Tags: Block List Rules
List block list rules for IP addresses.
Scopes: contact_center_block_list_rules:read:admin
Granular Scopes: contact_center:read:block_list_rules:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Block list rules of IP addresses returned.
Content-Type: application/json
-
ip_address_block_list_rulesarray— Information about the block list rules of IP addresses.Items:
-
created_time(required)string, format:date-time— The date and time when the block list rule was created. -
ip_address(required)string— The IP address the block list rule applies to. -
ip_address_block_list_rule_id(required)string— The block list rule's unique identifier. -
last_modified_time(required)string, format:date-time— The date and time when the block list rule was last modified. -
match_type(required)string, possible values:"ip_address"— The block list rule's match type. * `ip_address` — Matches a specific IP address. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"ip_address_block_list_rules": [
{
"ip_address_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"ip_address": "192.168.1.100",
"match_type": "ip_address",
"status": "active",
"comment": "Suspicious activity detected",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `300` <br> Invalid `match_type`. <br> **Error Code:** `300` <br> Invalid `ip_address`. <br> **Error Code:** `300` <br> Invalid `status`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Create block list rules for IP addresses
- Method:
POST - Path:
/contact_center/block_list_rules/ip_addresses - Tags: Block List Rules
Create block list rules for IP addresses. Supports up to 20 block list rules per request. Valid block list rules are created while invalid block list rules are rejected with detailed error messages. Returns 201 if all are valid, 207 for partial success, or 400 if all are invalid.
Scopes: contact_center_block_list_rules:write:admin
Granular Scopes: contact_center:write:block_list_rules:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
ip_address_block_list_rules(required)array— Information about the block list rules for IP addresses. You can create a maximum number of 20 rules.Items:
-
ip_address(required)string— The IP address the block list rule applies to. -
match_type(required)string, possible values:"ip_address"— The block list rule's match type. * `ip_address` - Matches a specific IP address. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule.
-
Example:
{
"ip_address_block_list_rules": [
{
"status": "active",
"match_type": "ip_address",
"ip_address": "192.168.1.100",
"comment": "Suspicious activity detected"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` All block list rules of IP addresses successfully created. **HTTP Status Code:** `207` Block list rules of IP addresses partially created. Valid block list rules are created while invalid block list rules are rejected with detailed error messages.
Content-Type: application/json
-
ip_address_block_list_rules(required)array— Information about the created block list rules.Items:
-
ip_address(required)string— The IP address the block list rule applies to. -
ip_address_block_list_rule_id(required)string— The block list rule's unique identifier. -
match_type(required)string, possible values:"ip_address"— The block list rule's match type. * `ip_address` - Matches a specific IP address. -
status(required)string, possible values:"active", "inactive"— The status of the block list rule. -
commentstring— The comment about the block list rule. -
created_timestring, format:date-time— The date and time when the block list rule was created. -
last_modified_timestring, format:date-time— The date and time when the block list rule was last modified.
-
Example:
{
"ip_address_block_list_rules": [
{
"ip_address_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"status": "active",
"match_type": "ip_address",
"ip_address": "192.168.1.100",
"comment": "Suspicious activity detected",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `1508` <br> Invalid IP address. <br> **Error Code:** `1507` <br> Duplicated block list rule. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete IP addresses' block list rules
- Method:
DELETE - Path:
/contact_center/block_list_rules/ip_addresses - Tags: Block List Rules
Delete block list rules of IP addresses. Supports up to 20 block list rules per request. No block list rules are deleted unless all IDs in the request are valid.
Scopes: contact_center_block_list_rules:write:admin
Granular Scopes: contact_center:delete:block_list_rules:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
ip_address_block_list_rule_ids(required)array— A list of block list rule IDs to delete.Items:
string
Example:
{
"ip_address_block_list_rule_ids": [
"zeYjXoDOS_eV1QmTpj63PQ",
"abCdEfGhI_jKlMnOpQrStU"
]
}
Responses
Status: 204 All IP address block list rules were successfully deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `300` <br> `ip_address_block_list_rule_ids` is required. <br> **Error Code:** `300` <br> Block list rule supports a maximum of 20. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1505` <br> Block list rules do not exist: `ipAddressBlockListRuleId1`, `ipAddressBlockListRuleId2`. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Get a block list rule of IP addresses
- Method:
GET - Path:
/contact_center/block_list_rules/ip_addresses/{ipAddressBlockListRuleId} - Tags: Block List Rules
Get a block list rule of IP addresses.
Scopes: contact_center_block_list_rules:read:admin
Granular Scopes: contact_center:read:block_list_rules:admin
Rate Limit Label: LIGHT
Responses
Status: 200 Block list rule of IP addresses returned.
Content-Type: application/json
-
created_time(required)string, format:date-time— The date and time when the block list rule was created. -
ip_address(required)string— The IP address the block list rule applies to. -
ip_address_block_list_rule_id(required)string— The ID of the block list rule. -
last_modified_time(required)string, format:date-time— The date and time when the block list rule was last modified. -
match_type(required)string, possible values:"ip_address"— The match type of the block list rule. * `ip_address` — Matches a specific IP address -
status(required)string, possible values:"active", "inactive"— The status of the block list rule. -
commentstring— The comment about the block list rule.
Example:
{
"ip_address_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"ip_address": "192.168.1.100",
"match_type": "ip_address",
"status": "active",
"comment": "Suspicious activity detected",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> Feature OP flag is not enabled. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1505` <br> Block list rule does not exist: {ipAddressBlockListRuleId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
List block list rules of phone numbers
- Method:
GET - Path:
/contact_center/block_list_rules/phone_numbers - Tags: Block List Rules
List block list rules of phone numbers.
Scopes: contact_center_block_list_rules:read:admin
Granular Scopes: contact_center:read:block_list_rules:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Block list rules of phone numbers returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
phone_block_list_rulesarray— Information about the block list rules of phone numbers.Items:
-
channel(required)array— The channel the block list rule applies to.Items:
string, possible values:"voice", "sms" -
country_iso_code(required)string— The [ISO country code](/docs/api/references/abbreviations/#countries). -
created_time(required)string, format:date-time— The date and time when the block list rule was created. -
direction(required)array— The call direction the block list rule applies to.Items:
string, possible values:"inbound", "outbound" -
last_modified_time(required)string, format:date-time— The date and time when the block list rule was last modified. -
match_type(required)string, possible values:"phone_number", "prefix"— The block list rule's match type. * `phone_number` - A specific phone number. * `prefix` - All numbers starting with the specified digits. -
phone_block_list_rule_id(required)string— The block list rule's ID. -
phone_number(required)string— The phone number or prefix the block list rule applies to. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule. -
exceptionsarray— The phone numbers excluded from the block list rule. Only applies to `prefix` match type.Items:
string
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"phone_block_list_rules": [
{
"phone_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"status": "active",
"match_type": "prefix",
"country_iso_code": "US",
"phone_number": "1800",
"exceptions": [
"8005550101"
],
"direction": [
"inbound"
],
"channel": [
"voice"
],
"comment": "Spam caller",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid `match_type`. <br> **Error Code:** `300` <br> Invalid `status`. <br> **Error Code:** `300` <br> Invalid `direction`. <br> **Error Code:** `300` <br> Invalid `channel`. <br> **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `300` <br> Invalid phone number. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Create block list rules for phone numbers
- Method:
POST - Path:
/contact_center/block_list_rules/phone_numbers - Tags: Block List Rules
Create block list rules for phone numbers. Supports up to 20 block list rules per request. Valid block list rules are created while invalid block list rules are rejected with detailed error messages. Returns 201 if all are valid, 207 for partial success, or 400 if all are invalid.
Scopes: contact_center_block_list_rules:write:admin
Granular Scopes: contact_center:write:block_list_rules:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
phone_block_list_rules(required)array— Information about the block list rules for phone numbers. You can create a maximum of 20 rules.Items:
-
channel(required)array— The channel the block list rule applies to.Items:
string, possible values:"voice", "sms" -
country_iso_code(required)string— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
direction(required)array— The call direction the block list rule applies to.Items:
string, possible values:"inbound", "outbound" -
match_type(required)string, possible values:"phone_number", "prefix"— The block list rule's match type. * `phone_number` - Matches a specific phone number. * `prefix` - Matches all numbers starting with the specified digits. -
phone_number(required)string— The phone number or prefix the block list rule applies to. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule. -
exceptionsarray— The phone numbers excluded from the block list rule. Only applies to `prefix` match type. **Note:** * Must start with the prefix. * Do not include the country code. * Phone numbers are digits only.Items:
string
-
Example:
{
"phone_block_list_rules": [
{
"status": "active",
"match_type": "prefix",
"country_iso_code": "US",
"phone_number": "1800",
"exceptions": [
"8005550101",
"8005550102"
],
"direction": [
"inbound"
],
"channel": [
"voice"
],
"comment": "Spam caller"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` All block list rules of phone numbers successfully created. **HTTP Status Code:** `207` Block list rules of phone number partially created. Valid block list rules are created while invalid block list rules are rejected with detailed error messages.
Content-Type: application/json
-
phone_block_list_rules(required)array— Information about the created block list rules.Items:
-
channel(required)array— The channel the block list rule applies to.Items:
string, possible values:"voice", "sms" -
country_iso_code(required)string— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
direction(required)array— The call direction the block list rule applies to.Items:
string, possible values:"inbound", "outbound" -
match_type(required)string, possible values:"phone_number", "prefix"— The block list rule's match type. * `phone_number` - Matches a specific phone number. * `prefix` - Matches all numbers starting with the specified digits. -
phone_block_list_rule_id(required)string— The block list rule's unique identifier. -
phone_number(required)string— The phone number or prefix the block list rule applies to. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule. -
created_timestring, format:date-time— The date and time when the block list rule was created. -
exceptionsarray— The phone numbers excluded from the block list rule. Only applies to `prefix` match type.Items:
string -
last_modified_timestring, format:date-time— The date and time when the block list rule was last modified.
-
Example:
{
"phone_block_list_rules": [
{
"phone_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"status": "active",
"match_type": "prefix",
"country_iso_code": "US",
"phone_number": "1800",
"exceptions": [
"8005550101",
"8005550102"
],
"direction": [
"inbound"
],
"channel": [
"voice"
],
"comment": "Spam caller",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `300` <br> `phone_block_list_rules` is required. <br> **Error Code:** `300` <br> Block list rule supports a maximum of 20. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Delete phone numbers' block list rules
- Method:
DELETE - Path:
/contact_center/block_list_rules/phone_numbers - Tags: Block List Rules
Delete block list rules of phone numbers. Supports up to 20 block list rules per request. No block list rules are deleted unless all IDs in the request are valid.
Scopes: contact_center_block_list_rules:write:admin
Granular Scopes: contact_center:delete:block_list_rules:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
phone_block_list_rule_ids(required)array— A list of IDs of block list rules to delete.Items:
string
Example:
{
"phone_block_list_rule_ids": [
"zeYjXoDOS_eV1QmTpj63PQ",
"abCdEfGhI_jKlMnOpQrStU"
]
}
Responses
Status: 204 All block list rules of phone numbers successfully deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `300` <br> `phone_block_list_rule_ids` is required. <br> **Error Code:** `300` <br> Block list rule supports a maximum of 20. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1505` <br> Block list rules do not exist: `phoneBlockListRuleId1`, `phoneBlockListRuleId2`. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Get a block list rule of phone numbers
- Method:
GET - Path:
/contact_center/block_list_rules/phone_numbers/{phoneBlockListRuleId} - Tags: Block List Rules
Get a block list rule of phone numbers.
Scopes: contact_center_block_list_rules:read:admin
Granular Scopes: contact_center:read:block_list_rules:admin
Rate Limit Label: LIGHT
Responses
Status: 200 Block list rule of phone numbers returned.
Content-Type: application/json
-
channel(required)array— The channel the block list rule applies to.Items:
string, possible values:"voice", "sms" -
country_iso_code(required)string— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
created_time(required)string, format:date-time— The date and time when the block list rule was created. -
direction(required)array— The call direction the block list rule applies to.Items:
string, possible values:"inbound", "outbound" -
last_modified_time(required)string, format:date-time— The date and time when the block list rule was last modified. -
match_type(required)string, possible values:"phone_number", "prefix"— The block list rule's match type. * `phone_number` — A specific phone number. * `prefix` — All numbers starting with the specified digits. -
phone_block_list_rule_id(required)string— The block list rule's ID. -
phone_number(required)string— The phone number or prefix the block list rule applies to. -
status(required)string, possible values:"active", "inactive"— The block list rule's status. -
commentstring— The comment about the block list rule. -
exceptionsarray— The phone numbers excluded from the block list rule. Only applies to `prefix` match type.Items:
string
Example:
{
"phone_block_list_rule_id": "zeYjXoDOS_eV1QmTpj63PQ",
"status": "active",
"match_type": "prefix",
"country_iso_code": "US",
"phone_number": "1800",
"exceptions": [
"8005550101"
],
"direction": [
"inbound"
],
"channel": [
"voice"
],
"comment": "Spam caller",
"created_time": "2022-02-15T09:27:15Z",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> Feature OP flag is not enabled. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1505` <br> Blocklist rule does not exist: {phoneBlockListRuleId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error
Control an engagement's recording
- Method:
PUT - Path:
/contact_center/engagements/{engagementId}/recording/{command} - Tags: Call Control
Controls the recording state for an engagement.
This request is only valid for video and voice engagements. Calling this API for other channel types is invalid.
Acceptance of a request and response of HTTP 204 No Content only ensures there were no validation errors with the request.
Note: The Control an engagement's recording API only works with third-party apps if the account admin has enabled the Allow Open API to pause and resume automatic call recording setting. For more details, refer to this support article.
Scopes: contact_center_engagement:write:admin
Granular Scopes: contact_center:update:engagement_recording_control:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status:** `204` **No Content** Request accepted for processing with no validation errors. This does not imply successful execution of the command.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2814` <br> Cannot use this recording control command with this engagement's channel type. <br> **Error Code:** `2815` <br> The engagement is not assigned to an agent. It is not being recorded. <br> **Error Code:** `2818` <br> Cannot change recording state from {current_state} to {command_state}. <br> **Error Code:** `2819` <br> Recording is stopped. <br> **Error Code:** `2808` <br> Recording is in progress. There is no need to open it again. <br> **Error Code:** `2809` <br> Start recording first. Cannot be converted to {state}. <br> **Error Code:** `2810` <br> No need to repeat the operation. The current state is already {state}. <br> **Error Code:** `2812` <br> The recording control's current state is {current_state}, and it cannot be converted to {command_state}. <br> **Error Code:** `300` <br> Invalid request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `20006` <br> Account not found. <br> **Error Code:** `2816` <br> The system could not find the session for the engagement. <br> **Error Code:** `2817` <br> There is no recording for this engagement. <br> **Error Code:** `2901` <br> Engagement does not exist: {0}. <br> **Error Code:** `2906` <br> There are no agents on the call. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `2907` <br> There was a problem processing the recording control request. <br> **Error Code:** `2908` <br> The operation was partially completed. Try again. <br> **Error Code:** `2909` <br> There was a problem processing the recording control request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Command control of a user
- Method:
POST - Path:
/contact_center/users/{userId}/commands - Tags: Call Control
Issue a command to trigger an action for a Contact Center user.
- command -
make_callinitiates an outbound voice engagement.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:write:user_control:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
channel(required)string, possible values:"voice"— The channel type. Currently only supports `voice`. -
command(required)string, possible values:"make_call", "answer_call", "hold_call", "unhold_call", "end_call", "conference_warm_invite"— Control commands. - `make_call` - The `cc_queue_id` field is required. -
paramsobject— The parameters.-
cc_queue_idstring— The Contact Center queue identifier. -
consumer_display_namestring— The consumer's name. Only valid and `Optional` when `command` is `make_call`. -
consumer_numberstring— The customer's phone number. Only valid and `Required` when `command` is `make_call`. -
device_idstring— The device ID. Only valid and `Required` when `channel` is `voice`. -
engagement_idstring— The engagement's ID. Only valid and `Required` when `command` is `hold_call`, `unhold_call`, or `end_call` or `conference_warm_invite`. -
invitee_idstring— The invitee's ID. When `invitee_type` is `0`, it represents the agent's ID. When `invitee_type` is `1`, it represents the queue's ID. When `invitee_type` is `2`, it represents the DID number. Only valid and `Required` when `command` is `conference_warm_invite`. -
invitee_typeinteger, possible values:0, 1, 2— The invitee's type. - 0= Contact Center agent - 1= queue - 2= Direct Inward Dialing Number (DID number) Only valid and `Required` when `command` is `conference_warm_invite`. -
queue_caller_id_numberstring— The queue's caller ID number, in E.164 format, configured inside the queue. Only valid and `Optional` when `command` is `make_call`. -
reservation_idstring— The reservation's ID. Only valid and `Required` when `command` is `answer_call`.
-
Example:
{
"command": "make_call",
"channel": "voice",
"params": {
"device_id": "ZoomClient-CCITab-Tnxa76dLQ_SZwxmCP3bIOA",
"cc_queue_id": "a4lCNeq2SzKbgkcDVbjCZQ",
"queue_caller_id_number": "+14155552641",
"consumer_number": "+14155552641",
"consumer_display_name": "Jill Chill",
"reservation_id": "ZWRB4E457925500218F7883FC12D151AA9F",
"engagement_id": "TTv5RIhDRWS6Kb-OZfTYtg",
"invitee_type": 0,
"invitee_id": "NMYuY-8aThej4Fm3GTww4Q"
}
}
Responses
Status: 201 **HTTP Status:** `201` **Created** Request created for processing with no validation errors. This does not imply successful execution of the command.
Content-Type: application/json
-
request_id(required)string— The request ID to correlate the asynchronous response. For `make_call` commands, the webhook event containing the `request_id` is [`contact_center.call_control_make_call_executed`](/docs/api/contact-center/events/#tag/contact_center/postcontact_center.call_control_make_call_executed).
Example:
{
"request_id": "alU302FoDe-dCq9QAFeZhw"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `9002` <br> User is currently `Occupied`. <br> **Error Code:** `300` <br> Invalid request. <br> **Error Code:** `1018` <br> User device not found. <br> **Error Code:** `1211` <br> User is not assigned to queue. <br> **Error Code:** `1212` <br> Caller ID not found or not assigned to queue. <br> **Error Code:** `9003` <br> The CTI device is not supported. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List user's devices
- Method:
GET - Path:
/contact_center/users/{userId}/devices - Tags: Call Control
List a Contact Center user's device information.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:user_device:admin
Rate Limit Label: LIGHT
Responses
Status: 200 User device list returned.
Content-Type: application/json
-
devicesarray— The device information.Items:
-
device_idstring— User login device ID. -
device_typestring, possible values:"pwa", "client", "cti"— Device type. -
device_versionstring— Client version. -
sip_registration_informationobject— The SIP registration information.-
registration_successboolean— Registration successful.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"devices": [
{
"device_id": "ZoomClient-CCITab-Tnxa76dLQ_SZwxmCP3bIOA",
"device_version": "6.2.3.40682",
"sip_registration_information": {
"registration_success": true
},
"device_type": "pwa"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List outbound campaigns
- Method:
GET - Path:
/contact_center/outbound_campaign/campaigns - Tags: Campaigns
List Contact Center outbound campaigns.
Scopes: contact_center_outbound_campaign:read:admin
Granular Scopes: contact_center:read:outbound_campaign:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Outbound campaigns are returned successfully.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
outbound_campaign_itemsarray— Array of outbound campaigns.Items:
-
outbound_campaign_descriptionstring— The campaign's description. -
outbound_campaign_idstring— The outbound campaign ID. -
outbound_campaign_namestring— The campaign's name. The name is a unique key among all outbound campaigns. -
outbound_campaign_statusstring, possible values:"draft", "ready", "running", "paused", "completed", "not_running"— The campaign's status.
-
-
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"page_size": 10,
"total_records": 10,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"outbound_campaign_items": [
{
"outbound_campaign_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"outbound_campaign_name": "My outbound campaign",
"outbound_campaign_description": "My outbound campaign description",
"outbound_campaign_status": "paused"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5012` <br> Campaign status enum is invalid. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Create an outbound campaign
- Method:
POST - Path:
/contact_center/outbound_campaign/campaigns - Tags: Campaigns
Create an outbound Contact Center campaign.
Scopes: contact_center_outbound_campaign:write:admin
Granular Scopes: contact_center:write:outbound_campaign:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
dialing_method(required)string, possible values:"progressive", "preview", "agentless", default:"progressive"— Determine how contacts in this campaign will be dialed. - `progressive` - engagement details are displayed to the agent **after** they are connected with the consumer. - `preview` - engagement details are displayed to the agent **before** they are connected with the consumer. - `agentless` - automated dialing without agent involvement. -
dialing_method_settings(required)object— One of either progressive, preview, or agentless dialing. -
outbound_campaign_name(required)string— The campaign's name. Names are a unique key among all outbound campaigns. -
phone_number_id(required)string— The reference ID for the Contact Center phone number. This number is displayed to consumers for outbound calls. -
queue_id(required)string— The queue ID. 1 - Only voice queues configured for outbound engagements with at least one user from Zoom Contact Center Premium or Elite packages are available for selection. 2 - Queue distribution cannot be configured to Simultaneous or Do Not Distribute. -
assign_typestring, possible values:"queue", "default", "customer", default:"queue"— Caller ID assignment type. This assignment type needs to match with `phone_number_id`. -
attempts_use_same_periodboolean, default:false— Whether attempts use the same period. -
business_hour_idstring— The Contact Center business hours ID. The campaign will only dial during these hours. [Create business hours API.](/docs/contact-center/apis/#operation/businessHourCreate) -
business_hour_sourcestring, possible values:"queue", "campaign", default:"queue"— The Contact Center business hour source. Select `queue` to use the outbound queue's business hours, and `campaign` to set custom hours. Defaults to `queue`. -
campaign_contact_list_idsarray— Contacts will be dialed in alphabetical order. If a contact has more than one phone number, the numbers will be dialed in the order they are listed until a call is connected or all numbers have been tried. A list of contact list ids to dial with this campaign. Multiple contact lists can be input here.Items:
string— Contact list IDs. These can be retrieved using the [List campaign contact lists API.](/docs/api/contact-center/#tag/campaign/GET/contact_center/outbound_campaign/contact_lists) -
campaign_do_not_contact_list_idsarray— Contacts will not be dialed in.Items:
string— Do mot contact list IDs. -
closure_set_idstring— The Contact Center closure hours ID. [Create closure hours API.](/docs/contact-center/apis/#operation/closuresSetCreate) -
contact_phone_orderstring— Contact phone order. 1 means main, 2 means work, 3 means home, 4 means mobile, 5 means other -
contact_timezone_sourcestring, possible values:"none", "area_code", "timezone", default:"none"— Determine the source used to establish the contact's timezone for deciding appropriate calling hours, like 9 AM to 5 PM. **Valid values** `none` - Disables timezone-based calling restrictions. Calls can be made at any time. `timezone` - Uses the contact's explicit timezone attribute to determine calling eligibility. `area_code` - Derives the timezone based on the area code of the contact's highest priority phone number according to the dial order. -
dial_sequencestring, possible values:"list_dial", "contact_dial", "contact_with_lock", default:"list_dial"— Controls the dialing sequence and failure-handling behavior. - `LIST_DIAL` (Current Mode) - Upon a dial failure, the system immediately abandons the current contact and tries the next contact in the list or queue. - `CONTACT_DIAL` (New Mode) - Upon a dial failure for a phone number, the system tries the next available phone number for the same contact before moving to the next contact. - `CONTACT_WITH_LOCK` - Functions as `CONTACT_DIAL`, but also applies an exclusive agent lock to the contact upon retrieval to prevent simultaneous access by other agents. -
enable_always_runningboolean, default:false— Enable always running. -
enable_closure_hourboolean, default:false— Toggle closure hours on or off. Outbound calls are not started during closure hours. -
enable_diagnosticsboolean, default:false— Enable diagnostics. -
enable_max_ring_timeboolean, default:true— Disconnect unanswered calls after a set period of time has elapsed. -
exclusion_logicstring, possible values:"and", "or", default:"and"— Exclusion logic for contact lists. -
max_attempts_per_contactinteger— Maximum attempts per contact. -
max_ring_timeinteger, default:60— Use with `enable_max_ring_time`. A call is considered unanswered after the maximum ring time has elapsed. Maximum ring time must be between 15 and 120 seconds. -
other_attempt_periodinteger— Other attempt period. Could be in seconds, minutes, hours, and days. -
outbound_campaign_descriptionstring— The campaign's description. -
outbound_campaign_priorityinteger, default:5— The campaign priority. -
retry_periodinteger— Retry period. Could be in seconds, minutes, hours, and days. -
retry_period_unitstring, possible values:"seconds", "minutes", "hours", "days", default:"hours"— Unit for retry period. -
second_attempt_periodinteger, default:30— Second attempt period. Could be in seconds, minutes, hours, and days. -
third_attempt_periodinteger, default:60— Third attempt period. Could be in seconds, minutes, hours, and days.
Example:
{
"outbound_campaign_name": "My outbound campaign name",
"outbound_campaign_description": "My outbound campaign description",
"queue_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"phone_number_id": "XfTPrZjyR5W6QgNARdtGlw",
"assign_type": "queue",
"dialing_method": "progressive",
"dialing_method_settings": {
"enable_amd": false,
"amd_settings": {
"greeting_asset_id": "zNWo_1M5ScCuKnBb2Z-sfw",
"answering_machine_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"enable_abandonment_timeout": false,
"abandonment_timeout": 5,
"abandonment_message_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"outbound_campaign_priority": 5,
"campaign_contact_list_ids": [
"MN2Dtcb2T-yT5CU3clN-AA"
],
"campaign_do_not_contact_list_ids": [
"Lp7Wzxf4Q-pA9RX6bhO-XX"
],
"exclusion_logic": "and",
"max_attempts_per_contact": 3,
"attempts_use_same_period": false,
"second_attempt_period": 30,
"third_attempt_period": 60,
"other_attempt_period": 120,
"retry_period": 60,
"retry_period_unit": "hours",
"dial_sequence": "list_dial",
"enable_max_ring_time": true,
"max_ring_time": 60,
"business_hour_source": "campaign",
"business_hour_id": "h7XtiytFTammquBRlTRiWZ",
"enable_closure_hour": false,
"closure_set_id": "y9XtiytyQammquBRlTPiWw",
"contact_timezone_source": "area_code",
"contact_phone_order": "1,2,3,4,5",
"enable_always_running": false,
"enable_diagnostics": false
}
Responses
Status: 201 **HTTP Status Code:** `201` Outbound campaign is created.
Content-Type: application/json
-
assign_typestring, possible values:"queue", "default", "customer", default:"queue"— Caller ID assignment type. -
attempts_use_same_periodboolean— Whether attempts use the same period. -
business_hour_idstring— The Contact Center business hours ID. The campaign will only dial during these hours. [Create business hours API.](/docs/contact-center/apis/#operation/businessHourCreate) -
business_hour_sourcestring, possible values:"queue", "campaign", default:"queue"— The Contact Center business hour source. Select `queue` to use the outbound queue's business hours, and `campaign` to set custom hours. Defaults to `queue`. When this value is `queue`, the operating hours are not provided in the API response. [Use the Get Queue Operating Hours API.](/docs/contact-center/apis/#operation/getAQueueOperatingHours) -
campaign_contact_listarray— Contacts will be dialed in alphabetical order. If a contact has more than one phone number, the numbers will be dialed in the order they are listed until a call is connected or all numbers have been tried. A list of contact list ids to dial with this campaign. Multiple contact lists can be input here. **Leave this blank to use this campaign with the outbound dialer API.**Items:
-
contact_list_id(required)string— The campaign contact list's ID. -
contact_list_name(required)string— The campaign contact list's name. -
contact_list_descriptionstring— The campaign contact list's description. -
contacts_countstring— Number of contacts in the contact list.
-
-
campaign_do_not_contact_list_idsarray— Contacts will be not dialed.Items:
-
contact_list_id(required)string— The campaign contact list's ID. -
contact_list_name(required)string— The campaign contact list's name. -
contact_list_descriptionstring— The campaign contact list's description. -
contacts_countstring— Number of contacts in the contact list.
-
-
closure_set_idstring— The Contact Center closure hours ID. [Create closure hours API.](/docs/contact-center/apis/#operation/closuresSetCreate) -
contact_orderinteger— Contact order. -
contact_phone_orderstring— Contact phone order. -
contact_timezone_sourcestring, possible values:"none", "timezone", "area_code", default:"none"— Determine the source used to establish the contact's timezone for deciding appropriate calling hours, like 9 AM to 5 PM. **Valid values** `none` - Disables timezone-based calling restrictions; calls can be made at any time. `timezone` - Uses the contact's explicit timezone attribute to determine calling eligibility. `area_code` - Derives the timezone based on the area code of the contact's highest priority phone number according to the dial order. -
dial_sequencestring— Dial sequence mode. -
dialing_methodstring, possible values:"progressive", "preview", "agentless"— Determine how contacts in this campaign will be dialed.\nProgressive - engagement details are displayed to the agent **after** they are connected with the consumer.\nPreview - engagement details are displayed to the agent **before** they are connected with the consumer.\nAgentless - automated dialing without agent involvement. -
dialing_method_settingsobject— One of either progressive, pPreview, or agentless dialing. -
enable_always_runningboolean, default:false— Whether always running is enabled. -
enable_closure_hourboolean— Toggle closure hours on or off. Outbound calls are not started during closure hours. -
enable_diagnosticsboolean— Whether diagnostics is enabled. -
enable_max_ring_timeboolean— Enabled if `max_ring_time` is set. -
exclusion_logicstring— Exclusion logic for contact lists. -
max_attempts_per_contactinteger— Maximum attempts per contact. -
max_ring_timeinteger— Use with `max_ring_time_enabled`. A call is considered unanswered after the maximum ring time has elapsed. Maximum ring time must be between 15 and 120 seconds. -
other_attempt_periodinteger— Other attempt period. Could be in seconds, minutes, hours, and days. -
outbound_campaign_descriptionstring— The campaign's description. -
outbound_campaign_idstring— The outbound campaign ID. -
outbound_campaign_namestring— The campaign's name. Names are a unique key among all outbound campaigns. -
outbound_campaign_priorityinteger, default:5— The campaign priority. -
outbound_campaign_statusstring, possible values:"draft", "ready", "running", "paused", "completed", "not_running"— The campaign's status. -
phone_number_idstring— The reference ID for the Contact Center phone number. This number is displayed to consumers for outbound calls. -
queue_idstring— The queue ID. 1 - Only voice queues configured for outbound engagements with at least one user from Zoom Contact Center Premium or Elite packages are available for selection. 2 - Queue distribution cannot be configured to Simultaneous or Do Not Distribute. -
queue_namestring— The Contact Center queue name. -
retry_periodinteger— Retry period. Could be in seconds, minutes, hours, and days. -
retry_period_unitstring, possible values:"seconds", "minutes", "hours", "days"— Unit for retry period. -
second_attempt_periodinteger— Second attempt period. Could be in seconds, minutes, hours, and days. -
third_attempt_periodinteger— Third attempt period. Could be in seconds, minutes, hours, and days.
Example:
{
"outbound_campaign_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"outbound_campaign_name": "My outbound campaign",
"outbound_campaign_description": "My outbound campaign description",
"queue_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"queue_name": "Voice - Customer Support",
"phone_number_id": "XfTPrZjyR5W6QgNARdtGlw",
"assign_type": "queue",
"outbound_campaign_status": "draft",
"dialing_method": "progressive",
"dialing_method_settings": {
"enable_amd": true,
"amd_settings": {
"greeting_asset_id": "zNWo_1M5ScCuKnBb2Z-sfw",
"answering_machine_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"enable_abandonment_timeout": false,
"abandonment_timeout": 5,
"abandonment_message_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"outbound_campaign_priority": 5,
"campaign_contact_list": [
{
"contact_list_id": "MN2Dtcb2T-yT5CU3clN-AA",
"contact_list_name": "Contact List",
"contact_list_description": "Description",
"contacts_count": "1"
}
],
"campaign_do_not_contact_list_ids": [
{
"contact_list_id": "Lp7Wzxf4Q-pA9RX6bhO-XX",
"contact_list_name": "Do-not-contact list",
"contact_list_description": "Description",
"contacts_count": "1"
}
],
"exclusion_logic": "AND",
"max_attempts_per_contact": 3,
"attempts_use_same_period": false,
"second_attempt_period": 30,
"third_attempt_period": 60,
"other_attempt_period": 120,
"retry_period": 60,
"retry_period_unit": "hours",
"dial_sequence": "LIST_DIAL",
"max_ring_time": 15,
"enable_max_ring_time": true,
"business_hour_source": "queue",
"business_hour_id": "h7XtiytFTammquBRlTRiWZ",
"enable_closure_hour": true,
"closure_set_id": "y9XtiytyQammquBRlTPiWw",
"contact_timezone_source": "area_code",
"contact_phone_order": "ascending",
"enable_always_running": false,
"contact_order": 1,
"enable_diagnostics": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5008` <br> Campaign phone number not found. Please check that the phone number exists in Contact Center Preferences and that the ID is correct. <br> **Error Code:** `5009` <br> Campaign greeting asset not found. Please check that the asset exists in Contact Center Asset Library and that the ID is correct. <br> **Error Code:** `5010` <br> Campaign AMD asset not found. Please check that the asset exists in Contact Center Asset Library and that the ID is correct. <br> **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `302` <br> Invalid enum value. <br> **Error Code:** `5011` <br> Campaign Business Hour not found. Please check that the Operating Hour exists in Contact Center Preferences and that the ID is correct. <br> **Error Code:** `5012` <br> Campaign Closure Hour Set not found. Please check that the Operating Hour exists in Contact Center Preferences and that the ID is correct. <br> **Error Code:** `5016` <br> The maximum number of contacts assigned to a campaign cannot exceed 100000. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get an outbound campaign
- Method:
GET - Path:
/contact_center/outbound_campaign/campaigns/{campaignId} - Tags: Campaigns
Get a Contact Center outbound campaign.
Scopes: contact_center_outbound_campaign:read:admin
Granular Scopes: contact_center:read:outbound_campaign:admin
Rate Limit Label: LIGHT
Responses
Status: 200 Outbound campaign object.
Content-Type: application/json
-
assign_typestring, possible values:"queue", "default", "customer", default:"queue"— Caller ID assignment type. -
attempts_use_same_periodboolean, default:false— Whether attempts use the same period. -
business_hour_idstring— The Contact Center business hours ID. The campaign will only dial during these hours. [Create business hours API.](/docs/contact-center/apis/#operation/businessHourCreate) -
business_hour_sourcestring, possible values:"queue", "campaign", default:"queue"— The Contact Center business hour source. Select `queue` to use the outbound queue's business hours, and `campaign` to set custom hours. Defaults to `queue`. -
campaign_contact_listarray— Contacts will be dialed in alphabetical order. If a contact has more than one phone number, the numbers will be dialed in the order they are listed until a call is connected or all numbers have been tried. A list of contact list ids to dial with this campaign. Multiple contact lists can be input here. **Leave this blank to use this campaign with the outbound dialer API.**Items:
-
contact_list_id(required)string— The campaign contact list's ID. -
contact_list_name(required)string— The campaign contact list's name. -
contact_list_descriptionstring— The campaign contact list's description. -
contacts_countstring— Number of contacts in the contact list.
-
-
campaign_do_not_contact_listarray— Do not contact lists for the campaign.Items:
-
contact_list_descriptionstring— The do not contact list's description. -
contact_list_idstring— The do not contact list's ID. -
contact_list_namestring— The do not contact list's name. -
contacts_countstring— Number of contacts in the do not contact list.
-
-
closure_set_idstring— The Contact Center closure hours ID. [Create closure hours API.](/docs/contact-center/apis/#operation/closuresSetCreate) -
contact_orderinteger— The order for processing contacts. -
contact_phone_orderstring— Contact phone order. -
contact_timezone_sourcestring, possible values:"none", "timezone", "area_code", default:"none"— Determines the source used to establish the contact's timezone for deciding appropriate calling hours, such as "9 AM to 5 PM". **Valid values** `none` - Disables timezone-based calling restrictions. Calls can be made at any time. `timezone` - Uses the contact's explicit timezone attribute to determine calling eligibility. `area_code` - Derives the timezone based on the area code of the contact's highest priority phone number according to the dial order. -
dial_sequencestring, possible values:"list_dial", "contact_dial", "contact_with_lock", default:"list_dial"— Controls the dialing sequence and failure-handling behavior. - `LIST_DIAL (Current Mode)` - Upon a dial failure, the system immediately abandons the current contact and tries the next contact in the list or queue. - `CONTACT_DIAL (New Mode)` - Upon a dial failure for a phone number, the system tries the next available phone number for the*same contact before moving to the next contact. - `CONTACT_WITH_LOCK` - Functions as `CONTACT_DIAL`, but also applies an exclusive agent lock to the contact upon retrieval to prevent simultaneous access by other agents. -
dialing_methodstring, possible values:"progressive", "preview", "agentless"— Determine how contacts in this campaign will be dialed.\nProgressive - display engagement details to the agent **after** they are connected with the consumer.\nPreview - display engagement details to the agent **before** they are connected with the consumer.\nAgentless - automated dialing without agent involvement. -
dialing_method_settingsobject— Settings for the selected dialing method. -
enable_always_runningboolean, default:false— Enable always running. -
enable_closure_hourboolean, default:false— Toggle closure hours on or off. Outbound calls are not started during closure hours. -
enable_diagnosticsboolean, default:false— Enable diagnostics. -
enable_max_ring_timeboolean, default:true— Disconnect unanswered calls after a set period of time has elapsed. -
exclusion_logicstring, possible values:"and", "or", default:"and"— Exclusion logic for contact lists. -
max_attempts_per_contactinteger— Maximum attempts per contact. -
max_ring_timeinteger, default:60— Use with `max_ring_time_enabled`. A call is considered unanswered after the maximum ring time has elapsed. Maximum ring time must be between 15 and 120 seconds. -
other_attempt_periodinteger— Other attempt period. Could be in seconds, minutes, hours, and days. -
outbound_campaign_descriptionstring— The campaign's description. -
outbound_campaign_idstring— The outbound campaign ID. -
outbound_campaign_namestring— The campaign's name. Names are a unique key among all outbound campaigns. -
outbound_campaign_priorityinteger, default:5— The campaign priority. -
outbound_campaign_statusstring, possible values:"draft", "ready", "running", "paused", "completed", "not_running"— The campaign's status. -
phone_number_idstring— The reference ID for the Contact Center phone number. This number is displayed to consumers for outbound calls. -
queue_idstring— 1 - Only voice queues configured for outbound engagements with at least one user from Zoom Contact Center Premium or Elite packages are available for selection.\n2 - Queue distribution cannot be configured to Simultaneous or Do Not Distribute. -
queue_namestring— The queue's name. -
retry_periodinteger— Retry period. Could be in seconds, minutes, hours, and days. -
retry_period_unitstring, possible values:"seconds", "minutes", "hours", "days", default:"hours"— Unit for the retry period. -
second_attempt_periodinteger, default:30— Second attempt period. Could be in seconds, minutes, hours, and days. -
third_attempt_periodinteger, default:60— Third attempt period. Could be in seconds, minutes, hours, and days.
Example:
{
"outbound_campaign_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"outbound_campaign_name": "My outbound campaign",
"outbound_campaign_description": "My outbound campaign description",
"queue_id": "TY_XsJuWR9ehXrsf1DSIAQ",
"queue_name": "My queue name",
"phone_number_id": "XfTPrZjyR5W6QgNARdtGlw",
"assign_type": "queue",
"outbound_campaign_status": "draft",
"dialing_method": "progressive",
"dialing_method_settings": {
"enable_amd": false,
"amd_settings": {
"greeting_asset_id": "zNWo_1M5ScCuKnBb2Z-sfw",
"answering_machine_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"enable_abandonment_timeout": false,
"abandonment_timeout": 5,
"abandonment_message_asset_id": "z8XtiytyQammquBRlVPiWw"
},
"outbound_campaign_priority": 5,
"campaign_contact_list": [
{
"contact_list_id": "MN2Dtcb2T-yT5CU3clN-AA",
"contact_list_name": "Contact List",
"contact_list_description": "Description",
"contacts_count": "1"
}
],
"campaign_do_not_contact_list": [
{
"contact_list_id": "Lp7Wzxf4Q-pA9RX6bhO-XX",
"contact_list_name": "DNC List",
"contact_list_description": "DNC Description",
"contacts_count": "1"
}
],
"exclusion_logic": "and",
"max_attempts_per_contact": 3,
"attempts_use_same_period": false,
"second_attempt_period": 30,
"third_attempt_period": 60,
"other_attempt_period": 120,
"retry_period": 60,
"retry_period_unit": "hours",
"dial_sequence": "list_dial",
"enable_max_ring_time": true,
"max_ring_time": 60,
"contact_phone_order": "ascending",
"enable_always_running": false,
"contact_order": 1,
"enable_diagnostics": false,
"business_hour_source": "queue",
"business_hour_id": "h7XtiytFTammquBRlTRiWZ",
"enable_closure_hour": false,
"closure_set_id": "y9XtiytyQammquBRlTPiWw",
"contact_timezone_source": "area_code"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5005` <br> Campaign not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete an outbound campaign
- Method:
DELETE - Path:
/contact_center/outbound_campaign/campaigns/{campaignId} - Tags: Campaigns
Delete a Contact Center's outbound campaign.
Scopes: contact_center_outbound_campaign:delete:admin
Granular Scopes: contact_center:delete:outbound_campaign:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Outbound campaign is removed.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5005` <br> Campaign not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update an outbound campaign
- Method:
PATCH - Path:
/contact_center/outbound_campaign/campaigns/{campaignId} - Tags: Campaigns
Update an outbound Contact Center campaign.
Scopes: contact_center_outbound_campaign:update:admin
Granular Scopes: contact_center:update:outbound_campaign:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
abandonment_message_asset_idstring— Use with `enable_abandonment_timeout`. The Contact Center Asset Library asset to play when a call is abandoned due to agent unavailability. -
abandonment_timeoutinteger, default:5— Use with `enable_abandonment_timeout`. If `enable_abandonment_timeout` is `false`, this is set to null. A call connected to a consumer will be abandoned if an agent does not connect before the abandonment timeout elapses. Abandonment timeout must be between 2 and 30 seconds. -
agentless_amd_off_actionstring, possible values:"use_flow", "hang_up", "play_media"— Action when agentless AMD is off. -
agentless_amd_off_resource_idstring— Resource ID when agentless AMD is off. -
allow_retry_preview_dialerboolean, default:false— Allow retry for preview dialer. -
assign_typestring, possible values:"queue", "default", "customer", default:"queue"— Caller ID assignment type. -
attempts_use_same_periodboolean— Whether attempts use the same period. -
business_hour_idstring— The Contact Center business hours ID. The campaign will only dial during these hours. [Create business hours API.](/docs/contact-center/apis/#operation/businessHourCreate) -
business_hour_sourcestring, possible values:"queue", "campaign", default:"queue"— The Contact Center business hour source. Select `queue` to use the outbound queue's business hours, and `campaign` to set custom hours. Defaults to `queue`. -
campaign_do_not_contact_list_idsarray— Contacts will not be dialed in.Items:
string— Do Not Contact list IDs. -
closure_set_idstring— The Contact Center closure hours ID. [Create closure hours API.](/docs/contact-center/apis/#operation/closuresSetCreate) -
contact_orderinteger— The order for contacts. -
contact_phone_orderstring— The order for contact phone numbers. -
contact_timezone_sourcestring, possible values:"none", "timezone", "area_code", default:"none"— Determines the source used to establish the contact's timezone for deciding appropriate calling hours (9 AM to 5 PM). **Valid values** `none` - Disables timezone-based calling restrictions. Calls can be made at any time. `timezone` - Uses the contact's explicit timezone attribute to determine calling eligibility. `area_code` - Derives the timezone based on the area code of the contact's highest priority phone number according to the dial order. -
dial_sequencestring, possible values:"list_dial", "contact_dial", "contact_with_lock"— Control the dialing sequence and failure-handling behavior. - `LIST_DIAL` (Current Mode) - Upon a dial failure, the system immediately abandons the current contact and tries the next contact in the list or queue. - `CONTACT_DIAL` (New Mode)** - Upon a dial failure for a phone number, the system tries the next available phone number for the same contact before moving to the next contact. - `CONTACT_WITH_LOCK` - Functions as `CONTACT_DIAL`, but also applies an exclusive agent lock to the contact upon retrieval to prevent simultaneous access by other agents. -
enable_abandonment_timeoutboolean, default:false— Abandon answered calls if an agent does not connect within a set period of time. -
enable_always_runningboolean, default:false— Enable always running. -
enable_closure_hourboolean, default:false— Toggle closure hours on or off. Outbound calls are not started during closure hours. -
enable_diagnosticsboolean, default:false— Enable diagnostics. -
enable_max_ring_timeboolean— Disconnect unanswered calls after a set period of time has elapsed. -
enable_skipboolean, default:true— Preview dialing method only. Allow agent to skip outbound engagements. -
exclusion_logicstring, possible values:"and", "or", default:"and"— Exclusion logic for contact lists. When choose and as strategy, contacts with additional phone numbers will still be included in the campaign. When choose or strategy, the contacts will be excluded from the campaign if one or more phone number matches the DNC list. -
max_attempts_per_contactinteger— Maximum number of attempts per contact. -
max_concurrent_callsinteger— The maximum concurrent calls for the agentless dialer. -
max_ring_timeinteger— Use with `max_ring_time_enabled`. A call is considered unanswered after the maximum ring time has elapsed. Maximum ring time must be between 15 and 120 seconds. -
max_skipsinteger, default:1— Preview dialing method only. Configure skip reasons under **Contact Center Preferences**. -
new_flow_idstring— The agentless dialer's new flow ID. -
old_flow_idstring— The agentless dialer's old flow ID. -
other_attempt_periodinteger— Other attempt period. Could be in seconds, minutes, hours, and days. -
outbound_campaign_descriptionstring— The campaign's description. -
outbound_campaign_namestring— The campaign's name. Names are a unique key among all outbound campaigns. -
outbound_campaign_priorityinteger, default:5— The campaign priority. -
phone_number_idstring— The reference ID for the Contact Center phone number. This number is displayed to consumers for outbound calls. -
retry_periodinteger— Retry period. Could be in seconds, minutes, hours, and days. -
retry_period_unitstring, possible values:"seconds", "minutes", "hours", "days", default:"hours"— Unit for retry period. -
second_attempt_periodinteger, default:30— Second attempt period. Could be in seconds, minutes, hours, and days. -
third_attempt_periodinteger, default:60— Third attempt period. Could be in seconds, minutes, hours, and days.
Example:
{
"outbound_campaign_name": "My outbound campaign name",
"outbound_campaign_description": "My outbound campaign description",
"phone_number_id": "XfTPrZjyR5W6QgNARdtGlw",
"assign_type": "queue",
"outbound_campaign_priority": 5,
"enable_max_ring_time": true,
"max_ring_time": 15,
"campaign_do_not_contact_list_ids": [
"Lp7Wzxf4Q-pA9RX6bhO-XX"
],
"exclusion_logic": "and",
"max_attempts_per_contact": 3,
"attempts_use_same_period": true,
"second_attempt_period": 30,
"third_attempt_period": 60,
"other_attempt_period": 120,
"retry_period": 60,
"retry_period_unit": "hours",
"dial_sequence": "list_dial",
"enable_abandonment_timeout": false,
"abandonment_timeout": 5,
"abandonment_message_asset_id": "z8XtiytyQammquBRlVPiWw",
"enable_skip": true,
"max_skips": 1,
"business_hour_source": "campaign",
"business_hour_id": "rYyRJRjGQhi8gFNP9G7pSw",
"enable_closure_hour": false,
"closure_set_id": "IlSdt6YUQES8nkOqSehKJg",
"contact_timezone_source": "area_code",
"contact_phone_order": "mobile,home,work",
"enable_always_running": false,
"contact_order": 1,
"enable_diagnostics": false,
"allow_retry_preview_dialer": false,
"max_concurrent_calls": 5,
"old_flow_id": "_2npVp3juQWO2g9pt2rqSKg",
"new_flow_id": "_3npVp3juQWO2g9pt2rqSKg",
"agentless_amd_off_action": "use_flow",
"agentless_amd_off_resource_id": "z8XtiytyQammquBRlVPiWw"
}
Responses
Status: 204 **HTTP Status Code:** `204` Outbound Campaign is updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `302` <br> Invalid enum value. <br> **Error Code:** `5008` <br> Campaign phone number not found. Please check that the phone number exists in **Contact Center Preferences** and that the ID is correct. <br> **Error Code:** `5011` <br> Campaign business hour not found. Please check that the operating hours exist in **Contact Center Preferences** and that the ID is correct. <br> **Error Code:** `5012` <br> Campaign closure hour set not found. Please check that the operating hours exist in **Contact Center Preferences** and that the ID is correct. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5005` <br> Campaign is not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update an outbound campaign status
- Method:
PATCH - Path:
/contact_center/outbound_campaign/campaigns/{campaignId}/status - Tags: Campaigns
Update an outbound campaign status.
Scopes: contact_center_outbound_campaign:write:admin
Granular Scopes: contact_center:update:outbound_campaign:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
statusstring, possible values:"Draft", "Ready", "Paused", "Running", default:"Draft"— An outbound campaign status.
Example:
{
"status": "Draft"
}
Responses
Status: 204 **HTTP Status Code:** `204` Outbound Campaign Status is updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `302` <br> Invalid enum value. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List campaign contact lists' custom fields
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_list_custom_fields - Tags: Campaigns
Retrieve all custom fields defined for campaign contact lists.
Scopes: contact_center_outbound_campaign_contactlist:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contactlist:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 The campaign contact list's custom fields list is returned.
Content-Type: application/json
-
custom_fieldsarray— Information about custom fields in campaign contact lists.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string` - Any text value. - `number` - Numeric value. Supports integers or decimals like `123.45`. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. -
allow_third_party_accessboolean— Whether the custom field can be accessed by third party apps. -
contact_list_idsarray— The contact list IDs associated with the custom field.Items:
string— The contact list's ID. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— The picklist's supported values. This is only valid when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Whether the custom field is shown on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether the custom field is shown on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether the custom field is shown in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether the `custom_field_name` is used in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether the custom field is used in the consumer routing profile.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"custom_fields": [
{
"custom_field_id": "7381d210 Contact Method",
"custom_field_name": "Preferred Contact Method",
"data_type": "string",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"contact_list_ids": [
"suk0leXNTye2JjIm6v0yCQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"allow_third_party_access": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Create a campaign contact list's custom field
- Method:
POST - Path:
/contact_center/outbound_campaign/contact_list_custom_fields - Tags: Campaigns
Create a custom field for a campaign contact list.
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:write:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
custom_field_name(required)string— The custom field's name. When `use_as_external_url_parameter` is set to `true`, `custom_field_name` must not contain spaces. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string` - Any text value. - `number` - Numeric value. Supports integers or decimals like 123.45. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. -
allow_third_party_accessboolean— Whether the custom field can be accessed by third party apps. -
contact_list_idsarray— The IDs of contact lists associated with the custom field. Retrieve available contact list IDs using the [**List campaign contact lists**](/docs/api/contact-center/#tag/campaigns/get/contact_center/outbound_campaign/contact_lists) API.Items:
string— The contact list's ID. -
default_valuestring— The custom field's default value. When `data_type` is `pick_list`, the default value must be one of the `pick_list_values`. -
pick_list_valuesarray— The list of supported values for the picklist. This field is required when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Whether the custom field is shown on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether the custom field is shown on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether the custom field is shown in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether the `custom_field_name` is used in defining external URLs launched for each engagement. When set to t`rue`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether the custom field is used in the consumer routing profile.
Example:
{
"custom_field_name": "contact_field_demo",
"data_type": "string",
"default_value": "option_a",
"pick_list_values": [
"option_a"
],
"contact_list_ids": [
"suk0leXNTye2JjIm6v0yCQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"allow_third_party_access": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Responses
Status: 201 Custom field created.
Content-Type: application/json
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. When `use_as_external_url_parameter` is set to `true`, `custom_field_name` must not contain spaces. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string` - Any text value. - `number` - Numeric value. Supports integers or decimals like 123.45. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. -
allow_third_party_accessboolean— Whether the custom field can be accessed by third party apps. -
contact_list_idsarray— The IDs of contact lists associated with the custom field. Retrieve available contact list IDs using the [**List campaign contact lists**](/docs/api/contact-center/#tag/campaigns/get/contact_center/outbound_campaign/contact_lists) API.Items:
string— The contact list's ID. -
default_valuestring— The custom field's default value. When `data_type` is `pick_list`, the default value must be one of the `pick_list_values`. -
pick_list_valuesarray— The list of supported values for the picklist. This field is required when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Whether the custom field is shown on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether the custom field is shown on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether the custom field is shown in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether the `custom_field_name` is used in defining external URLs launched for each engagement. When set to true, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether the custom field is used in the consumer routing profile.
Example:
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "contact_field_demo",
"data_type": "string",
"default_value": "option_a",
"pick_list_values": [
"option_a"
],
"contact_list_ids": [
"suk0leXNTye2JjIm6v0yCQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"allow_third_party_access": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `2107` <br> A custom field with this name already exists: {0}. <br> **Error Code:** `2108` <br> The data type provided for the custom field is not supported. <br> **Error Code:** `2109` <br> The default value format does not match the data type. <br> **Error Code:** `2110` <br> You've exceeded the maximum limit of 4096 custom fields. <br> **Error Code:** `2111` <br> Custom field name cannot contain spaces when `use_as_external_url_parameter` is `true`. Field name cannot contain spaces when `use_as_external_url_parameter` is `true`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a campaign contact list's custom field
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_list_custom_fields/{customFieldId} - Tags: Campaigns
Retrieve information about a campaign contact list custom field.
Scopes: contact_center_outbound_campaign_contactlist:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Responses
Status: 200 The campaign contact list's custom field is returned.
Content-Type: application/json
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string` - Any text value. - `number` - Numeric value. Supports integers or decimals, like `123.45`. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. -
allow_third_party_accessboolean— Whether the custom field can be accessed by third party apps. -
contact_list_idsarray— The IDs of contact lists associated with the custom field.Items:
string— The contact list's ID. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— The list of supported values for the picklist. This is only valid when `data_type` is `pick_list`.Items:
string -
show_in_inbound_notificationboolean— Whether the custom field is shown on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether the custom field is shown on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether the custom field is shown in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether the `custom_field_name` is used in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether the custom field is used in the consumer routing profile.
Example:
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "Preferred Contact Method",
"data_type": "string",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"contact_list_ids": [
"suk0leXNTye2JjIm6v0yCQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"allow_third_party_access": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete a campaign contact list's custom field
- Method:
DELETE - Path:
/contact_center/outbound_campaign/contact_list_custom_fields/{customFieldId} - Tags: Campaigns
Delete a custom field in a campaign contact list.
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:delete:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Responses
Status: 204 Custom field deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update a campaign contact list's custom field
- Method:
PATCH - Path:
/contact_center/outbound_campaign/contact_list_custom_fields/{customFieldId} - Tags: Campaigns
Update details of a campaign contact list's custom field.
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:update:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
allow_third_party_accessboolean— Whether the custom field can be accessed by third party apps. -
contact_list_idsarray— The list of contact list IDs that should be associated with the custom field. When updating this array, the operation performs a **full replacement** of the existing list rather than an additive merge. This means that any previously associated contact list IDs not included in the update request will be removed from the association. If a contact list that is currently associated with this custom field is deleted or becomes unavailable, the corresponding value in that field becomes invalid and should be handled appropriately by the client application. Ensure that updated contact list IDs reference valid and existing contact lists to avoid invalid references or data integrity issues.Items:
string— The unique identifier of a contact list associated with the custom field. -
custom_field_namestring— The custom field's name. -
data_typestring, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string`- Any text value. - `number` - Numeric value. Supports integers or decimals, like `123.45`. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. **Note** Modifying the `data_type` will invalidate all previously configured related variables. -
default_valuestring— The custom field's default value. -
pick_list_valuesarray— The list of the picklist's supported values. This is only valid when `data_type` is `pick_list`. When updating this array, the update operation performs a full replacement of the existing list rather than a merge. Removing values from the list does not affect any existing contacts that already use those values. They remain valid for those contacts. Values currently in use can still be removed from the picklist definition.Items:
string -
show_in_inbound_notificationboolean— Whether the custom field is shown on the inbound engagement notification in the Zoom client. -
show_in_profile_tabboolean— Whether the custom field is shown on the profile tab in the Zoom client. -
show_in_transferred_callsboolean— Whether the custom field is shown in calls transferred to Zoom Phone. -
use_as_external_url_parameterboolean— Whether the `custom_field_name` is used in defining external URLs launched for each engagement. When set to `true`, the `custom_field_name` should not contain any spaces. -
use_as_routing_profile_parameterboolean— Whether the custom field is used in the consumer routing profile.
Example:
{
"custom_field_name": "Preferred Contact Method",
"data_type": "string",
"default_value": "phone",
"pick_list_values": [
"phone"
],
"contact_list_ids": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"use_as_routing_profile_parameter": true,
"use_as_external_url_parameter": false,
"show_in_transferred_calls": true,
"allow_third_party_access": true,
"show_in_inbound_notification": true,
"show_in_profile_tab": false
}
Responses
Status: 204 Custom field updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `2107` <br> A custom field with this name already exists: {0}. <br> **Error Code:** `2108` <br> The data type provided for the custom field is not supported. <br> **Error Code:** `2109` <br> The default value format does not match the data type. <br> **Error Code:** `2111` <br> Custom field name cannot contain spaces when use_as_external_url_parameter is true. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2112` <br> Custom field does not exist: {0}. <br> **Error Code:** `5001` <br> Contact list not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List campaign contact lists
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_lists - Tags: Campaigns
List campaign contact lists.
Scopes: contact_center_outbound_campaign_contactlist:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contactlist:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Campaign contact lists or do not contact lists are returned.
Content-Type: application/json
-
contact_listsarray— Array of contact lists or DNC listsItems:
-
contact_list_id(required)string— The campaign contact list's ID or DNC list's ID. -
contact_list_name(required)string— The campaign contact list's name or DNC list's name. -
contact_list_descriptionstring— The campaign contact list's description or DNC list's description. -
contacts_countinteger— Number of contacts in the contact list or DNC list.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"contact_lists": [
{
"contact_list_id": "MN2Dtcb2T-yT5CU3clN-AA",
"contact_list_name": "Contact List",
"contact_list_description": "Description",
"contacts_count": 1
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a campaign contact list
- Method:
POST - Path:
/contact_center/outbound_campaign/contact_lists - Tags: Campaigns
Create a campaign contact list.
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:write:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
contact_list_name(required)string— The contact list's name. -
contact_list_descriptionstring— The contact list's description. -
contact_list_typestring, possible values:"contact", "do_not_contact", default:"contact"— The contact list's type.
Example:
{
"contact_list_name": "Contact List",
"contact_list_description": "This is a description",
"contact_list_type": "contact"
}
Responses
Status: 201 **HTTP Status Code:** `201` Campaign contact list is created.
Content-Type: application/json
-
contact_list_descriptionstring— The contact list's description. -
contact_list_idstring— The newly created contact list's ID. -
contact_list_namestring— The contact list's name. -
contact_list_typestring— The contact list's type. -
contacts_countinteger— Number of contacts.
Example:
{
"contact_list_id": "rfMoVPVYS3yjWJAzdOOlWA",
"contact_list_name": "Contact List",
"contact_list_description": "Description",
"contacts_count": 0,
"contact_list_type": "contact"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Batch update campaign contact lists
- Method:
PATCH - Path:
/contact_center/outbound_campaign/contact_lists - Tags: Campaigns
Batch update campaign contact lists.
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:update:outbound_campaign_contactlist:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contact_list_id(required)string— Campaign contact list ID. -
contact_list_descriptionstring— The campaign contact list's description. -
contact_list_namestring— The campaign contact list's name.
Example:
{
"contact_list_id": "07UQHRzvQ02R_o-l9pBB4w",
"contact_list_name": "New Name",
"contact_list_description": "New Description"
}
Responses
Status: 200 **HTTP Status Code:** `200` Campaign contact lists are updated.
Content-Type: application/json
-
failed_contact_listsarray— List of contact lists that failed to patch.Items:
-
contact_list_idstring— The contact list's ID. -
errorstring— The failure reason.
-
Example:
{
"failed_contact_lists": [
{
"contact_list_id": "07UQHRzvQ02R_o-l9pBB4w",
"error": "Contact list not found"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get a campaign contact list
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId} - Tags: Campaigns
Get a campaign contact list.
Scopes: contact_center_outbound_campaign_contactlist:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Campaign contact list is returned.
Content-Type: application/json
-
contact_list_id(required)string— The campaign contact list's ID. -
contact_list_name(required)string— The campaign contact list's name. -
contact_list_descriptionstring— The campaign contact list's description. -
contact_list_typestring, possible values:"contact", "do_not_contact"— Contact list type. -
contacts_countinteger— Number of contacts in the contact list.
Example:
{
"contact_list_id": "MN2Dtcb2T-yT5CU3clN-AA",
"contact_list_name": "Contact List",
"contact_list_description": "Description",
"contacts_count": 1,
"contact_list_type": "contact"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list is not found <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Remove a campaign contact list
- Method:
DELETE - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId} - Tags: Campaigns
Delete a campaign contact list
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:delete:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Campaign contact list is removed.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update a campaign contact list
- Method:
PATCH - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId} - Tags: Campaigns
Update a campaign contact list
Scopes: contact_center_outbound_campaign_contactlist:write:admin
Granular Scopes: contact_center:update:outbound_campaign_contactlist:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
contact_list_descriptionstring— Description for the campaign contact list -
contact_list_namestring— The name of the campaign contact list
Example:
{
"contact_list_name": "New Name",
"contact_list_description": "New Description"
}
Responses
Status: 204 **HTTP Status Code:** `204` Campaign contact list is updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List a campaign contact list's contacts
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts - Tags: Campaigns
List contacts on a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contacts:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Campaign contacts of contact list are returned.
Content-Type: application/json
-
contactsarray— Array of contacts.Items:
-
contact_display_name(required)string— The contact's display name. -
contact_id(required)string— The contact ID. -
contact_phones(required)array— The contact's phone numbers.Items:
-
contact_phone_number(required)string— Phone number, in E164 format. -
contact_phone_type(required)string, possible values:"Main", "Home", "Work", "Mobile", "Other"— The phone's type.
-
-
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_emailsarray— Array of emails.Items:
string, format:email— The contact's email. -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_rolestring— The contact's role. -
custom_fieldsarray— Custom fields associated with the current contact.Items:
-
custom_field_id(required)string— The custom field's ID. Required - must not be null or empty. -
custom_field_value(required)string— The custom field's value. All custom field values are represented as `strings`, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`. - `string` - Any text content. - `number` - Numeric string representing integer or decimal values, such as '123.45'. Valid range is -9999999999 to 9999999999. - `boolean - 'true' or 'false'. - `email` - Valid email address format. - `phone` - Phone number string including country code, like `+1-202-555-0147`. - `percent` - Numeric string between 0 and 100, like `85.5`. - `currency` - Decimal string ≥ 0 with up to two decimal places. - `date_time` - ISO 8601 formatted string, like `2026-01-28T08:00:00Z`. - `pick_list` - One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"contacts": [
{
"contact_id": "07UQHRzvQ02R_o-l9pBB4w",
"contact_display_name": "Jill Chill",
"contact_first_name": "Jill",
"contact_last_name": "Chill",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"test@example.com"
],
"contact_location": "Location",
"contact_account_number": "123",
"contact_company": "Zoom",
"contact_role": "developer",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5017` <br> More than one matching contact list found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Create a campaign contact list's contact
- Method:
POST - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts - Tags: Campaigns
Add a new contact to a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:write:admin
Granular Scopes: contact_center:write:outbound_campaign_contacts:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
contact_display_name(required)string— The contact's display name. -
contact_phones(required)array— Supports up to 5 phone numbers. Only one main or primary phone number is supported.Items:
-
contact_phone_number(required)string— Phone number in E164 format. -
contact_phone_type(required)string, possible values:"Main", "Work", "Home", "Mobile", "Other"— The phone's type.
-
-
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_emailsarray— Supports up to 4 emails, with a maximum of 1100 characters total.Items:
string— Email address -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_rolestring— The contact's role. -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone. -
custom_fieldsarray— Custom fields associated with the current contact.Items:
-
custom_field_id(required)string— The custom field's ID. Required, must not be null or empty) -
custom_field_value(required)string— The custom field's value. All custom field values are represented as **strings**, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`. - **string** - Any text content. - **number** - Numeric string representing integer or decimal values, like '123.45'. Valid range is -9999999999 to 9999999999. - **boolean** - 'true' or 'false'. - **email** - Valid email address format, like 'user@example.com'. - **phone** - Phone number string including country code, like '+1-202-555-0147'. - **percent** - Numeric string between 0 and 100, like '85.5'. - **currency** - Decimal string ≥ 0 with up to two decimal places, like '199.99'. - **date_time** - ISO 8601 formatted string, such as '2026-01-28T08:00:00Z'. - **pick_list** - One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
Example:
{
"contact_display_name": "Display Name",
"contact_first_name": "First Name",
"contact_last_name": "Last Name",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"test@example.com"
],
"contact_location": "Location",
"contact_account_number": "111",
"contact_company": "zoom",
"contact_role": "developer",
"contact_timezone": "America/Los_Angeles",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` New contact has been created.
Content-Type: application/json
-
contact_display_name(required)string— The contact's display name. -
contact_id(required)string— The contact's ID. -
contact_phones(required)array— Contact emailsItems:
-
contact_phone_number(required)string— The phone number, in E164 format. -
contact_phone_type(required)string, possible values:"Main", "Work", "Home", "Mobile", "Other"— Phone type
-
-
contact_account_numberstring— Account number. -
contact_companystring— Contact company. -
contact_emailsarray— The contact's email addresses.Items:
string, format:email— Email address -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_rolestring— Contact role -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone. -
custom_fieldsarray— Custom fields associated with the current contact.Items:
-
custom_field_id(required)string— The custom field's ID. Required - must not be null or empty. -
custom_field_value(required)string— The value of the custom field. All custom field values are represented as **strings**, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`. - **string** - Any text content. - **number** - Numeric string representing integer or decimal values, like '123.45'. Valid range is -9999999999 to 9999999999. - **boolean** - 'true' or 'false'. - **email** - Valid email address format, like 'user@example.com'. - **phone** - Phone number string including country code, like '+1-202-555-0147'. - **percent** - Numeric string between 0 and 100, like '85.5'. - **currency** - Decimal string ≥ 0 with up to two decimal places, such as '199.99'. - **date_time** - ISO 8601 formatted string, like'2026-01-28T08:00:00Z'. - **pick_list** - One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
Example:
{
"contact_id": "GgAOGeRFQOqJlphf3gqhqg",
"contact_display_name": "Jill Chill",
"contact_first_name": "Jill",
"contact_last_name": "Chill",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"jillchill@example.com"
],
"contact_location": "Location",
"contact_account_number": "111",
"contact_company": "zoom",
"contact_role": "developer",
"contact_timezone": "America/Los_Angeles",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `5003` <br> Contact already exists. <br> **Error Code:** `5004` <br> Reached the limit of contacts per contact list. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update a batch of contacts on a campaign contact list
- Method:
PATCH - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts - Tags: Campaigns
Batch update contacts on a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:write:admin
Granular Scopes: contact_center:update:outbound_campaign_contacts:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contactsarray— Array of contacts to patch.Items:
-
contact_id(required)string— The contact's ID. -
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_display_namestring— The contact's display name. -
contact_emailsarray— Supports up to 4 emails, up to a maximum of 1100 characters.Items:
string, format:email— Email address. -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_phonesarray— Supports up to 5 numbers. Only one main or primar phone number is supported.Items:
-
contact_phone_numberstring— Phone number, in E164 format. -
contact_phone_typestring, possible values:"Main", "Work", "Home", "Mobile", "Other"— The phone's type.
-
-
contact_rolestring— The contact's role. -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone. -
custom_fieldsarray— Custom fields associated with the current contact. If omitted, existing custom fields remain unchanged. If provided as an empty array, all existing custom fields for the contact will be removed. If provided as null, the field is ignored and no changes are made.Items:
-
custom_field_id(required)string— The custom field's ID. Required. Must not be null or empty. -
custom_field_value(required)string— The value of the custom field. All custom field values are represented as **strings**, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`: - **string**: Any text content. - **number**: Numeric string representing integer or decimal values (e.g., '123.45'). Valid range: -9999999999 to 9999999999. - **boolean**: 'true' or 'false'. - **email**: Valid email address format (e.g., 'user@example.com'). - **phone**: Phone number string including country code (e.g., '+1-202-555-0147'). - **percent**: Numeric string between 0 and 100 (e.g., '85.5'). - **currency**: Decimal string ≥ 0 with up to two decimal places (e.g., '199.99'). - **date_time**: ISO 8601 formatted string (e.g., '2026-01-28T08:00:00Z'). - **pick_list**: One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
-
Example:
{
"contacts": [
{
"contact_id": "MN2Dtcb2T-yT5CU3clN-AA",
"contact_display_name": "Jill Chill",
"contact_first_name": "Jill",
"contact_last_name": "Chill",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"jillchill@example.com"
],
"contact_location": "Zurich",
"contact_account_number": "111",
"contact_company": "Zoom",
"contact_role": "developer",
"contact_timezone": "America/Los_Angeles",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
]
}
Responses
Status: 200 **HTTP Status Code:** `200` Contact list is updated.
Content-Type: application/json
-
failed_contactsarray— List of contacts that failed to patch.Items:
-
contact_idstring— The contact's ID. -
errorstring— The reason for failure.
-
Example:
{
"failed_contacts": [
{
"contact_id": "MN2Dtcb2T-yT5CU3clN-AA",
"error": "Contact not found"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Insert a batch of contacts into a campaign contact list
- Method:
POST - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts/batch - Tags: Campaigns
Batch insert contacts into a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:write:admin
Granular Scopes: contact_center:write:outbound_campaign_contacts:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
contactsarray— Array of contacts to insert.Items:
-
contact_display_name(required)string— The contact's display name. -
contact_phones(required)array— Supports up to 5 numbers. Only one main or primary phone number is supported.Items:
-
contact_phone_number(required)string— The phone number, in E164 format. -
contact_phone_type(required)string, possible values:"Main", "Work", "Home", "Mobile", "Other"— The phone's type.
-
-
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_emailsarray— Supports up to 4 emails.Items:
string, format:email— Email address. -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_rolestring— The contact's role. -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone.
-
Example:
{
"contacts": [
{
"contact_display_name": "Jane Doe",
"contact_first_name": "Jane",
"contact_last_name": "Doe",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"jdoe@example.com"
],
"contact_location": "Los_Angeles",
"contact_account_number": "73510482",
"contact_company": "Zoom",
"contact_role": "Developer",
"contact_timezone": "America/Los_Angeles"
}
]
}
Responses
Status: 200 **HTTP Status Code:** `200` The request was processed successfully. Check the `failed_contacts` array for any contacts that could not be created.
Content-Type: application/json
-
failed_contactsarray— List of contacts that failed to be created.Items:
-
contact_indexstring— The contact's index from the input list, zero-based. -
errorstring— The error message describing why the contact failed to be created.
-
Example:
{
"failed_contacts": [
{
"contact_index": "3",
"error": "Invalid Email"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a campaign contact list's contact
- Method:
GET - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts/{contactId} - Tags: Campaigns
Get a contact on a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contacts:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Campaign contact list contact is returned.
Content-Type: application/json
-
contact_display_name(required)string— The contact's display name -
contact_id(required)string— Campaign contact list contact ID. -
contact_phones(required)array— Array of phones.Items:
-
contact_phone_number(required)string— Phone number, in E164 format. -
contact_phone_type(required)string, possible values:"Main", "Home", "Work", "Mobile", "Other"— The phone's type.
-
-
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_emailsarray— Array of emails.Items:
string, format:email— The contact's email. -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_rolestring— The contact's role. -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone. -
custom_fieldsarray— Custom fields associated with the current contact.Items:
-
custom_field_id(required)string— The custom field's ID. Required. Must not be null or empty. -
custom_field_value(required)string— The custom field's value. All custom field values are represented as **strings**, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`: - **string**: Any text content. - **number**: Numeric string representing integer or decimal values (e.g., '123.45'). Valid range: -9999999999 to 9999999999. - **boolean**: 'true' or 'false'. - **email**: Valid email address format (e.g., 'user@example.com'). - **phone**: Phone number string including country code (e.g., '+1-202-555-0147'). - **percent**: Numeric string between 0 and 100 (e.g., '85.5'). - **currency**: Decimal string ≥ 0 with up to two decimal places (e.g., '199.99'). - **date_time**: ISO 8601 formatted string (e.g., '2026-01-28T08:00:00Z'). - **pick_list**: One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
Example:
{
"contact_id": "07UQHRzvQ02R_o-l9pBB4w",
"contact_display_name": "Joe Chill",
"contact_first_name": "Joe",
"contact_last_name": "Chill",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"test@example.com"
],
"contact_location": "Location",
"contact_account_number": "123",
"contact_company": "zoom",
"contact_role": "developer",
"contact_timezone": "America/Los_Angeles",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5017` <br> More than one matching contact list found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br> **Error Code:** `5002` <br> Contact not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Remove campaign contact list's contact
- Method:
DELETE - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts/{contactId} - Tags: Campaigns
Remove a contact by ID from a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:write:admin
Granular Scopes: contact_center:delete:outbound_campaign_contacts:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Contact is deleted.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list is not found. <br> **Error Code:** `5002` <br> Contact is not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update contact on a campaign contact list
- Method:
PATCH - Path:
/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts/{contactId} - Tags: Campaigns
Update a contact on a campaign contact list.
Scopes: contact_center_outbound_campaign_contacts:write:admin
Granular Scopes: contact_center:update:outbound_campaign_contacts:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
contact_account_numberstring— The contact's account number. -
contact_companystring— The contact's company. -
contact_display_namestring— The contact's display name. -
contact_emailsarray— Supports up to 4 emails, a maximum of 1100 characters in total.Items:
string— Email address. -
contact_first_namestring— The contact's first name. -
contact_last_namestring— The contact's last name. -
contact_locationstring— The contact's location. -
contact_phonesarray— Supports up to 5 numbers. Only one main or primar phone number is supported.Items:
-
contact_phone_numberstring— Phone number, in E164 format. -
contact_phone_typestring, possible values:"Main", "Work", "Home", "Mobile", "Other"— The phone's type.
-
-
contact_rolestring— The contact's role. -
contact_timezonestring— [TZDB identifier](/docs/api/references/abbreviations/#timezones) time zone. -
custom_fieldsarray— Custom fields associated with the current contact. If omitted, existing custom fields remain unchanged. If provided as an empty array, all existing custom fields for the contact will be removed. If provided as null, the field is ignored and no changes are made.Items:
-
custom_field_id(required)string— The custom field's ID. Required. Must not be null or empty. -
custom_field_value(required)string— The custom field's value. All custom field values are represented as **strings**, regardless of their logical data type specified in `data_type`. The API consumer should provide the value in the correct format according to the `data_type`. - **string** - Any text content. - **number** - Numeric string representing integer or decimal values such as '123.45'. Valid range is -9999999999 to 9999999999. - **boolean** - 'true' or 'false'. - **email** - Valid email address format, like 'user@example.com'. - **phone** - Phone number string including country code, like '+1-202-555-0147'. - **percent** - Numeric string between 0 and 100, like '85.5'. - **currency** - Decimal string ≥ 0 with up to two decimal places such as '199.99'. - **date_time** - ISO 8601 formatted string, like '2026-01-28T08:00:00Z'. - **pick_list** - One of the allowed option values defined in `pick_list_values`. Input validation should follow these rules based on the `data_type`.
-
Example:
{
"contact_display_name": "Jill Chill",
"contact_first_name": "Jill",
"contact_last_name": "Chill",
"contact_phones": [
{
"contact_phone_number": "+12345551100",
"contact_phone_type": "Main"
}
],
"contact_emails": [
"jillchill@example.com"
],
"contact_location": "Zurich",
"contact_account_number": "111",
"contact_company": "Zoom",
"contact_role": "developer",
"contact_timezone": "America/Los_Angeles",
"custom_fields": [
{
"custom_field_id": "suk0leXNTye2JjIm6v0yCQ",
"custom_field_value": "+1-202-555-0147"
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Contact is updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5001` <br> Contact list not found. <br> **Error Code:** `5002` <br> Contact not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List a campaign contact's custom fields
- Method:
GET - Path:
/contact_center/outbound_campaign/contacts/{contactId}/custom_fields - Tags: Campaigns
Retrieve all custom fields associated with a contact.
Scopes: contact_center_outbound_campaign_contactlist:read:admin
Granular Scopes: contact_center:read:outbound_campaign_contactlist:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Contact custom fields are returned.
Content-Type: application/json
-
custom_fieldsarray— A list of custom fields associated with the contact.Items:
-
custom_field_id(required)string— The custom field's ID. -
custom_field_name(required)string— The custom field's name. -
data_type(required)string, possible values:"string", "number", "boolean", "email", "phone", "percent", "currency", "date_time", "pick_list"— The custom field's data type. - `string` - Any text value. - `number` - Numeric value. Supports integers or decimals, like `123.45`. Valid range is -9999999999 to 9999999999. - `percent` - Numeric value between 0 and 100. May include decimals. - `currency` - Decimal value ≥ 0 with up to two decimal places. When `data_type` is `pick_list`, `pick_list_values` specifies the allowed options. -
custom_field_valuestring— The contact's custom field value.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"custom_fields": [
{
"custom_field_id": "7381d210-360e-4fbd-86e4-33eb7109b084",
"custom_field_name": "Preferred Contact Method",
"data_type": "string",
"custom_field_value": "phone"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2101` <br> Contact does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List campaign DNC phone numbers
- Method:
GET - Path:
/contact_center/outbound_campaign/dnc_lists/{dncListId}/phones - Tags: Campaigns
List phone numbers on a campaign DNC (Do Not Call) list.
Scopes: contact_center_outbound_campaign_dnc_list_phones:read:admin
Granular Scopes: contact_center:read:outbound_campaign_dnc_list_phones:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Phone numbers of DNC list are returned.
Content-Type: application/json
-
dnc_list_phonesarray— Array of phone numbers in the DNC list.Items:
-
phone_id(required)string— The phone record ID. -
phone_number(required)string— Phone number, in E164 format.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"dnc_list_phones": [
{
"phone_id": "07UQHRzvQ02R_o-l9pBB4w",
"phone_number": "+12345551100"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5020` <br> DNC list is not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Batch create a campaign DNC list's phones
- Method:
POST - Path:
/contact_center/outbound_campaign/dnc_lists/{dncListId}/phones - Tags: Campaigns
Batch add phone numbers to a Do Not Call (DNC) list.
Scopes: contact_center_outbound_campaign_dnc_list_phones:write:admin
Granular Scopes: contact_center:write:outbound_campaign_dnc_list_phones:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
phone_numbers(required)array— Phone numbers to be added to the DNC list.Items:
string— Phone number of the phone to be added.
Example:
{
"phone_numbers": [
"+12095551212"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Phone numbers successfully added.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5020` <br> DNC list is not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Batch delete a campaign DNC list's phones
- Method:
DELETE - Path:
/contact_center/outbound_campaign/dnc_lists/{dncListId}/phones - Tags: Campaigns
Batch delete phone numbers from a Do Not Call (DNC) list.
Scopes: contact_center_outbound_campaign_dnc_list_phones:write:admin
Granular Scopes: contact_center:delete:outbound_campaign_dnc_list_phones:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
phone_idsarray— IDs of the phones to be deleted.Items:
string— ID of the phone to be deleted.
Example:
{
"phone_ids": [
"pJ_DCxrmQMevo0MUJvEUAA"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Phones are deleted.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5020` <br> DNC list is not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List dispositions
- Method:
GET - Path:
/contact_center/dispositions - Tags: Dispositions
Return a list of available dispositions.
Scopes: contact_center_disposition:read:admin
Granular Scopes: contact_center:read:list_dispositions:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Dispositions returned.
Content-Type: application/json
-
dispositionsarray— Information about the disposition.Items:
-
disposition_descriptionstring— The disposition's description. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
disposition_typestring, possible values:"single", "multi_level"— The disposition type. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_countinteger— The number of queues associated with the disposition. -
statusstring, possible values:"inactive", "active"— The disposition's active status. * `inactive` - Deactivated. * `active` - Activated.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"status": "inactive",
"queue_count": 0,
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"disposition_type": "single"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a disposition
- Method:
POST - Path:
/contact_center/dispositions - Tags: Dispositions
Create a new disposition. Dispositions let agents assign an outcome or topic to each engagement. After creating dispositions, you can add them to queues.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:write:disposition:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
disposition_name(required)string— The disposition's name. -
disposition_descriptionstring— The disposition's description. -
disposition_typestring, possible values:"single", "multi_level", default:"single"— The disposition's type. -
statusstring, possible values:"inactive", "active", default:"inactive"— The disposition's active status. * `inactive` - Deactivated. * `active` - Activated. -
sub_dispositionsarray— For `single` dispositions, this field can be ignored. For `multi_level` dispositions, there must be at least one subdisposition. There can be up to 500, and each parent node can have up to 20 child nodes. Child nodes can only have up to 4 levels.Items:
-
current_index(required)number— The subdisposition's unique identifier. -
parent_index(required)number— The index of the parent node that the current node belongs to. If it is `0`, it means that the current node belongs to the root node. If the parent index does not exist, the node will be discarded. -
sub_disposition_name(required)string— The subdisposition's name.
-
Example:
{
"status": "inactive",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"disposition_type": "multi_level",
"sub_dispositions": [
{
"sub_disposition_name": "Subdisposition A",
"current_index": 1,
"parent_index": 0
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Disposition created.
Content-Type: application/json
-
disposition_descriptionstring— The disposition's description. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
disposition_typestring, possible values:"single", "multi_level"— The disposition's type. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
statusstring, possible values:"inactive", "active"— The disposition's active status. * `inactive` - Deactivated. * `active` - Activated.
Example:
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"disposition_type": "multi_level"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2402` <br> That disposition name already exists. Use a different name. <br> **Error Code:** `2504` <br> Sub dispositions total size should be less than or equal to 500. <br> **Error Code:** `2505` <br> Sub Disposition current index repeated. <br> **Error Code:** `2507` <br> Multi_level disposition no sub dispositions. <br> **Error Code:** `2508` <br> Duplicate sub disposition name on the same tier. <br> **Error Code:** `2509` <br> Sub disposition tier size should be more than 0 and less than 5. <br> **Error Code:** `2512` <br> The number of sub dispositions on the same tier should less than or equal to 20. <br> **Error Code:** `2514` <br> Sub Disposition current_index is required. <br> **Error Code:** `2515` <br> Sub Disposition parent_index is required. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List disposition sets
- Method:
GET - Path:
/contact_center/dispositions/sets - Tags: Dispositions
Return a list of available disposition sets. Use sets to organize dispositions into groups.
Scopes: contact_center_disposition:read:admin
Granular Scopes: contact_center:read:list_disposition_sets:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Disposition sets returned.
Content-Type: application/json
-
disposition_setsarray— Information about the disposition set.Items:
-
disposition_set_descriptionstring— The set's description. -
disposition_set_idstring— The set's ID. -
disposition_set_namestring— The set's name. -
dispositions_countinteger— The number of dispositions associated with the disposition set. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queues_countinteger— The number of queues associated with the disposition set. -
statusstring, possible values:"inactive", "active"— The set's active status. * `inactive` - Deactivated. * `active` - Activated.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"disposition_sets": [
{
"disposition_set_id": "saaHWgVMGQU69soco456oNA",
"disposition_set_name": "Lead created",
"disposition_set_description": "New leads generated.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"dispositions_count": 0,
"queues_count": 0
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a disposition set
- Method:
POST - Path:
/contact_center/dispositions/sets - Tags: Dispositions
Create a new disposition set.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:write:disposition_set:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
disposition_set_name(required)string— The set's name. -
disposition_idsarray— Information about the set's assigned dispositions.Items:
string— The disposition's ID. -
disposition_set_descriptionstring— The set's description. -
statusstring, possible values:"inactive", "active", default:"inactive"— The set's active status. * `inactive` - Deactivated. * `active` - Activated.
Example:
{
"status": "inactive",
"disposition_set_name": "Lead created",
"disposition_set_description": "New leads generated.",
"disposition_ids": [
"W_VATTk_Q5aW6z5rZtBxAQ"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Disposition set created.
Content-Type: application/json
-
disposition_set_descriptionstring— The set's description. -
disposition_set_idstring— The set's ID. -
disposition_set_namestring— The set's name. -
dispositionsarray— Information about the set's assigned dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
statusstring, possible values:"inactive", "active"— The set's active status. * `inactive` - Deactivated. * `active` - Activated.
Example:
{
"disposition_set_id": "saaHWgVMGQU69soco456oNA",
"disposition_set_name": "Lead created",
"disposition_set_description": "New leads generated.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2502` <br> That set name already exists. Use a different name. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2403` <br> Disposition does not exist: $disposition_ids. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get a disposition set
- Method:
GET - Path:
/contact_center/dispositions/sets/{dispositionSetId} - Tags: Dispositions
Retrieve information about a disposition set.
Scopes: contact_center_disposition:read:admin
Granular Scopes: contact_center:read:disposition_set:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Set returned.
Content-Type: application/json
-
disposition_set_descriptionstring— The set's description. -
disposition_set_idstring— The set's ID. -
disposition_set_namestring— The set's name. -
dispositionsarray— Information about the set's assigned dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queuesarray— Information about the set's assigned queue.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
statusstring, possible values:"inactive", "active"— The set's active status. * `inactive` — Deactivated. * `active` — Activated.
Example:
{
"disposition_set_id": "saaHWgVMGQU69soco456oNA",
"disposition_set_name": "Lead created",
"disposition_set_description": "New leads generated.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry"
}
],
"queues": [
{
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "Sales"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2513` <br> More than one matching disposition set found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2501` <br> Disposition Set does not exist: $setId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a disposition set
- Method:
DELETE - Path:
/contact_center/dispositions/sets/{dispositionSetId} - Tags: Dispositions
Delete a disposition set.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:delete:disposition_set:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204 ` Disposition Set deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2501` <br> Set does not exist: $setId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a disposition set
- Method:
PATCH - Path:
/contact_center/dispositions/sets/{dispositionSetId} - Tags: Dispositions
Update an existing disposition set.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:update:disposition_set:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
disposition_idsarray— A list of disposition IDs to add to the set.Items:
string— The disposition's ID. -
disposition_set_descriptionstring— The set's description. -
disposition_set_namestring— The set's name. -
statusstring, possible values:"inactive", "active"— The set's active status. * `inactive` — Deactivated. * `active` — Activated.
Example:
{
"disposition_set_name": "Lead created",
"disposition_set_description": "New leads generated.",
"status": "inactive",
"disposition_ids": [
"W_VATTk_Q5aW6z5rZtBxAQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Set updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2502` <br> That set name already exists. Use a different name. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2501` <br> Set does not exist: $dispositionSetId. <br> **Error Code:** `2403` <br> Dispositions do not exist: $disposition_ids. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Get a disposition
- Method:
GET - Path:
/contact_center/dispositions/{dispositionId} - Tags: Dispositions
Retrieve information about a disposition.
Scopes: contact_center_disposition:read:admin
Granular Scopes: contact_center:read:disposition:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Disposition returned.
Content-Type: application/json
-
disposition_descriptionstring— The disposition's description. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
disposition_typestring, possible values:"single", "multi_level"— The disposition's type. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_countinteger— The number of queues associated with the disposition. -
statusstring, possible values:"inactive", "active"— The disposition's active status. * `inactive` - Deactivated. * `active` - Activated. -
sub_dispositionsarray— The list of sub-dispositions.Items:
-
current_indexnumber— The sub-disposition's unique identifier. -
parent_indexnumber— The index of the parent node that the current sub-disposition belongs to. `parent_index` - `0` means that the parent node of the current node is the root node. -
sub_disposition_idstring— The sub-disposition's ID. -
sub_disposition_namestring— The sub-disposition's name.
-
Example:
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"status": "inactive",
"queue_count": 0,
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"disposition_type": "multi_level",
"sub_dispositions": [
{
"sub_disposition_id": "OYTRVt3gQ2iAGjoUIjeZxq",
"sub_disposition_name": "Sub-Disposition A",
"current_index": 1,
"parent_index": 1
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2404` <br> More than one matching disposition found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2401` <br> Disposition does not exist: $dispositionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a disposition
- Method:
DELETE - Path:
/contact_center/dispositions/{dispositionId} - Tags: Dispositions
Delete an existing disposition.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:delete:disposition:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204 ` Disposition deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2401` <br> Disposition does not exist: $dispositionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a disposition
- Method:
PATCH - Path:
/contact_center/dispositions/{dispositionId} - Tags: Dispositions
Update an existing disposition.
Scopes: contact_center_disposition:write:admin
Granular Scopes: contact_center:update:disposition:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
disposition_descriptionstring— The disposition's description. -
disposition_namestring— The disposition's name. -
disposition_typestring, possible values:"single", "multi_level", default:"single"— The disposition's type. -
statusstring, possible values:"inactive", "active"— The disposition's active status. * `inactive` — Deactivated. * `active` — Activated. -
sub_dispositionsarray— For `single` dispositions, this field can be ignored. For `multi_level` dispositions, there must be at least one subdispositions, there can be up to 500, and each parent node can have up to 20 child nodes. At the same time, child nodes can only have up to 4 levels.Items:
-
current_index(required)number— The subdisposition's unique identifier. -
parent_index(required)number— The index of the parent node to which the current node belongs. If it is `0`, it means that the current node belongs to the root node. If the parent index does not exist, the node will be discarded. -
sub_disposition_name(required)string— The subdisposition's name. -
sub_disposition_idstring— The subdisposition's ID.
-
Example:
{
"disposition_name": "Inquiry",
"status": "inactive",
"disposition_description": "Inquiry dispositions.",
"disposition_type": "multi_level",
"sub_dispositions": [
{
"sub_disposition_id": "HDLHFK_gdhgfajhsedfhg",
"sub_disposition_name": "Subdisposition A",
"current_index": 1,
"parent_index": 0
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Disposition updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2402` <br> That disposition name already exists. Use a different name. <br> **Error Code:** `2504` <br> Sub disposition's total size should be less than or equal to 500. <br> **Error Code:** `2507` <br> Multi_level disposition no subdispositions. <br> **Error Code:** `2508` <br> Duplicate subdisposition name on the same tier. <br> **Error Code:** `2509` <br> Sub disposition tier size should be more than 0 and less than 5. <br> **Error Code:** `2510` <br> Can not update `multi_level` to single. <br> **Error Code:** `2512` <br> The number of sub dispositions on the same tier should less than or equal to 20. <br> **Error Code:** `2505` <br> Sub Disposition current index repeated. <br> **Error Code:** `2514` <br> Sub Disposition current_index is required. <br> **Error Code:** `2515` <br> Sub Disposition parent_index is required. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2401` <br> Disposition does not exist: $dispositionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Start an engagement
- Method:
POST - Path:
/contact_center/engagement - Tags: Engagements
Start an engagement. Currently only supports the Work Item channel.
Note When creating a work item, variable conflicts are resolved using these guidelines.
- If a key exists in both
consumerInfoandvariableList, the value fromconsumerInfotakes precedence. - If duplicate keys are provided within
variableList, only the first occurrence is used. - If a key appears only once in
variableList, the provided value is applied.
Scopes: contact_center_engagement:write:admin
Granular Scopes: contact_center:write:engagement:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
channelsarray— The task's channels. It contains only one element when starting an engagement.Items:
-
channel(required)string, possible values:"work_item"— The channel you want to start. Currently only supports `work_item`. -
channel_source(required)string, possible values:"API"— The channel source you want to start. Currently only supports `API`.
-
-
consumersarray— Consumer information. Contains only one element when starting an engagement.Items:
-
consumer_display_name(required)string— The consumer's name. -
consumer_emailstring— The consumer's email. -
consumer_external_idstring— A unique identifier for the consumer initiating the conversation. -
consumer_numberstring— The consumer's phone number, in E.164 format. Maximum length is 15 characters.
-
-
flowobject— The flow info required to start a new engagement.-
flow_entry_id(required)string— The `flow_entry_id`, which should be bound to a Contact Center flow.
-
-
language_codestring— Equivalent to setting the `global_system.Engagement.language` variable. Default value is `en-US`. |Language | Value| | - | - | | Chinese (Simplified) | zh-CN | | Chinese (Traditional) | zh-TW | | Chinese Cantonese | yue-CN | | Chinese Mandarin | cmn-CN | | Danish (Denmark) |da-DK| | Dutch (Netherlands) | nl-NL | | English (Australia) | en-AU | | English (New Zealand) | en-NZ | | English (UK) | en-GB | | English (US) | en-US | | French (Canada) | fr-CA | | French (France) | fr-FR | |German (Germany) | de-DE | | Italian (Italy) | it-IT | | Japanese (Japan) |ja-JP | | Korean (Korea) | ko-KR | | Polish (Poland) | pl-PL | | Portuguese (Brazil) | pt-BR | | Portuguese (Portugal) |pt-PT | |Romanian (Romania) | ro-RO | | Russian (Russia) | ru-RU| | Spanish (European) | es-ES | |Spanish (Mexico) | es-MX | |Spanish (US) | es-US | | Swedish (Sweden) | sv-SE| | Turkish (Turkey) | tr-TR| -
variablesarray— Global variables.\nFor more information, see [Variables](/docs/api/contact-center/#tag/variables).Items:
-
name(required)string— The variable's name. -
value(required)string— The variable's value.
-
-
work_item_variablesobject— The variables required to initiate a work item engagement.-
work_item_name(required)string— Each work item's name or title. -
work_item_descstring— The work item's description. -
work_item_due_datestring— The work item's due date in `YYYY-MM-DDTHH:mm:ssZ` format. Time zone is `UTC`. -
work_item_hyperlinkstring— The link to the work item's detail. -
work_item_idstring— The request's unique identifier, used to ensure idempotency. We recommended using a UUID format. -
work_item_originstring— Where or how each work item was created. -
work_item_priorityinteger— The work item's priority. -
work_item_transcript_urlstring— Ingest and store an external transcript in the Contact Center. When provided, the associated transcript becomes accessible to agents directly from the work item while they are handling it. -
work_item_typestring— This field is automatically populated during engagement creation based on the configured settings. It will also be included in the response payload. -
work_item_type_idstring— The work item source type's ID. Find the work item type ID in the Contact Center's **Preferences**.
-
Example:
{
"work_item_variables": {
"work_item_id": "24fwet23525",
"work_item_name": "Research the market performance of competing companies.",
"work_item_desc": "Conduct an in-depth analysis of key competitors' overall performance in the target market, including but not limited to market share, sales trends, product positioning, pricing strategies, distribution channels, and recent market activities.",
"work_item_type_id": "w3pOm-CLRHmugqYIiByYHg",
"work_item_due_date": "2025-10-01T00:00:00Z",
"work_item_origin": "chat system",
"work_item_priority": 1,
"work_item_transcript_url": "https://api.example.com/v2/transcripts/download/yJAEEra27v4InERTcm77LQ",
"work_item_hyperlink": "www.example.com/ticket123"
},
"flow": {
"flow_entry_id": "4ad5A8qLTIunwdlpzSS4lg"
},
"language_code": "en-US",
"channels": [
{
"channel": "work_item",
"channel_source": "API"
}
],
"consumers": [
{
"consumer_external_id": "yJAEEra27v4InERTcm77LQ",
"consumer_display_name": "Jill Doe",
"consumer_email": "JillDoe@example.com",
"consumer_number": "+1234561212"
}
],
"variables": [
{
"name": "global_custom.user.name",
"value": "123"
}
]
}
Responses
Status: 201 Engagement information.
Content-Type: application/json
-
engagement_id(required)string— Engagement ID. -
start_time(required)string— Engagement start time in `YYYY-MM-DDThh:mm:ssZ` format. Time zone is `UTC`. -
channelsarray— The task's channels. It contains only one element when starting an engagement.Items:
-
channelstring, possible values:"work_item"— The channel you want to start. Currently only supports `work_item`. -
channel_sourcestring, possible values:"API"— The channel source you want to start. Currently only supports `API`.
-
-
consumersarray— A list of consumer information. It contains only one element when starting an engagement.Items:
-
consumer_display_namestring— The consumer's name. -
consumer_emailstring— The consumer's email. -
consumer_external_idstring— A unique identifier for the consumer initiating the conversation. -
consumer_idstring— The consumer's ID. -
consumer_numberstring— The user's phone number in E.164 format. Maximum length is 15 characters.
-
-
flowsarray— Information about the engagement's flows.Items:
-
flow_entry_idstring— The `flow_entry_id` bound to a Contact Center flow. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionstring— The flow's version.
-
-
language_codestring— Engagement language code. -
session_idstring— Session ID. -
variablesarray— Global variables. For more information, see [Variables](/docs/api/contact-center/#tag/variables)Items:
-
namestring— The variable's name. -
valuestring— The variable's value.
-
-
work_item_variablesobject-
work_item_descstring— The work item's description. -
work_item_due_datestring— The work item's due date in `YYYY-MM-DDTHH:mm:ss` format. Time zone is `UTC`. -
work_item_hyperlinkstring— The link to the work item's detail. -
work_item_idstring— The request's unique identifier, used to ensure idempotency. We recommend using UUID format. -
work_item_namestring— The work item's name or title. -
work_item_originstring— Where or how the work item was created. -
work_item_prioritystring— The work item's priority. -
work_item_source_idstring— Same as work item type's ID. -
work_item_transcript_urlstring— Ingest and store an external transcript in the Contact Center. When provided, the associated transcript becomes accessible to agents directly from the work item while they are handling it. -
work_item_typestring— The work item type's name. -
work_item_type_idstring— The work item source type's ID. **Note** This field is not yet supported.
-
Example:
{
"work_item_variables": {
"work_item_name": "Research the market performance of competing companies.",
"work_item_desc": "Conduct an in-depth analysis of key competitors' overall performance in the target market, including but not limited to market share, sales trends, product positioning, pricing strategies, distribution channels, and recent market activities.",
"work_item_type": "ticket",
"work_item_id": "24fwet23525",
"work_item_due_date": "2025-10-01T00:00:00",
"work_item_origin": "chat system",
"work_item_priority": "1",
"work_item_transcript_url": "https://api.example.com/v2/transcripts/download/yJAEEra27v4InERTcm77LQ",
"work_item_hyperlink": "www.example.com/ticket123",
"work_item_type_id": "w3pOm-CLRHmugqYIiByYHg"
},
"flows": [
{
"flow_entry_id": "4ad5A8qLTIunwdlpzSS4lg",
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"flow_version": "5"
}
],
"session_id": "z7bc2vC5TPSliVBO4dhaoQ",
"engagement_id": "vj9yy02ZTsyK22boIf2dww",
"language_code": "en-US",
"channels": [
{
"channel": "work_item",
"channel_source": "API"
}
],
"start_time": "2025-09-01T00:00:00Z",
"consumers": [
{
"consumer_id": "zeYjXoDOS_eV1QmTpj63PQ",
"consumer_external_id": "yJAEEra27v4InERTcm77LQ",
"consumer_display_name": "Jill Doe",
"consumer_email": "JillDoe@example.com",
"consumer_number": "+1234561212"
}
],
"variables": [
{
"name": "global_custom.user.name",
"value": "123"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `8000007` <br> Repeated request. <br> **Error Code:** `8000017` <br> Lock failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List engagements
- Method:
GET - Path:
/contact_center/engagements - Tags: Engagements
Return a list of engagement detail objects. Engagements are available via API once they have completed processing, not immediately after they end.
You may retry this request for up to 1 minute to get engagement details for a specific engagement, if querying shortly after an engagement_ended webhook event. Consider using a backoff between retries, to avoid rate limiting.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:list_engagements:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Engagements returned.
Content-Type: application/json
-
engagementsarray— A list of engagement detail objects.Items:
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The user's display name. -
user_idstring— The Meetings user identifier.
-
-
callback_voice_messagesarray— The callback voice messages.Items:
-
callback_voice_message_transcript_urlstring— The URL to download the callback voice message transcript, if the transcript text file exists. For security purposes, you **must** provide an OAuth access token in the authorization header to download the transcript file using this URL. -
callback_voice_message_urlstring— The URL to download the callback voice recording, if the recording file exists. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording file using this URL.
-
-
channel_typesarray— The channel's type.Items:
string, possible values:"voice", "sms", "chat", "video", "kiosk", "in_app_chat", "in_app_video" -
channelsarray— The engagement's channels.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email"— The engagement's channel. -
channel_sourcestring, possible values:"in_app_video", "kiosk_video", "web_video", "web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp", "email_address"— The channel's source. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel.
-
-
consumersarray— Information about the consumers.Items:
-
consumer_display_namestring— The consumer's name. -
consumer_idstring— The consumer's ID. -
consumer_numberstring— The consumer's phone number.
-
-
directionstring— The engagement's direction. -
dispositionsarray— Information about the dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
durationinteger, format:int64— The engagement's duration, in seconds. -
end_timestring, format:date-time— The date and time when the engagement ended. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided in the `from`/`to` parameters. Time is adjusted to the specified timezone. -
engagement_idstring— The engagement's ID. -
flow_durationinteger, format:int64— The engagement's flow duration, in seconds. -
flowsarray— Information about the engagement's flows.Items:
-
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionstring— The flow's version.
-
-
handling_durationinteger, format:int64— The engagement's handling duration, in seconds. -
notesarray— Information about the notes.Items:
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
notestring— The note's content. -
note_idstring— The note's ID. -
user_idstring— The Meetings user identifier.
-
-
queue_wait_typestring, possible values:"live_waiting", "callback"— The engagement's queue wait type. -
queuesarray— Information about the engagement's queues.Items:
-
cc_queue_idstring— The Contact Center queue identifier. -
queue_idstring— The task queue's identifier. **Deprecated** - use the `cc_queue_id` field to reference the Contact Center queue. -
queue_namestring— The Contact Center queue name.
-
-
start_timestring, format:date-time— The date and time when the engagement started. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided in the `from`/`to` parameters. Time is adjusted to the specified timezone. -
survey_idstring— The survey's ID. -
talk_durationinteger, format:int64— The engagement's talk duration, in seconds. -
transcript_urlstring— The URL to download the messaging transcript, if the transcript text file exists. This field is only used for messaging engagements. For voice and video engagement recordings, see the List engagement recordings API. For security purposes, you **must** provide an OAuth access token in the authorization header to download the transcript file using this URL. The app used to generate the token must have the granular scope `contact_center:read:engagement:admin` or the classic scope `contact_center_report:read:admin`. Example: ``` curl --request GET \ --url {transcript_url} \ --header 'Authorization: Bearer {access_token}' \ --header 'Content-Type: application/json' ``` -
transfer_countinteger, format:int32— The engagement's transfer count. -
transferCountinteger, format:int32— The engagement's transfer count. -
voice_mailinteger, format:int32— The number of voicemails for the engagement. -
waiting_durationinteger, format:int64— The engagement's waiting duration, in seconds. -
wrap_up_durationinteger, format:int64— The engagement's wrap-up duration, in seconds.
-
-
fromstring, format:date-time— The start time and date. If the input was `yyyy-MM-dd`, it is expanded to `yyyy-MM-ddT00:00:00Z`. Otherwise, the input format is preserved as either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The engagement's [timezone ID](/docs/api/references/abbreviations/#timezones). The default is UTC. -
tostring, format:date-time— The end time and date. If the input was `yyyy-MM-dd`, it is expanded to `yyyy-MM-ddT23:59:59Z`. Otherwise, the input format is preserved as either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T23:59:59Z",
"engagements": [
{
"start_time": "2021-12-03T13:07:46Z",
"end_time": "2021-12-03T13:07:46Z",
"duration": 3600,
"engagement_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"direction": "inbound",
"channels": [
{
"channel": "messaging",
"channel_source": "in_app_chat"
}
],
"consumers": [
{
"consumer_id": "zeYjXoDOS_eV1QmTpj63PQ",
"consumer_display_name": "Jill",
"consumer_number": "+12058945728"
}
],
"flows": [
{
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"flow_version": "5"
}
],
"queues": [
{
"cc_queue_id": "a4lCNeq2SzKbgkcDVbjCZQ",
"queue_name": "Voice - Customer Support"
}
],
"agents": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jane Doe"
}
],
"talk_duration": 10,
"flow_duration": 10,
"waiting_duration": 10,
"handling_duration": 0,
"wrap_up_duration": 10,
"transfer_count": 10,
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry"
}
],
"notes": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"note_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"note": "This is the content of the note.",
"last_modified_time": "2022-02-15T09:27:15Z"
}
],
"transcript_url": "https://api.example.com/v2/contact_center/engagements/transcripts/download/W_VATTk_Q5aW6z5rZtBxAQ",
"survey_id": "2yWjT4awTumcFKIrvcf4OA",
"voice_mail": 1,
"queue_wait_type": "live_waiting",
"callback_voice_messages": [
{
"callback_voice_message_url": "https://api.zoom.us/v2/contact_center/consumer_callback/voice_messages/4Q0ILNMfTA2nJolNxhg0Rw/download",
"callback_voice_message_transcript_url": "https://api.zoom.us/v2/contact_center/consumer_callback/voice_messages/4Q0ILNMfTA2nJolNxhg0Rw/transcript"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> The time and date must be in yyyy-mm-dd or ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'). <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1001` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `1601` <br> Access denied. Invalid or insufficient permissions. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get an engagement
- Method:
GET - Path:
/contact_center/engagements/{engagementId} - Tags: Engagements
Retrieve information about an engagement. Engagements are available via API once they have completed processing, not immediately after they end. This API may return an empty response while the data is persisting.
You may need to retry this request for up to 1 minute to get engagement details, if querying shortly after an engagement_ended webhook event. Consider using a backoff between retries to avoid rate limiting.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:engagement:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Engagement information returned.
Content-Type: application/json
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The agent's name. -
user_idstring— The agent's ID.
-
-
callback_voice_messagesarray— The callback voice messages.Items:
-
callback_voice_message_transcript_urlstring— The URL to download the callback voice message transcript, if the transcript text file exists. For security purposes, you **must** provide an OAuth access token in the authorization header to download the transcript file using this URL. -
callback_voice_message_urlstring— The URL to download the callback voice recording, if the recording file exists. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording file using this URL.
-
-
channel_typesarray— The channel's type. * voice * SMS * chat * video * kiosk * in_app_chat * in_app_videoItems:
string, possible values:"voice", "sms", "chat", "video", "kiosk", "in_app_chat", "in_app_video" -
channelsarray— The task's channels.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email"— The task's channel. * `voice` * `video` * `messaging` * `email` -
channel_sourcestring, possible values:"in_app_video", "kiosk_video", "web_video", "web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp", "email_address"— The channel's source. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel.
-
-
consumersarray— Information about the customers.Items:
-
consumer_display_namestring— The customer's name. -
consumer_idstring— The customer's ID. -
consumer_numberstring— The customer's phone number.
-
-
directionstring, possible values:"inbound", "outbound"— The session's direction. `inbound` | `outbound`. -
dispositionsarray— Information about the dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
durationinteger, format:int64— The engagement's duration, in seconds. -
end_timestring, format:date-time— The date and time when the engagement ended. Always returned in `yyyy-MM-dd'T'HH:mm:ss'Z'` format (UTC). -
engagement_idstring— The engagement's ID. -
eventsarray— Information about the events.Items:
-
accept_typestring, possible values:"manual", "auto"— The router's accept type. `manual` | `auto`. -
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email"— The task's channel. * `voice` * `video` * `messaging` * `email` -
channel_sourcestring, possible values:"in_app_video", "kiosk_video", "web_video", "web_chat", "in_app_chat", "sms", "email_address"— The channel's source. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `email_address` - Only applies to email channel. -
channel_typestring, possible values:"voice", "sms", "chat", "video", "in_app_chat", "kiosk", "in_app_chat", "in_app_video"— The channel's type. * voice * SMS * chat * video * kiosk * in_app_chat * in_app_video -
conference_typestring, possible values:"cold", "warm"— The conference's type. -
consumer_display_namestring— The customer's name. -
consumer_idstring— The consumer's ID. -
crm_call_statusstring, possible values:"ringing", "answer", "hangup", "miss"— The CRM's call status. -
crm_typestring— The CRM's type. -
directionstring, possible values:"inbound", "outbound"— The session's direction. `inbound` | `outbound`. -
durationinteger, format:int64— The event's duration. -
email_reply_bccarray— BCC recipients' information when replying to an email.Items:
-
email_addressstring— Email address -
email_namestring— Email name
-
-
email_reply_ccarray— CC recipients' information when replying to emails.Items:
-
email_addressstring— Email address -
email_namestring— Email name
-
-
email_reply_toarray— Recipient's information when replying to an email.Items:
-
email_addressstring— Email address -
email_namestring— Email name
-
-
event_typestring— The event's type. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
inbox_idstring— The inbox's ID. -
inbox_namestring— The inbox's name. -
inviteestring— The conference's invitee. -
invitee_typestring, possible values:"Agent", "Queue", "PSTN number"— The conference invitee's type. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name. -
skillsarray— Information about the skills.Items:
-
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name. -
skill_proficiency_levelinteger, format:int32— The skill's proficiency level. Only proficiency-based skill will have proficiency level.
-
-
start_timestring, format:date-time— The date and time when the event started. Always returned in `yyyy-MM-dd'T'HH:mm:ss'Z'` format (UTC). -
supervisor_display_namestring— The supervisor's name. -
supervisor_idstring— The supervisor's ID. -
transfer_countinteger, format:int32— The number of transfers during the engagement. -
transfer_to_cc_queue_idstring— The target queue's ID. -
transfer_to_flow_idstring— The target flow's ID. -
transfer_to_flow_namestring— The target flow's name. -
transfer_to_numberstring— The transfer's number. -
transfer_to_queue_idstring— The target queue's ID. -
transfer_to_queue_namestring— The target flow's ID. -
transfer_to_user_display_namestring— The target agent's name. -
transfer_to_user_idstring— The target agent's ID. -
transfer_typestring, possible values:"cold", "warm"— The transfer's type. -
upgraded_to_channel_typestring, possible values:"video"— The target upgraded channel's type. -
user_display_namestring— The agent's name. -
user_idstring— The agent's ID.
-
-
flow_durationinteger, format:int64— The engagement's flow duration, in seconds. -
flowsarray— Information about the engagement's flows.Items:
-
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionstring— The flow's version.
-
-
handling_durationinteger, format:int64— The handling duration, in seconds. This setting applies to voice channels. -
notesarray— Information about the notes.Items:
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
notestring— The note's content. -
note_idstring— The note's ID. -
user_idstring— The agent's ID.
-
-
queue_wait_typestring, possible values:"live_waiting", "callback"— The queue's wait type. -
queuesarray— Information about the engagement's queues.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
start_timestring, format:date-time— The date and time when the engagement started. Always returned in `yyyy-MM-dd'T'HH:mm:ss'Z'` format (UTC). -
survey_idstring— The survey's ID. -
talk_durationinteger, format:int64— The engagement's talk duration, in seconds. -
transcript_urlstring— The URL to download the messaging transcript, if the transcript text file exists. This field is only used for messaging engagements. For voice and video engagement recordings, see the `List engagement recordings` API. For security purposes, you **must** provide an OAuth access token in the authorization header to download the transcript file using this URL. **Example**:\r\n```curl --request GET \r\n --url {transcript_url} \r\n --header 'authorization: Bearer {access_token}' \r\n --header 'content-type: application/json'\r\n``` -
voice_mailinteger, format:int32— The voicemail count. -
waiting_durationinteger, format:int64— The engagement's waiting duration, in seconds. -
wrap_up_durationinteger, format:int64— The engagement's wrap-up duration, in seconds.
Example:
{
"start_time": "2021-12-03T13:07:46Z",
"end_time": "2021-12-03T13:07:46Z",
"duration": 3600,
"engagement_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"channels": [
{
"channel": "video",
"channel_source": "in_app_video"
}
],
"consumers": [
{
"consumer_id": "zeYjXoDOS_eV1QmTpj63PQ",
"consumer_display_name": "Jill",
"consumer_number": "+12058945728"
}
],
"direction": "inbound",
"flows": [
{
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"flow_version": "5"
}
],
"queues": [
{
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "agentQueue"
}
],
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly"
}
],
"queue_wait_type": "live_waiting",
"talk_duration": 10,
"flow_duration": 10,
"waiting_duration": 10,
"handling_duration": 0,
"wrap_up_duration": 10,
"voice_mail": 10,
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry"
}
],
"notes": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"note_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"note": "This is the content of the note.",
"last_modified_time": "2022-02-15T09:27:15Z"
}
],
"events": [
{
"start_time": "2021-12-03T13:07:46Z",
"duration": 3600,
"channel": "video",
"channel_source": "in_app_video",
"event_type": "Agent Ringing",
"direction": "inbound",
"flow_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"flow_name": "Demo",
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "Sales",
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"user_display_name": "Jilly",
"accept_type": "manual",
"transfer_to_flow_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"transfer_to_flow_name": "Demo",
"transfer_to_cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"transfer_to_queue_name": "Sales",
"transfer_to_user_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"transfer_to_user_display_name": "Jilly",
"transfer_to_number": "+12059300920",
"transfer_type": "cold",
"transfer_count": 2,
"upgraded_to_channel_type": "video",
"crm_type": "salesforce",
"crm_call_status": "ringing",
"supervisor_id": "kRQpbWO5TV6E7wxEYOKFWw",
"supervisor_display_name": "Jilly",
"consumer_id": "zeYjXoDOS_eV1QmTpj63PQ",
"consumer_display_name": "Jill",
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"conference_type": "cold",
"invitee_type": "PSTN number",
"invitee": "+14244108479",
"skills": [
{
"skill_category_id": "Mu_IEZZHQZGMY9avK74kwA",
"skill_category_name": "Languages",
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"skill_proficiency_level": 3
}
],
"email_reply_to": [
{
"email_address": "jill.chill@example.com",
"email_name": "Jill Chill"
}
],
"email_reply_cc": [
{
"email_address": "jill.chill@example.com",
"email_name": "Jill Chill"
}
],
"email_reply_bcc": [
{
"email_address": "jill.chill@example.com",
"email_name": "Jill Chill"
}
]
}
],
"transcript_url": "https://api.zoom.us/v2/contact_center/engagements/transcripts/download/W_VATTk_Q5aW6z5rZtBxAQ",
"survey_id": "2yWjT4awTumcFKIrvcf4OA",
"callback_voice_messages": [
{
"callback_voice_message_url": "https://api.zoom.us/v2/contact_center/consumer_callback/voice_messages/4Q0ILNMfTA2nJolNxhg0Rw/download",
"callback_voice_message_transcript_url": "https://api.zoom.us/v2/contact_center/consumer_callback/voice_messages/4Q0ILNMfTA2nJolNxhg0Rw/transcript"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `124` <br> Invalid access token. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update an engagement
- Method:
PATCH - Path:
/contact_center/engagements/{engagementId} - Tags: Engagements
Allows performing an action on an engagement
Scopes: contact_center_engagement:write:admin
Granular Scopes: contact_center:update:engagement:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
engagement_action(required)string, possible values:"transfer to queue", "transfer to agent", "transfer to flow", "release", "end", "activate", "deactivate"— Action to apply to the engagement. The **activate/deactivate** option is only supported for work item channels. -
engagement_statusstring, possible values:"end", "activate", "deactivate"— The new status to set for the engagement. The **activate/deactivate** option is only supported for work item channels. -
target_agent_idstring— The target agent ID for transfer. Required when the action is `transfer to agent`. -
target_flow_idstring— The target flow ID for transfer. Required when the action is `transfer to flow`. -
target_queue_idstring— The target queue ID for transfer. Required when the action is `transfer to queue`.
Example:
{
"engagement_action": "transfer to queue",
"target_queue_id": "aok8Zi4GQUyZ6HjR_nZl1A",
"target_agent_id": "eBUOIxoDSrSTUht2USpoUQ",
"target_flow_id": "QCCP5nfbTVqXOsUZxkWsJw"
}
Responses
Status: 204 **HTTP 204 No Content** — The engagement was successfully updated. No content is returned in the response body.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2907` <br> Invalid `engagement_status`. <br> **Error Code:** `2908` <br> Invalid `engagement_action`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get an engagement's attachments
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/attachments - Tags: Engagements
Retrieve a list of attachments for a specified engagement.
Scopes: contact_center_attachment:read:admin
Granular Scopes: contact_center:read:attachment:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Engagement attachment list returned.
Content-Type: application/json
-
attachmentsarray— Information about the attachments.Items:
-
attachment_aliasstring— The attachment's alias. -
attachment_idstring— The attachment's ID. -
attachment_namestring— The attachment's name. -
attachment_sizenumber— The attachment's file size, in bytes. -
attachment_typestring— The attachment's file type. -
attachment_urlstring— The URL to download the attachment. For security purposes, you **must** provide an OAuth access token in the authorization header to download the attachment using this URL. Example:\n```curl --request GET \n --url {attachment_url} \n --header 'authorization: Bearer {access_token}' \n --header 'content-type: application/json'\n``` -
engagement_idstring— The engagement's ID.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"attachments": [
{
"attachment_id": "0AYFv9ePSsmPUSJYHorUWQ",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"attachment_name": "GMT20251015-95414_296_lbMMg_boRtaWyHqA87cUuQ_VideoScreenshot.png",
"attachment_url": "https://api.zoom.us/v2/contact_center/attachments/0AYFv9ePSsmPUSJYHorUWQ/download?type=screenshot",
"attachment_alias": "Screenshot 1.png",
"attachment_size": 197238,
"attachment_type": "image"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get an engagement's events
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/events - Tags: Engagements
Retrieve information about an engagement's events.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:engagement:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Engagement's events information returned.
Content-Type: application/json
-
engagement_idstring— The engagement's ID. -
eventsarray— Information about the events.Items:
-
channelstring, possible values:"voice", "video"— The task's channel. Currently supports only voice and video channels. -
channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video"— The channel's source. Currently only returns voice and video channel sources. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. -
event_contentstring— Currently, only voice channel events are supported. Other channel events will be supported in the future. Deserializes [engagement events](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0059105). -
event_namestring— The event's name, [Engagement events](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0059105&_ga=2.188292840.1595505736.1717553252-540387373.1700551325#h_01GCW1GKA8NFE21SNAN3VR3K4P) -
start_timestring, format:date-time— The date and time when the event started. Always returned in `yyyy-MM-dd'T'HH:mm:ss'Z'` format (UTC).
-
Example:
{
"engagement_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"events": [
{
"start_time": "2021-12-03T13:07:46Z",
"event_name": "Start",
"channel": "video",
"channel_source": "in_app_video",
"event_content": "{\"flow_id\": \"zwKiV80hQ7CwRg9BEm0Bvw\",\"flow_name\": \"Demo\"}"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `7001` <br> Only voice and video channels are currently supported. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Poll an engagement recording's status
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/recordings/status - Tags: Engagements
Polls a video or voice engagement's recordings' status.
Scopes: contact_center_engagement:read:admin
Granular Scopes: contact_center:read:engagement_recording_status:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status:** `200` **OK**
Content-Type: application/json
-
channelstring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
channel_sourcestring, possible values:"in_app_video", "kiosk_video", "web_video"— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. -
engagement_idstring— The engagement's ID. -
statusesarray— The list of statuses.Items:
-
last_modified_timestring— The date and time when the recording was last modified. -
statusstring, possible values:"pause", "resume", "start", "stop"— The recording status. If the recording status change failed, it does not explicitly show in this API response. If the recording status does not change within 5 seconds of an expected change, assume that the recording status did not successfully transition to the expected status. If used with the recording control API, the control API request can be re-attempted.
-
Example:
{
"statuses": [
{
"status": "pause",
"last_modified_time": "2023-01-01T00:00:00Z"
}
],
"engagement_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"channel": "video",
"channel_source": "live_video"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2814` <br> The engagement's channel type is invalid for this recording control command. <br> **Error Code:** `2815` <br> The engagement is not assigned to an agent. It is not being recorded. <br> **Error Code:** `300` <br> Invalid request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: {0}. <br> **Error Code:** `20006` <br> Account not found. <br> **Error Code:** `2817` <br> There is no recording for this engagement. <br> **Error Code:** `2906` <br> There are not any agents on the call. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get an engagement's survey
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/survey - Tags: Engagements
Get an engagement's survey
Scopes: contact_center_engagement:read:admin
Granular Scopes: contact_center:read:engagement:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Survey returned.
Content-Type: application/json
-
engagement_idstring— The engagement's ID. -
flow_idstring— The `flow_id` or `flow_name` is returned if the survey is tied to a flow. -
flow_namestring— The `flow_id` or `flow_name` is returned if the survey is tied to a flow. -
queue_idstring— The `queue_id` or `queue_name` is returned if the survey is tied to a queue. -
queue_namestring— The `queue_id` or `queue_name` is returned if the survey is tied to a queue. -
survey_idstring— The survey's ID. -
survey_namestring— The survey's name. -
survey_resultsarray— The survey's answers, to a maximum of 10 items.Items:
-
answerstring— The user's given answer. -
date_timestring— The date and time of the customer's response. Format is ISO 8601 with milliseconds and timezone offset. -
file_urlstring— The answer as a recording URL. -
numeric_answerinteger— The user's given numeric answer. -
question_idstring— The question's ID. -
question_namestring— The question's name. -
question_orderinteger— The question's order. -
question_typeinteger, possible values:0, 5, 7— The question's type. * `0` - Single choice. * `5` - Long answer. * `7` - Rating scale (NPS).
-
-
survey_trigger_levelinteger, possible values:0, 1— The survey's trigger level. * `0` - queue. * `1` - flow.
Example:
{
"survey_id": "2yWjT4awTumcFKIrvcf4OA",
"survey_name": "web chat survey",
"engagement_id": "I9kVGZJZS5u796LxrKSWWg",
"queue_id": "2N13_yMTaeYUSYUKqupQQ",
"queue_name": "queue-chat",
"flow_id": "--N6BCoPQveeGJSyni57jw",
"flow_name": "flow-chat",
"survey_trigger_level": 0,
"survey_results": [
{
"question_id": "JocDev1cT-mIHREwDtMTVw",
"question_name": "What is your suggestion?",
"question_type": 0,
"question_order": 10,
"date_time": "2024-07-02T01:10:22.000+00:00",
"answer": "this is my answer",
"numeric_answer": 10,
"file_url": "https://file.example.com/file/pvlGl_b5Q8KxSBp2vaAKXA?jwt=eyJ6bV9za20iOiJ6bV9vMm0iLCJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhc3luY2ZpbGUiLCJ0b2tlbklkIjoiNVIyNjBGYW9RaUdFTE44alJneS0zUSIsImFwcE5hbWUiOiJhcHBfd2ViIiwiaXNzIjoiYXBwX3dlYiIsInBlcm1pc3Npb24iOiJtQ1l3ME9mM3N5Wm41alZFM25qYW40MXFMWUo4aWh1dGp3SmFYamd0Z1NrYUJxaEp4NjAtcXR2WEVoejBWVVFOOVl1Y3NrRlVwUUtxbVViS1o5TnpJQ2YxZHVaVUxjMkpVanlrOHZpXzFIWVNfdDhWeHluZ1VUdWpIbHFDTjRqY3p3Tnppdy5JbnhMMmZlVTVsZzU3cnZ3IiwiZXhwIjoxNzIwMTkwNjc0LCJ0b2tlblR5cGUiOiJwcmVzaWduVG9rZW4iLCJpYXQiOjE3MjAwODI2NzR9.tJ2Nq9f_veVMv6-60bKGcVZfIzPf2WshnOECg9Lkhxw&mode=play&with_domain=true"
}
]
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `404` <br> The engagement does not trigger survey. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Status: 444 **HTTP Status Code:** `444` <br> No Response **Error Code:** `444` <br> The survey for this engagement has no answer. <br>
Get available transfer flows
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/transfer/flows - Tags: Engagements
Retrieve a list of flows that are available for transfer.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:flow:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Successfully retrieved the list of available transfer flows.
Content-Type: application/json
-
flowsarrayItems:
-
flow_id(required)string— The flow's ID. -
flow_descriptionstring— The flow's description. -
flow_namestring— The flow's name.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"flows": [
{
"flow_id": "1QEhGTxFRmqKKLrZIm18CQ",
"flow_name": "SMS",
"flow_description": "SMS flow"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `7001` <br> Invalid channel or `channel_source`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get available transfer queues
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/transfer/queues - Tags: Engagements
Return a list of queues that are available for transfer.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_queues:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` OK Queue information returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
queuesarrayItems:
-
queue_id(required)string— The queue's ID. -
queue_descriptionstring— The queue's description. -
queue_namestring— The queue's name.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"queues": [
{
"queue_id": "1QEhGTxFRmqKKLrZIm18CQ",
"queue_name": "SMS",
"queue_description": "SMS Queue"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `7001` <br> Invalid channel or `channel_source`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get available transfer users
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/transfer/users - Tags: Engagements
Retrieve a list of available transfer users.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:list_users:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Agent information returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages. -
usersarrayItems:
-
cc_user_id(required)string— The Contact Center user identifier. -
user_status(required)string, possible values:"offline", "available", "unavailable", "occupied", "break", "meal", "training", "meeting", "end_shift", "forced", "disabling", "in_meeting", "on_call"— The user's current status. -
queue_countinteger— The number of queues assigned to the user. -
queuesarray— The list of queues assigned to the user.Items:
-
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
user_display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_first_namestring— The user's first name. -
user_idstring— The Meetings user identifier. -
user_last_namestring— The user's last name. -
user_personal_profile_avatarstring— The URL of the user's personal profile avatar. -
user_profile_picture_background_colorstring— The background color of the user's profile picture. -
user_profile_picture_file_idstring— The file ID of the user's profile picture. -
user_profile_picture_typestring— The type of the user's profile picture.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"users": [
{
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_display_name": "Jane Doe",
"user_email": "jchill@example.com",
"user_status": "available",
"user_first_name": "John",
"user_last_name": "Doe",
"user_profile_picture_background_color": "#4A90E2",
"user_profile_picture_file_id": "file_abc123xyz",
"user_profile_picture_type": "uploaded",
"user_personal_profile_avatar": "https://example.com/avatar.png",
"queue_count": 5,
"queues": [
{
"queue_id": "RpKKZwpVxNq1aQtMIODHq",
"queue_name": "Support Queue"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List flows
- Method:
GET - Path:
/contact_center/flows - Tags: Flows
Return a list of flows.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:list_flows:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Flow list returned.
Content-Type: application/json
-
flowsarray— Information about the flows.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The flow's channel. -
channel_sourcestring, possible values:"web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp", "email_address", "api"— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel. * `api` - Only applies to work_item channel. -
channel_typestring, possible values:"voice", "chat", "sms", "video", "in_app_chat"— The flow's channel type. -
entry_pointsarray— The flow's entry points.Items:
-
email_addressstring— The flow's entry point email address, applicable to email. -
entry_idstring— The flow's entry point ID. -
entry_languagestring— The flow's entry point engagement language. -
entry_namestring— The flow's entry point name, applicable to Video, Web Chat and In-App Chat. -
entry_numberstring— The flow's entry point number, applicable to voice and SMS.
-
-
flow_descriptionstring— The flow's description. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionsarray— The flow's versions.Items:
-
flow_versioninteger— The flow's version. -
flow_version_descriptionstring— The flow's version description. -
flow_version_idstring— The flow's studio version ID. -
flow_version_last_modified_timestring— The date and time when this flow version was last modified. -
flow_version_modified_bystring— The parent ID of the user who modified the flow version. -
flow_version_statusstring, possible values:"draft", "published", "archived", "debugging"— The flow version's status.
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
statusstring, possible values:"draft", "published", "archived", "debugging"— This flow's status.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"flows": [
{
"flow_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"flow_name": "Video Test",
"flow_description": "A testing flow.",
"channel": "messaging",
"channel_source": "web_chat",
"status": "published",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"entry_points": [
{
"entry_id": "x_h7uCj3TtScXWOBnQnKrw",
"entry_name": "Test video",
"entry_number": "+16052052430",
"entry_language": "en-US",
"email_address": "xxxx@zoom.us"
}
],
"flow_versions": [
{
"flow_version_id": "EWg5URJZRXKwfbLJpeJWyA",
"flow_version_description": "Version 1",
"flow_version_status": "draft",
"flow_version": 2,
"flow_version_modified_by": "jdhgdhghk376453hjdf",
"flow_version_last_modified_time": "2022-08-05T01:55:52Z"
}
]
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Import a flow
- Method:
POST - Path:
/contact_center/flows - Tags: Flows
Import and create a flow, using content from another flow's exported JSON.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:write:flow:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: multipart/form-data
-
flow_file(required)string— * View - The uploaded file is in binary format. * Allowed file extensions - `xxx.json` * Maximum file size supported - 10 MB -
flow_name(required)string— The flow name. Must be unique within a division. -
import_mode(required)string, possible values:"new", "version"— "new" (default) or "version" - "new" creates a brand new flow. - "version" checks for existing flow by name + channel and imports as new version. -
flow_descriptionstring— The flow description. -
flow_version_descriptionstring— The flow version description. The flow is imported and created with Version 1 automatically.
Example:
{
"flow_name": "my flow",
"flow_description": "my description",
"flow_version_description": "my version description",
"flow_file": "Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpKS1NHVkVRbUZXVmxsM1ZtcEJlRll5U2tWVWJHaG9UVlZ3VlZacVFtRlRNbEpJVm10a1dHSkdjSEJXYTFwaFpWWmFkRTFVVWxSTmF6RTFWa2QwYzJGc1NuUmhSemxWVmpOT00xcFZXbUZrUjA1R1UyMTRVMkpXU2twV2JURXdWakZXZEZOc1dsaGlSMmhZV1d4b2IyVnNVbFZTYlVaclVqQTFSMVV5TVRSVk1rcElaSHBHVjFaRmIzZFdha1poVjBaT2NtRkhhRk5sYlhoWFZtMXdUMVF3TUhoalJscFlZbFZhY2xWc1VrZFdiRnBZWlVoa1YwMUVSa1pWYkZKSFZqSkZlVlZZWkZkaGExcFhXbFphVDJOdFNrZFRiV2hzWWxob1dWWXhaRFJpTWtsM1RVaG9hbEp0VWxsWmJHaFRWMFpTVjFwR1RteGlSbXcxVkZaU1UxWnJNWEpqUld4aFUwaENTRlpxU2tabFZsWlpXa1p3YkdFelFrbFdWM0JIVkRKU1YxWnVUbGhpVjNoVVdWUk9RMlJzV25STldHUlZUVlpXTkZVeGFHOWhiRXB6WTBac1dtSkhhRlJXTUZwVFZqRndSVkZyT1dsU00yaFlWbXBKZUZJeFdsaFRhMXBxVWxkb1dGUlhOVU5YUmxweFVtdDBhazFyTlVoWlZWcHJZVWRGZWxGcmJGZFdSVXBvVjFaa1UxWXhUblZVYkZKcFVqRktWVlpHVWtKa01ERlNVRlF3UFE9PQ==",
"import_mode": "new"
}
Responses
Status: 201 **HTTP Status Code:** `201` Import and create a flow.
Content-Type: application/json
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The flow's channel. -
channel_sourcestring, possible values:"video", "voice", "sms", "web_chat", "in_app_chat", "facebook_messenger", "whatsapp", "instagram", "team_chat", "email_address", "api"— The channel's source. `in_app_chat` - Only applies to messaging channel. `web_chat` - Only applies to messaging channel. `sms` - Only applies to messaging channel. `facebook_messenger` - Only applies to messaging channel. `whatsapp` - Only applies to messaging channel. `web_chat` - Only applies to messaging channel. `email_address` - Only applies to email channel. `api` - Only applies to work_item channel. -
entry_pointsarray— The flow's entry points.Items:
-
email_addressstring— The flow's entry point email address. Applicable to email. -
entry_idstring— The flow's entry point ID. -
entry_languagestring— The flow's entry point engagement language. -
entry_namestring— The flow's entry point name. Applicable to video, web chat, and in-app chat. -
entry_numberstring— The flow's entry point number. Applicable to voice and SMS.
-
-
flow_descriptionstring— The flow description. -
flow_idstring— The flow ID. -
flow_namestring— The flow name. -
flow_versionsarray— The flow version.Items:
-
flow_versioninteger— The flow's version. -
flow_version_descriptionstring— The flow version's description. -
flow_version_idstring— The flow's entry point ID. -
flow_version_last_modified_timestring— The date and time when this flow version was last modified. -
flow_version_modified_bystring— The parent ID of the user who modified the flow version. -
flow_version_statusstring, possible values:"draft", "published", "archieved"— The flow version's status.
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
statusstring, possible values:"draft", "published"— The flow's status.
Example:
{
"flow_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"flow_name": "test_flow",
"flow_description": "test_flow",
"channel": "messaging",
"channel_source": "web_chat",
"status": "draft",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"entry_points": [
{
"entry_id": "x_h7uCj3TtScXWOBnQnKrw",
"entry_name": "my_entry",
"entry_number": "+16052052430",
"entry_language": "en-US",
"email_address": "address@company.com"
}
],
"flow_versions": [
{
"flow_version_id": "EWg5URJZRXKwfbLJpeJWyA",
"flow_version_description": "My Version Description",
"flow_version_status": "draft",
"flow_version": 2,
"flow_version_modified_by": "jdhgdhghk376453hjdf",
"flow_version_last_modified_time": "2023-01-01T00:00:00-04:00"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3202` <br> The flow name already exists. <br> **Error Code:** `3203` <br> The flow is invalid. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a flow
- Method:
GET - Path:
/contact_center/flows/{flowId} - Tags: Flows
Get information about a flow.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:flow:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Flow returned.
Content-Type: application/json
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The flow's channel. -
channel_sourcestring, possible values:"web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp", "email_address", "api"— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `email_address` - Only applies to email channel. * `api` - Only applies to work_item channel. -
channel_typestring, possible values:"voice", "chat", "sms", "video", "in_app_chat"— The flow's channel type. -
entry_pointsarray— The flow's entry points.Items:
-
email_addressstring— The flow's entry point email address. Applicable to email. -
entry_idstring— The flow's entry point ID. -
entry_languagestring— The flow's entry point engagement language. -
entry_namestring— The flow's entry point name, applicable to Video, Web Chat and In-App Chat. -
entry_numberstring— The flow's entry point number, applicable to voice and SMS.
-
-
flow_descriptionstring— The flow's description. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionsarray— The flow's versions.Items:
-
flow_versioninteger— The flow's version. -
flow_version_descriptionstring— The flow's version description. -
flow_version_idstring— The flow's studio version ID. -
flow_version_last_modified_timestring— The date and time when this flow version was last modified. -
flow_version_modified_bystring— The parent ID of the user who modified the flow version. -
flow_version_statusstring, possible values:"draft", "published", "archived", "debugging"— The flow version's status.
-
-
last_modified_timestring— The date and time when this flow was last modified. -
modified_bystring— The parent ID of the user who modified the flow. -
statusstring, possible values:"draft", "published", "archived", "debugging"— This flow's status.
Example:
{
"flow_id": "zwKiV80hQ7CwRg9BEm0Bvw",
"flow_name": "Video Test",
"flow_description": "A testing flow.",
"channel": "messaging",
"channel_source": "web_chat",
"status": "published",
"modified_by": "jdhgdhghk376453hjdf",
"last_modified_time": "2022-08-05T01:55:52Z",
"entry_points": [
{
"entry_id": "x_h7uCj3TtScXWOBnQnKrw",
"entry_name": "Test video",
"entry_number": "+16052052430",
"entry_language": "en-US",
"email_address": "xxxx@zoom.us"
}
],
"flow_versions": [
{
"flow_version_id": "EWg5URJZRXKwfbLJpeJWyA",
"flow_version_description": "Version 1",
"flow_version_status": "draft",
"flow_version": 2,
"flow_version_modified_by": "jdhgdhghk376453hjdf",
"flow_version_last_modified_time": "2022-08-05T01:55:52Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist: $flowId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a flow
- Method:
DELETE - Path:
/contact_center/flows/{flowId} - Tags: Flows
Delete a flow.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:delete:flow:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Delete a flow.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3209` <br> **Message:** Current flow is in use for the following areas and can’t be deleted. Please remove the flow from the listed areas before proceeding. **Errors:** - **Related Flows** (Flow information associated with the current flow): ```json "related_flows": [ { "flow_name": "xxx", "flow_id": "xxx" } ] ``` - **Related Queues** (Queue information associated with the current flow): ```json "related_queues": [ { "queue_name": "xxx", "queue_id": "xxx" } ] ``` - **Related Campaigns** (Queue information associated with the current flow): ```json "related_campaigns": [ { "campaign_id": "xxx", "campaign_name": "xxx" } ] ``` <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Edit a flow
- Method:
PATCH - Path:
/contact_center/flows/{flowId} - Tags: Flows
Edit a flow's attributes.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:update:flow:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
flow_version(required)integer— The flow version. -
flow_descriptionstring— The flow's description. -
flow_namestring— The flow's name. -
flow_version_descriptionstring— The flow version description.
Example:
{
"flow_name": "my flow name",
"flow_description": "my_flow_desc",
"flow_version_description": "my_flow_version_desc",
"flow_version": 1
}
Responses
Status: 204 **HTTP Status Code:** `204` Edit a flow's attributes.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3202` <br> Flow name already exists. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List flow's entry points
- Method:
GET - Path:
/contact_center/flows/{flowId}/entry_points - Tags: Flows
Retrieve a list of the entry points bound to the current flow.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:flow:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` List the entry points bound to the current flow
Content-Type: application/json
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The flow's channel. -
channel_sourcestring, possible values:"sms", "web_chat", "in_app_chat", "team_chat", "email_address", "instagram", "facebook_messenger", "whatsapp", "api"— The channel's source. `in_app_chat` - Only applies to messaging channel. `web_chat` - Only applies to messaging channel. `sms` - Only applies to messaging channel. `team_chat` - Only applies to messaging channel. `instagram` - Only applies to messaging channel. `facebook_messenger` - Only applies to messaging channel. `whatsapp` - Only applies to messaging channel. `web_chat` - Only applies to messaging channel. `email_address` - Only applies to email channel. `video` - Only applies to video channel. `voice` - Only applies to voice channel. `api` - Only applies to work_item channel. -
enable_detect_languageboolean— **Channel limitation** - This field is only required when `channel` = email. **Default value** = `false` **Note** - The detected language will automatically set the global variable `engagement language`. -
entry_pointsarray— The entry point list.Items:
-
entry_id(required)string— The entry's ID. -
customer_identity_sourcestring, possible values:"from", "reply_to", default:"from"— Which email header the Contact Center uses to identify the customer for an inbound email engagement at this email entry point. This field is only applicable to the **Email** channel. - `from` - Use the inbound email `From` header as the customer identity. - `reply_to` - Prefer the inbound email `Reply-To` header as the customer identity. If the `Reply-To` header is missing, the system falls back to using the `From` header. -
entry_emailstring— The email address. Only supports `channel_source` = email. -
entry_languagestring— **Only supports `channel` = voice** The language you choose sets the engagement's language and which language based assets are used. **Channel limitation** - This field is only needed when `channel` = voice. **Default value** - `en_US` **Language List** | Language | Value | |---------------------------|----------| | Chinese (Simplified) | zh-CN | | Chinese (Traditional) | zh-TW | | Chinese Cantonese | yue-CN | | Chinese Mandarin | cmn-CN | | Danish (Denmark) | da-DK | | Dutch (Netherlands) | nl-NL | | English (Australia) | en-AU | | English (New Zealand) | en-NZ | | English (UK) | en-GB | | English (US) | en-US | | French (Canada) | fr-CA | | French (France) | fr-FR | | German (Germany) | de-DE | | Italian (Italy) | it-IT | | Japanese (Japan) | ja-JP | | Korean (Korea) | ko-KR | | Polish (Poland) | pl-PL | | Portuguese (Brazil) | pt-BR | | Portuguese (Portugal) | pt-PT | | Romanian (Romania) | ro-RO | | Russian (Russia) | ru-RU | | Spanish (European) | es-ES | | Spanish (Mexico) | es-MX | | Spanish (US) | es-US | | Swedish (Sweden) | sv-SE | | Turkish (Turkey) | tr-TR | -
entry_namestring— entry name -
entry_numberstring— The phone number. Only supports `channel` = voice or `channel` = messaging and `channel_source` = sms. -
entry_number_area_codestring— The number's area code. Only supports `channel` = voice or `channel` = messaging and `channel_source` = sms. -
entry_number_country_codestring— **Note** Number country. Only supports `channel` = voice or `channel` = messaging and `channel_source` = sms. See [Country Abbreviations](/docs/api/references/abbreviations/#countries) for more details. -
entry_number_typeinteger, possible values:2, 3, 5— Only supports `channel_source` = voice or sms. 2- Toll-free. 3- Virtual. 5- Mobile.
-
Example:
{
"entry_points": [
{
"entry_id": "xxxxxxxxxx",
"entry_number": "+1209144732",
"entry_email": "xxx@example.com",
"entry_name": "test entry",
"entry_number_type": 2,
"entry_number_country_code": "US",
"entry_number_area_code": "209",
"entry_language": "en-US",
"customer_identity_source": "from"
}
],
"enable_detect_language": true,
"channel": "messaging",
"channel_source": "web_chat"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Add flow entry points
- Method:
POST - Path:
/contact_center/flows/{flowId}/entry_points - Tags: Flows
Add entry points to a flow.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:write:flow:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
enable_detect_languageboolean— **Channel Limitation** - This field is only required when `channel=email`. - Default Value- `false` **Note** The detected language will automatically set the global variable `engagement language`. -
entry_pointsarray— The entry ID list.Items:
-
entry_id(required)string— The entry ID. -
customer_identity_sourcestring, possible values:"from", "reply_to", default:"from"— Determines which email header Contact Center uses to identify the customer for an inbound email engagement at this email entry point. This field is only applicable to the **Email** channel. - `from` - Use the inbound email `From` header as the customer identity. - `reply_to` - Prefer the inbound email `Reply-To` header as the customer identity. If the `Reply-To` header is missing, the system falls back to using the `From` header. -
entry_languagestring— **Channel Limitation*- only channel=voice need this field. Default value - `en_US` **Language list** - | Language | Value | |---------------------------|----------| | Chinese (Simplified) | zh-CN | | Chinese (Traditional) | zh-TW | | Chinese Cantonese | yue-CN | | Chinese Mandarin | cmn-CN | | Danish (Denmark) | da-DK | | Dutch (Netherlands) | nl-NL | | English (Australia) | en-AU | | English (New Zealand) | en-NZ | | English (UK) | en-GB | | English (US) | en-US | | French (Canada) | fr-CA | | French (France) | fr-FR | | German (Germany) | de-DE | | Italian (Italy) | it-IT | | Japanese (Japan) | ja-JP | | Korean (Korea) | ko-KR | | Polish (Poland) | pl-PL | | Portuguese (Brazil) | pt-BR | | Portuguese (Portugal) | pt-PT | | Romanian (Romania) | ro-RO | | Russian (Russia) | ru-RU | | Spanish (European) | es-ES | | Spanish (Mexico) | es-MX | | Spanish (US) | es-US | | Swedish (Sweden) | sv-SE | | Turkish (Turkey) | tr-TR |
-
Example:
{
"entry_points": [
{
"entry_id": "Nn3aO8lOSm6aYYW6l8brSQ",
"entry_language": "en-US",
"customer_identity_source": "from"
}
],
"enable_detect_language": false
}
Responses
Status: 201 **HTTP Status Code:** `201` Flow entry points added.
Content-Type: application/json
-
channel(required)string, possible values:"voice", "video", "messaging", "email", "work_item"— The flow channel. -
channel_source(required)string, possible values:"sms", "web_chat", "in_app_chat", "team_chat", "email", "instagram", "facebook_messenger", "whatsapp", "api"— The channel's source. - `in_app_chat` - Only applies to messaging channel. - `web_chat` - Only applies to messaging channel. - `sms` - Only applies to messaging channel. - `team_chat` - Only applies to messaging channel. - `instagram` - Only applies to messaging channel. - `facebook_messenger` - Only applies to messaging channel. `whatsapp` - Only applies to messaging channel. - `web_chat` - Only applies to messaging channel. - `email_address` - Only applies to email channel. - `api` - Only applies to work_item channel. -
entry_points(required)arrayItems:
-
entry_id(required)string— The entry ID. -
customer_identity_sourcestring, possible values:"from", "reply_to"— Determines which email header Contact Center uses to identify the customer for an inbound email engagement at this email entry point. This field is only applicable to the **Email channel**. - **from**: Use the inbound email `From` header as the customer identity. - **reply_to**: Prefer the inbound email `Reply-To` header as the customer identity. If the `Reply-To` header is missing, the system falls back to using the `From` header. -
entry_languagestring— This value only returns when `channel` = voice.
-
-
enable_detect_languageboolean— This field is meaningful only when `channel` = email.
Example:
{
"entry_points": [
{
"entry_id": "Nn3aO8lOSm6aYYW6l8brSQ",
"entry_language": "en_US",
"customer_identity_source": "from"
}
],
"channel_source": "web_chat",
"channel": "messaging",
"enable_detect_language": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3208` <br> The flow entry point has reached the maximum limit. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Remove flow entry points
- Method:
DELETE - Path:
/contact_center/flows/{flowId}/entry_points - Tags: Flows
Remove entry points from a flow.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:delete:flow:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
entry_idsarray— Identifiers for the entry points to remove. For voice and SMS flows each value may be either the phone number ID or the phone number in E.164 format such as +17083362211. For chat-based flows pass the channel-specific identifier.Items:
string— The entry ID.
Example:
{
"entry_ids": [
"zwKiV80hQ7CwRg9BEm0Bvw"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Entry points are deleted
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> <br> **Error Code:** `124` <br> <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist: $flowId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Export a flow
- Method:
GET - Path:
/contact_center/flows/{flowId}/export - Tags: Flows
Export a flow's content as JSON.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:flow:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Export flow as JSON. You will get a downloadable file.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3201` <br> Flow does not exist: $flowId $flowVersion. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Publish a flow
- Method:
PUT - Path:
/contact_center/flows/{flowId}/publish - Tags: Flows
Publish a flow version. Any other published version of the flow will be replaced with the one specified in this request.
Scopes: contact_center_flow:write:admin
Granular Scopes: contact_center:update:flow:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Publish a flow.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3201` <br> Flow does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List entry points
- Method:
GET - Path:
/contact_center/flows_entry_points - Tags: Flows
Retrieve a list of entry points.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:flow:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` List current channel available entry id list
Content-Type: application/json
-
entry_pointsarray— The entry point list.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The flow's channel. -
channel_sourcestring, possible values:"sms", "web_chat", "in_app_chat", "team_chat", "email_address", "instagram", "facebook_messenger", "whatsapp", "api"— The channel's source. - `in_app_chat` - Only applies to the messaging channel. - `web_chat` - Only applies to the messaging channel. - `sms` - Only applies to **messaging** channel - `team_chat` – Only applies to **messaging** channel - `instagram` – Only applies to **messaging** channel - `facebook_messenger` – Only applies to **messaging** channel - `whatsapp` – Only applies to **messaging** channel - `email_address` – Only applies to **email** channel - `api` - Only applies to work_item channel. -
entry_emailstring— Email address. Only supported when `channel = email`. -
entry_idstring— The entry ID. -
entry_namestring— The entry name. -
entry_numberstring— **Note** Phone number only supports `channel = voice` or `channel = messaging` with `channel_source = sms`. -
entry_number_area_codestring— The number's area code. -
entry_number_country_codestring— **Note** Number country only supports `channel = voice` or `channel = messaging & channel_source = sms`. See [Zoom API Country Abbreviations](/docs/api/references/abbreviations/#countries) for more details. -
entry_number_typeinteger, possible values:2, 3, 5— **Note** Only supports `channel = voice` or `channel = messaging & channel_source = sms` Supported number types Toll-Free Virtual Mobile
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"entry_points": [
{
"entry_id": "rDjD-6bvTKyvc7jWuKJOxg",
"entry_number": "+1209144732",
"entry_name": "test entry",
"entry_email": "xxx@example.com",
"entry_number_type": 2,
"entry_number_country_code": "US",
"entry_number_area_code": "209",
"channel": "messaging",
"channel_source": "web_chat"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3210` <br> Channel or `channel_source` is illegal. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List engagement follow-up tasks
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/follow_up_tasks - Tags: Follow-up Tasks
Returns a list of follow-up tasks under an engagement.
Scopes: contact_center_follow_up_task:read:admin
Granular Scopes: contact_center:read:list_follow_up_tasks:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Engagement follow-up task list returned
Content-Type: application/json
-
follow_up_tasksarray— Information about the follow-up tasks.Items:
-
contentstring— The follow-up task's content. -
create_timestring— The follow-up task's creation time. -
engagement_idstring— The engagement event's unique ID. -
task_idstring— The follow-up task's unique ID. -
update_timestring— The follow-up task's last modification time. -
user_idstring— The ID of the user who created the task.
-
Example:
{
"follow_up_tasks": [
{
"task_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"engagement_id": "Xh79Eq6gQhy8I1vM-r8P-w",
"content": "The agent will check the customer's order status and provide an update.",
"user_id": "DLv4511QThOGTMTWHn7oGw",
"create_time": "2022-05-23T14:15:57Z",
"update_time": "2022-05-23T14:15:57Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a follow-up task
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/follow_up_tasks/{taskId} - Tags: Follow-up Tasks
Returns a single follow-up task by engagement and task ID.
Scopes: contact_center_follow_up_task:read:admin
Granular Scopes: contact_center:read:follow_up_task:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Follow-up task returned.
Content-Type: application/json
-
content(required)string— The follow-up task's content. -
create_time(required)string— The follow-up task's creation time. -
engagement_id(required)string— The engagement event's unique ID. -
task_id(required)string— The follow-up task's unique ID. -
update_time(required)string— The follow-up task's last modification time. -
user_idstring— The ID of the user who created the task.
Example:
{
"task_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"engagement_id": "Xh79Eq6gQhy8I1vM-r8P-w",
"content": "The agent will check the customer's order status and provide an update.",
"user_id": "DLv4511QThOGTMTWHn7oGw",
"create_time": "2022-05-23T14:15:57Z",
"update_time": "2022-05-23T14:15:57Z"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `13002` <br> Follow-up task does not exist: $taskId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a follow-up task
- Method:
PATCH - Path:
/contact_center/engagements/{engagementId}/follow_up_tasks/{taskId} - Tags: Follow-up Tasks
Updates a single follow-up task.
Scopes: contact_center_follow_up_task:write
Granular Scopes: contact_center:update:follow_up_task
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
content(required)string— The follow-up task's content.
Example:
{
"content": "The agent will check the customer's order status and provide an update."
}
Responses
Status: 204 **HTTP Status Code:** `204` Follow-up task updated
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `13003` <br> Follow-up task can not be updated. You can only update the task that belongs to you. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `13002` <br> Follow-up task does not exist: $taskId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List inboxes
- Method:
GET - Path:
/contact_center/inboxes - Tags: Inboxes
Return a list of inboxes.
Scopes: contact_center_inbox:read:admin
Granular Scopes: contact_center:read:list_inboxes:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Inbox list returned.
Content-Type: application/json
-
inboxesarray— Information about the notes.Items:
-
access_queue_countinteger— The inbox access queue count. -
access_user_countinteger— The inbox access user count. -
inbox_idstring— The inbox's unique ID. -
inbox_namestring— The inbox's name. -
inbox_typestring, possible values:"voicemail"— The inbox type. * voicemail -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"inboxes": [
{
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"inbox_type": "voicemail",
"access_user_count": 5,
"access_queue_count": 5,
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw"
}
]
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Create an inbox
- Method:
POST - Path:
/contact_center/inboxes - Tags: Inboxes
Create a new inbox.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:write:inbox:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
inbox_content_storage_locationstring, possible values:"US", "AU", "BR", "CA", "DE", "JP", "SG"— The inbox content's physical storage location, using a two-letter country code. US: `United States` AU: `Australia` BR: `Brazil` CA: `Canada` DE: `Germany` JP: `Japan` SG: `Singapore` -
inbox_descriptionstring— The inbox's description. -
inbox_namestring— The inbox's name. -
inbox_typestring, possible values:"voicemail"— The inbox type. * voicemail -
voicemailobject— The voicemail settings.-
delete_voicemail_days_limitinteger— Delete voicemail after a specified number of days. -
soft_deleteboolean— Enable soft deletion for the inbox. -
soft_delete_days_limitinteger— When a voicemail is deleted, it is initially soft-deleted and can be restored within the admin-specified timeframe, which is up to 30 days. After that time, the voicemail is permanently deleted. -
voicemail_notification_by_emailobject— The voicemail notification by email.-
emailsarray— Forward voicemail to an email list.Items:
string -
enableboolean— Enable voicemail notification by email. -
forward_voicemail_to_emailsboolean— Enable forward voicemail to emails. -
include_voicemail_fileboolean— Whether to include voicemail file. -
include_voicemail_transcriptionboolean— Whether to include voicemail transcription.
-
-
voicemail_time_limitinteger— The voicemail time limit in minutes. -
voicemail_transcriptionboolean— The voicemail enable transcription.
-
Example:
{
"inbox_name": "example",
"inbox_description": "This is a inbox.",
"inbox_type": "voicemail",
"inbox_content_storage_location": "US",
"voicemail": {
"soft_delete": true,
"soft_delete_days_limit": 20,
"voicemail_time_limit": 5,
"delete_voicemail_days_limit": 30,
"voicemail_transcription": false,
"voicemail_notification_by_email": {
"enable": false,
"include_voicemail_file": false,
"include_voicemail_transcription": false,
"forward_voicemail_to_emails": false,
"emails": [
"jchill@example.com"
]
}
}
}
Responses
Status: 201 **HTTP Status Code:** `201` Inbox created.
Content-Type: application/json
-
inbox_content_storage_locationstring, possible values:"US", "AU", "BR", "CA", "DE", "JP", "SG"— The inbox content's physical storage location, using a two-letter country code. US: `United States` AU: `Australia` BR: `Brazil` CA: `Canada` DE: `Germany` JP: `Japan` SG: `Singapore` -
inbox_descriptionstring— The inbox's description. -
inbox_idstring— The inbox's unique ID. -
inbox_namestring— The inbox's name. -
inbox_typestring, possible values:"voicemail"— The inbox type. * voicemail -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
voicemailobject— The voicemail settings.-
delete_voicemail_days_limitinteger— Delete voicemail after a specified number of days. -
soft_deleteboolean— Enable soft deletion for the inbox. -
soft_delete_days_limitinteger— When a voicemail is deleted, it is initially soft-deleted and can be restored within the admin-specified timeframe, which is up to 30 days. After that time, the voicemail is permanently deleted. -
voicemail_auto_assignmentobject— Voicemail auto assignment settings.-
enableboolean— Enable voicemail auto assignment. -
voicemail_auto_assignment_content_idstring— The voicemail auto assignment operation object's ID. Can be `userId`, `queueId` or `teamId`. This field is only effective when `voicemail_auto_assignment_type` is `1`, `3`, or `4`. -
voicemail_auto_assignment_during_active_work_sessioninteger, format:int32, possible values:0, 1— The person assigned the voicemail auto assignment is during an active work session.The value can only be `0` inactive or `1` active. This field is only effective when `voicemail_auto_assignment_type` is `2`, `3`, `4`, or `5`. -
voicemail_auto_assignment_routine_profile_idstring— Routine profile ID used by voicemail auto assignment. This field only takes effect when `voicemail_auto_assignment_type` is `2`, `3`, `4,` or `5`, and the user has set a routine profile. -
voicemail_auto_assignment_typeinteger, format:int32, possible values:1, 2, 3, 4, 5— Voicemail auto assignment type. The value can only be one of these values. *1 - user *2 - access list *3 - queue *4 - team *5 - rotation
-
-
voicemail_notification_by_emailobject— The voicemail notification by email.-
emailsarray— Forward voicemail to an email list.Items:
string -
enableboolean— The voicemail enable notification by email. -
forward_voicemail_to_emailsboolean— Enable forwarding voicemail to emails. -
include_voicemail_fileboolean— Whether to include voicemail file. -
include_voicemail_transcriptionboolean— Whether to include voicemail transcription.
-
-
voicemail_send_reminders_for_unresolvedobject— Reminder policy for unresolved voicemails.-
enableboolean— Enable a reminder policy for unresolved voicemails. -
send_alert_for_unresolved_voicemail_timeoutinteger— Timeout for unresolved voicemail reminders, in minutes. The range is from 1 to 10080.
-
-
voicemail_time_limitinteger— The voicemail time limit in minutes. -
voicemail_transcriptionboolean— Enable voicemail transcription.
-
Example:
{
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"inbox_description": "This is a inbox.",
"inbox_type": "voicemail",
"inbox_content_storage_location": "US",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"voicemail": {
"soft_delete": true,
"soft_delete_days_limit": 20,
"voicemail_time_limit": 5,
"delete_voicemail_days_limit": 30,
"voicemail_transcription": false,
"voicemail_notification_by_email": {
"enable": false,
"include_voicemail_file": false,
"include_voicemail_transcription": false,
"forward_voicemail_to_emails": false,
"emails": [
"jchill@example.com"
]
},
"voicemail_auto_assignment": {
"enable": false,
"voicemail_auto_assignment_type": 1,
"voicemail_auto_assignment_during_active_work_session": 0,
"voicemail_auto_assignment_content_id": "testUserId",
"voicemail_auto_assignment_routine_profile_id": "testRoutineProfileId"
},
"voicemail_send_reminders_for_unresolved": {
"enable": false,
"send_alert_for_unresolved_voicemail_timeout": 30
}
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete inboxes
- Method:
DELETE - Path:
/contact_center/inboxes - Tags: Inboxes
Delete one or more inboxes.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:delete:inbox:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` Inboxes deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List an account's inbox messages
- Method:
GET - Path:
/contact_center/inboxes/messages - Tags: Inboxes
Return all messages in an inbox.
Scopes: contact_center_inbox:read:admin
Granular Scopes: contact_center:read:inbox_messages:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Inbox messages returned.
Content-Type: application/json
-
messagesarray— Information about the inbox message.Items:
-
cci_queue_idstring— The Contact Center queue ID of the inbox message routed by the queue. -
consumer_display_namestring— The consumer's name. -
consumer_idstring— The consumer's ID. -
consumer_numberstring— The consumer's phone number. -
created_atstring, format:date-time— The inbox message's creation time. -
download_urlstring— The URL to download the inbox message. For security purposes, you **must** provide an OAuth access token in the authorization header to download the inbox message file using this URL. Example: ```curl --request GET --url {download_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
engagement_idstring— The engagement's ID. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
inbox_idstring— The inbox's unique ID. -
inbox_namestring— The inbox's name. -
message_durationinteger— The inbox message's duration in seconds. -
message_idstring— The inbox message's ID. -
message_typestring, possible values:"voicemail"— The inbox message's type. * voicemail -
playback_urlstring— The URL to playback the inbox message. For security purposes, you **must** provide an OAuth access token in the authorization header to playback the inbox message file using this URL. Example: ```curl --request GET --url {playback_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
queue_idstring— The queue ID of the inbox message routed by the queue. -
queue_namestring— The queue name of the inbox message routed by the queue. -
statusstring, possible values:"normal", "deleted"— The inbox message soft delete flag. * normal * deleted -
transcript_urlstring— The URL to download the inbox message transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. Example: ```curl --request GET --url {transcript_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ```
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"messages": [
{
"message_id": "4Q0ILNMfTA2nJolNxhg0Rw",
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"engagement_id": "xRk0eHNNTGygFDPrWqR9FA",
"created_at": "2022-05-23T14:15:57Z",
"flow_id": "1wGgU3HQR8u1wWjPFNXOyA",
"flow_name": "inbox_message_flow",
"cci_queue_id": "LB937Z8oQP2mJxeNj3GxJQ",
"queue_name": "inbox_message_queue",
"message_type": "voicemail",
"download_url": "https://api.zoom.us/v2/contact_center/inbox/message/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voicemail",
"playback_url": "https://api.zoom.us/v2/contact_center/inbox/message/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voicemail",
"transcript_url": "https://api.zoom.us/v2/contact_center/inbox/message/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw",
"message_duration": 150,
"consumer_number": "+12058945728",
"consumer_id": "fsdfere78fserhgfyjb",
"consumer_display_name": "Jill",
"status": "normal"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Delete inbox messages
- Method:
DELETE - Path:
/contact_center/inboxes/messages - Tags: Inboxes
Delete messages.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:delete:inbox_messages:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Inbox messages deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get an inbox
- Method:
GET - Path:
/contact_center/inboxes/{inboxId} - Tags: Inboxes
Retrieve an inbox.
Scopes: contact_center_inbox:read:admin
Granular Scopes: contact_center:read:inbox:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Inbox returned.
Content-Type: application/json
-
inbox_content_storage_locationstring, possible values:"US", "AU", "BR", "CA", "DE", "JP", "SG"— The inbox content's physical storage location, using a two-letter country code. US: `United States` AU: `Australia` BR: `Brazil` CA: `Canada` DE: `Germany` JP: `Japan` SG: `Singapore` -
inbox_descriptionstring— The inbox's description. -
inbox_idstring— The inbox's unique ID. -
inbox_namestring— The inbox's name. -
inbox_typestring, possible values:"voicemail"— The inbox type. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of last user to modify the inbox. -
voicemailobject— The voicemail settings.-
delete_voicemail_days_limitinteger— Delete voicemail after a specified number of days. -
greeting_audio_asset_idstring— Greeting audio asset ID used for voicemail. -
soft_deleteboolean— Enable soft deletion for the inbox. -
soft_delete_days_limitinteger— When a voicemail is deleted, it is initially soft-deleted and can be restored within the admin-specified timeframe, which is up to 30 days. After that time, the voicemail is permanently deleted. -
voicemail_auto_assignmentobject— Voicemail auto assignment settings.-
enableboolean— Enable voicemail auto assignment. -
voicemail_auto_assignment_content_idstring— The voicemail auto assignment operation object's ID. Can be `userId`, `queueId`, or `teamId`. This field is only effective when `voicemail_auto_assignment_type` is `1`, `3`, or `4`. -
voicemail_auto_assignment_during_active_work_sessioninteger, format:int32, possible values:0, 1— The person assigned the voicemail auto assignment is during an active work session. The value can only be `0` or `1`, 0 - inactive, 1 - active. This field is only effective when `voicemail_auto_assignment_type` is `2`, `3`, `4`, or `5`. -
voicemail_auto_assignment_routine_profile_idstring— Routine profile ID used by voicemail auto assignment. This field only takes effect when `voicemail_auto_assignment_type` is `2`, `3`, `4`, or `5`, and the user has set a routine profile. -
voicemail_auto_assignment_typeinteger, format:int32, possible values:1, 2, 3, 4, 5— Voicemail auto assignment type. The value can be any one of these options. *1 - user *2 - access list *3 - queue *4 - team *5 - rotation
-
-
voicemail_notification_by_emailobject— The voicemail notification by email.-
emailsarray— Forward voicemail to email list.Items:
string -
enableboolean— The voicemail enable notification by email. -
forward_voicemail_to_emailsboolean— Enable forwarding voicemail to emails. -
include_voicemail_fileboolean— Whether to include voicemail file. -
include_voicemail_transcriptionboolean— Whether to include voicemail transcription.
-
-
voicemail_send_reminders_for_unresolvedobject— Reminder policy for unresolved voicemails.-
enableboolean— Enable a reminder policy for unresolved voicemails. -
send_alert_for_unresolved_voicemail_timeoutinteger— Timeout for unresolved voicemail reminders, in minutes. The range is from 1 to 10080.
-
-
voicemail_time_limitinteger— The voicemail time limit in minutes. -
voicemail_transcriptionboolean— Enable voicemail transcription.
-
Example:
{
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"inbox_description": "This is a inbox.",
"inbox_type": "voicemail",
"inbox_content_storage_location": "US",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"voicemail": {
"soft_delete": true,
"soft_delete_days_limit": 20,
"voicemail_time_limit": 5,
"delete_voicemail_days_limit": 30,
"voicemail_transcription": false,
"voicemail_notification_by_email": {
"enable": false,
"include_voicemail_file": false,
"include_voicemail_transcription": false,
"forward_voicemail_to_emails": false,
"emails": [
"jchill@example.com"
]
},
"greeting_audio_asset_id": "testAssetId",
"voicemail_auto_assignment": {
"enable": false,
"voicemail_auto_assignment_type": 1,
"voicemail_auto_assignment_during_active_work_session": 0,
"voicemail_auto_assignment_content_id": "testUserId",
"voicemail_auto_assignment_routine_profile_id": "testRoutineProfileId"
},
"voicemail_send_reminders_for_unresolved": {
"enable": false,
"send_alert_for_unresolved_voicemail_timeout": 30
}
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update an inbox
- Method:
PATCH - Path:
/contact_center/inboxes/{inboxId} - Tags: Inboxes
Update an inbox.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:update:inbox:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
inbox_content_storage_locationstring, possible values:"US", "AU", "BR", "CA", "DE", "JP", "SG"— The inbox content's physical storage location, using a two-letter country code. US: `United States` AU: `Australia` BR: `Brazil` CA: `Canada` DE: `Germany` JP: `Japan` SG: `Singapore` -
inbox_descriptionstring— The inbox's description. -
inbox_namestring— The inbox's name. -
voicemailobject— The voicemail settings.-
delete_voicemail_days_limitinteger— Delete voicemail after a specified number of days. -
greeting_audio_asset_idstring— Greeting audio asset ID used for voicemail. -
soft_deleteboolean— Enable soft deletion for the inbox. -
soft_delete_days_limitinteger— When a voicemail is deleted, it is initially soft-deleted and can be restored within the admin-specified timeframe, which is up to 30 days. After that time, the voicemail is permanently deleted. -
voicemail_auto_assignmentobject— Voicemail auto assignment settings.-
enableboolean— Enable voicemail auto assignment. -
voicemail_auto_assignment_content_idstring— The voicemail auto assignment operation object's ID. Can be `userId`, `queueId` or `teamId`. This field is only effective when `voicemail_auto_assignment_type` is `1`, `3`, or `4`. -
voicemail_auto_assignment_during_active_work_sessioninteger, format:int32, possible values:0, 1— The person assigned the voicemail auto assignment is during an active work session.The value can only be `0` inactive or `1` active. This field is only effective when `voicemail_auto_assignment_type` is `2`, `3`, `4`, or `5`. -
voicemail_auto_assignment_routine_profile_idstring— Routine profile ID used by voicemail auto assignment. This field only takes effect when `voicemail_auto_assignment_type` is `2`, `3`, `4,` or `5`, and the user has set a routine profile. -
voicemail_auto_assignment_typeinteger, format:int32, possible values:1, 2, 3, 4, 5— Voicemail auto assignment type. The value can only be one of these values. *1 - user *2 - access list *3 - queue *4 - team *5 - rotation
-
-
voicemail_notification_by_emailobject— The voicemail notification by email.-
emailsarray— Forward voicemail to email list.Items:
string -
enableboolean— The voicemail enable notification by email. -
forward_voicemail_to_emailsboolean— Enable forwarding voicemail to emails. -
include_voicemail_fileboolean— Whether to include voicemail file. -
include_voicemail_transcriptionboolean— Whether to include voicemail transcription.
-
-
voicemail_send_reminders_for_unresolvedobject— Reminder policy for unresolved voicemails.-
enableboolean— Enable a reminder policy for unresolved voicemails. -
send_alert_for_unresolved_voicemail_timeoutinteger— Timeout for unresolved voicemail reminders, in minutes. The range is from 1 to 10080.
-
-
voicemail_time_limitinteger— The voicemail time limit in minutes. -
voicemail_transcriptionboolean— Enable voicemail transcription.
-
Example:
{
"inbox_name": "example",
"inbox_description": "This is a inbox.",
"inbox_content_storage_location": "US",
"voicemail": {
"soft_delete": true,
"soft_delete_days_limit": 20,
"voicemail_time_limit": 5,
"delete_voicemail_days_limit": 30,
"voicemail_transcription": false,
"voicemail_notification_by_email": {
"enable": false,
"include_voicemail_file": false,
"include_voicemail_transcription": false,
"forward_voicemail_to_emails": false,
"emails": [
"jchill@example.com"
]
},
"greeting_audio_asset_id": "testAssetId",
"voicemail_auto_assignment": {
"enable": false,
"voicemail_auto_assignment_type": 1,
"voicemail_auto_assignment_during_active_work_session": 0,
"voicemail_auto_assignment_content_id": "testUserId",
"voicemail_auto_assignment_routine_profile_id": "testRoutineProfileId"
},
"voicemail_send_reminders_for_unresolved": {
"enable": false,
"send_alert_for_unresolved_voicemail_timeout": 30
}
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Inbox updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update an inbox's email notification setting
- Method:
PATCH - Path:
/contact_center/inboxes/{inboxId}/email_notification - Tags: Inboxes
Update an inbox's email notification setting for a given user.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:update:inbox:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
user_id(required)string— The email, Meetings user ID, or Contact Center id used to identify the user. This value will not be modified. -
email_notificationboolean— Enable email notification. Defaults to `false`.
Example:
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"email_notification": true
}
Responses
Status: 204 **HTTP Status Code:** `204` Inbox email notifictaion updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3009` <br> The voicemail email notification setting for inbox ''{inboxId}'' is locked and cannot be modified. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: {inboxId}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get an inbox email notification list
- Method:
GET - Path:
/contact_center/inboxes/{inboxId}/email_notifications - Tags: Inboxes
Retrieve a list of inbox email notifications.
Scopes: contact_center_inbox:read:admin
Granular Scopes: contact_center:read:inbox:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` \n \nInbox email notifictaion settings returned.
Content-Type: application/json
-
email_notificationsarray— Information about the inbox email notification settings.Items:
-
display_namestring— The user's display name. -
email_notificationboolean— Enable email notification. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"email_notifications": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"email_notification": true,
"display_name": "Jane Doe",
"user_email": "jchill@example.com"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List an inbox's messages
- Method:
GET - Path:
/contact_center/inboxes/{inboxId}/messages - Tags: Inboxes
Return a list of all messages in an inbox.
Scopes: contact_center_inbox:read:admin
Granular Scopes: contact_center:read:inbox_messages:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Inbox messages returned.
Content-Type: application/json
-
messagesarray— Information about the inbox message.Items:
-
consumer_display_namestring— The consumer's name. -
consumer_idstring— The consumer's ID. -
consumer_numberstring— The consumer's phone number. -
created_atstring, format:date-time— The inbox message's creation time. -
download_urlstring— The URL to download the inbox message. For security purposes, you **must** provide an OAuth access token in the authorization header to download the inbox message file using this URL. Example: ```curl --request GET --url {download_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
engagement_idstring— The engagement's ID. -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
inbox_idstring— The inbox's unique ID. -
inbox_namestring— The inbox's name. -
message_durationinteger— The inbox message's duration in seconds. -
message_idstring— The inbox message's ID. -
message_typestring, possible values:"voicemail"— The inbox message's type. -
playback_urlstring— The URL to playback the inbox message. For security purposes, you **must** provide an OAuth access token in the authorization header to playback the inbox message file using this URL. Example: ```curl --request GET --url {playback_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
queue_idstring— The queue ID of the inbox message routed by the queue. -
queue_namestring— The queue name of the inbox message routed by the queue. -
statusstring, possible values:"normal", "deleted"— The inbox message soft delete flag. -
transcript_urlstring— The URL to download the inbox message transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. Example: ```curl --request GET --url {transcript_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ```
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"messages": [
{
"message_id": "4Q0ILNMfTA2nJolNxhg0Rw",
"inbox_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"inbox_name": "example",
"engagement_id": "xRk0eHNNTGygFDPrWqR9FA",
"created_at": "2022-05-23T14:15:57Z",
"flow_id": "1wGgU3HQR8u1wWjPFNXOyA",
"flow_name": "inbox_message_flow",
"queue_id": "ZWQ84A20CBBA11AFA5BC55079D5A12A28D7",
"queue_name": "inbox_message_queue",
"message_type": "voicemail",
"download_url": "https://api.zoom.us/v2/contact_center/inbox/message/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voicemail",
"playback_url": "https://api.zoom.us/v2/contact_center/inbox/message/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voicemail",
"transcript_url": "https://api.zoom.us/v2/contact_center/inbox/message/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw",
"message_duration": 150,
"consumer_number": "+12058945728",
"consumer_id": "fsdfere78fserhgfyjb",
"consumer_display_name": "Jill",
"status": "normal"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete an inbox's messages
- Method:
DELETE - Path:
/contact_center/inboxes/{inboxId}/messages - Tags: Inboxes
Delete messages in an inbox.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:delete:inbox_messages:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Inbox messages deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Delete an inbox message
- Method:
DELETE - Path:
/contact_center/inboxes/{inboxId}/messages/{messageId} - Tags: Inboxes
Delete a single message in an inbox.
Scopes: contact_center_inbox:write:admin
Granular Scopes: contact_center:delete:inbox_message:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Inbox message deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br> **Error Code:** `3101` <br> Inbox message does not exist: $messageId. <br> **Error Code:** `3102` <br> The inbox id that matches this message id is: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get inbox access queues
- Method:
GET - Path:
/contact_center/inboxes/{inboxId}/queues - Tags: Inboxes
Retrieve a list of queues that have access to an inbox.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_inbox_queues:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` List of inbox queues returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
queuesarray— Information about the task queues.Items:
-
agents_countinteger— The number of assigned agents. -
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat" -
queue_idstring— The task queue's ID. -
queue_namestring— The task queue's name. -
supervisors_countinteger— The number of assigned supervisors.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"queues": [
{
"cc_queue_id": "Ql3qxUWXSHes4PmcOmzyOg",
"queue_name": "queue_661c6e4b-89fc-4b0d-9978-c7394725462",
"agents_count": 1,
"supervisors_count": 1,
"channel": "voice"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign inbox access queues
- Method:
POST - Path:
/contact_center/inboxes/{inboxId}/queues - Tags: Inboxes
Assign queues access to an inbox.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:inbox_queue:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
cc_queue_idsarrayItems:
string— The Contact Center queue's ID. -
queue_idsarrayItems:
string— The queue's ID.
Example:
{
"cc_queue_ids": [
"zeYjXoDOS_eV1QmTpj63PQ"
]
}
Responses
Status: 200 **HTTP Status Code:** `200` List of queues has been updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1202` <br> "Queues do not exist: [$queue_id]."<br> <br> **Error Code:** `1203` <br> Queue is already assigned to inbox: [$queue_id]. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId.<br> <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Remove inbox access queues
- Method:
DELETE - Path:
/contact_center/inboxes/{inboxId}/queues - Tags: Inboxes
Remove queues' access to an inbox.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:inbox_queue:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queues' access has been removed from the inbox.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1202` <br> "Queues do not exist: [$queue_id]."<br> <br> **Error Code:** `1204` <br> Queue is not assigned to inbox: [$queue_id]. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId.<br> <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List inbox users
- Method:
GET - Path:
/contact_center/inboxes/{inboxId}/users - Tags: Inboxes
Retrieve a list of users assigned to an inbox.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:inbox_user:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Returns a list of users assigned to the inbox.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages. -
usersarray— Information about the users.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId.<br> <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign inbox access users
- Method:
POST - Path:
/contact_center/inboxes/{inboxId}/users - Tags: Inboxes
Assign users to a Contact Center inbox. This operation is atomic - all specified users must be valid and not already assigned to the inbox, or the entire request fails. No partial assignments occur.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:write:inbox_user:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Users successfully assigned to an inbox.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1013` <br> User is already assigned to inbox: [user_ids]. <br> **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: {inboxId}. <br> **Error Code:** `1012` <br> Users do not exist: [user_ids]. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign inbox access users
- Method:
DELETE - Path:
/contact_center/inboxes/{inboxId}/users - Tags: Inboxes
Remove users' access to an inbox.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:delete:inbox_user:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` Users' access has been removed from the inbox.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1012` <br> Users do not exist: [$user_id]. <br> **Error Code:** `1014` <br> User is not assigned to inbox: [$user_id]. <br> **Error Code:** `3010` <br> More than one matching inbox found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Inbox does not exist: $inboxId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List email message history
- Method:
GET - Path:
/contact_center/email/messages - Tags: Logs
Retrieve the list of messages exchanged during a specific email engagement.
Scopes: contact_center_messaging:read:admin
Granular Scopes: contact_center:read:engagement_log:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 A list of messages belonging to the specified email engagement.
Content-Type: application/json
-
engagement_idstring— The email engagement's unique identifier. -
has_moreboolean— Whether there are more records available beyond the current response. -
messagesarray— List of messages exchanged during the engagement.Items:
-
from_type(required)string, possible values:"agent", "customer", "supervisor"— The message sender's participant type. -
message_type(required)string, possible values:"general", "system"— The message type. `general` indicates a standard user message, while `system` indicates a message generated by the system, such as engagement events or status updates. -
sent_time(required)string, format:date-time— The timestamp when the email was sent, in ISO 8601 format (UTC), to the millisecond. -
text(required)string— The email's plain text portion. -
user_id(required)string— The agent's unique identifier. -
user_name(required)string— The agent's name. -
bccarray— The list of blind carbon copy (BCC) recipients for this email. These recipients cannot see each other's addresses.Items:
-
addressstring— The BCC recipient's email address. -
namestring— The BCC recipient's display name.
-
-
ccarray— The list of carbon copy (CC) recipients for this email. These recipients can see each other's addresses.Items:
-
addressstring— The CC recipient's email address. -
namestring— The CC recipient's display name.
-
-
contentstring— The original full content of the email, including formatting or markup. -
content_mime_typestring— The MIME type of the email content, indicating its format and character encoding. -
filesarray— The list of files attached to this email.Items:
-
download_urlstring— Attachment download link. -
file_namestring— The file's name, including its extension. -
file_sizeinteger, format:int64— The file size, in bytes. -
file_typestring— The file's MIME type or format.
-
-
from_addressobject— The sender's information.-
addressstring— The sender's email address. -
namestring— The sender's display name.
-
-
inline_filesarray— The list of inline files embedded within the email content, such as images or logos displayed directly in the message body.Items:
-
download_urlstring— Attachment download link -
file_namestring— The file's name, including its extension. -
file_sizeinteger, format:int64— The file's size, in bytes. -
file_typestring— The file's MIME type or format.
-
-
subjectstring— The email's subject. -
toarray— The list of recipients for this email.Items:
-
addressstring— The recipient's email address. -
namestring— The recipient's display name.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes.
Example:
{
"engagement_id": "DmJzBVygRcaMuPqYar2lxU",
"messages": [
{
"content": "<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div dir=\"ltr\"><img src=\"cid:ii_me9niaqb0\" alt=\"image.png\" width=\"542\" height=\"224\"><br></div></body></html>",
"text": "email text",
"subject": "email subject",
"sent_time": "2024-12-03T13:07:46.123Z",
"from_type": "agent",
"user_id": "JzBVygmRcaMzBVygr2lxU",
"user_name": "Agent Alice",
"from_address": {
"name": "Jill",
"address": "Jill63PQ@example.com"
},
"to": [
{
"name": "Jill",
"address": "Jill63PQ@example.com"
}
],
"cc": [
{
"name": "Jill",
"address": "Jill63PQ@example.com"
}
],
"bcc": [
{
"name": "Jill",
"address": "Jill63PQ@example.com"
}
],
"content_mime_type": "text/plain; charset=UTF-8",
"message_type": "system",
"files": [
{
"file_type": "application/pdf",
"file_name": "invoice_2025.pdf",
"file_size": 1024,
"download_url": "https://api.example.com/attachments/0AYFv9ePSsmPUSJYHorUWQ/download?type=email_attachment"
}
],
"inline_files": [
{
"file_type": "image/png",
"file_name": "logo.png",
"file_size": 2048,
"download_url": "https://api.example.com/attachments/0AYFv9ePSsmPUSJYHorUWQ/download?type=email_attachment"
}
]
}
],
"has_more": false,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `11004` <br> Engagement not found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List message history
- Method:
GET - Path:
/contact_center/messaging/messages - Tags: Logs
Retrieve the list of messages exchanged during a specific messaging engagement.
Scopes: contact_center_messaging:read:admin
Granular Scopes: contact_center:read:messaging:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 A list of messages belonging to the specified engagement.
Content-Type: application/json
-
has_more(required)boolean— Whether there are more records available beyond the current response. -
messagesarray— A list of messages exchanged during the engagement.Items:
-
message_id(required)string— The message's unique identifier. -
message_type(required)string, possible values:"general", "system"— The message type. `general` indicates a standard user message, while `system` indicates a message generated by the system, such as engagement events or status updates. -
sender_participant_id(required)string— The message sender's unique identifier, corresponding to the internally generated participant_id within the Contact Center. -
sender_participant_name(required)string— The sender's display name. -
sent_time(required)string, format:date-time— The timestamp when the message was sent, in ISO 8601 format (UTC), to the millisecond. -
contentobject— The message's content.-
type(required)string, possible values:"text", "html", "markdown", "quickReplies", "card", "carousel", "form", "article", "video", "attachment", "multiAttachment", "error"— The message's content type. -
value(required)string— The actual message content.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes.
Example:
{
"messages": [
{
"message_id": "lKK_xlqXQWex0mKUYyGHUw",
"content": {
"type": "text",
"value": "Hi, I'm your virtual agent!"
},
"sent_time": "2024-12-03T13:07:46.123Z",
"sender_participant_id": "wMLp6VvjTc6A1mkiwHt3dQ",
"sender_participant_name": "Agent Alice",
"message_type": "system"
}
],
"has_more": false,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `11006` <br> The integration messaging channel feature is not enabled for this account. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `11004` <br> Engagement not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List SMS logs
- Method:
GET - Path:
/contact_center/sms - Tags: Logs
Returns a list of SMS engagement logs. Engagement data are available via API once they are completed.
Scopes: contact_center_sms:read:admin
Granular Scopes: contact_center:read:sms_log:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Variables list returned
Content-Type: application/json
-
fromstring, format:date-time— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'`, or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, return data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned in a single API call. -
smsarray— Information about the SMS.Items:
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The agent's name. -
user_idstring— The agent's ID.
-
-
consumer_display_namestring— The consumer's name. -
consumer_numberstring— The consumer's phone number. -
contact_center_numberstring— The agent's number. An agent used a flow or queue number and did not really have its own number. -
country_namestring— The country name. -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. `inbound` | `outbound`. -
end_timestring, format:date-time— The date and time when the engagement ended in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
engagement_idstring— The engagement's ID -
queuesarray— Information about the engagement's queues.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
sms_typesarray— The SMS's type.Items:
string, possible values:"sms", "mms" -
start_timestring, format:date-time— The date and time when the engagement started in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
total_received_filesinteger, format:int64— The total number of received files. -
total_received_messagesinteger, format:int64— The total number of received messages. -
total_sent_filesinteger, format:int64— The total number of sent files. -
total_sent_messagesinteger, format:int64— The total number of sent messages.
-
-
tostring, format:date-time— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"from": "2023-01-01T08:00:00Z",
"to": "2023-01-01T09:00:00Z",
"sms": [
{
"direction": "inbound",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"contact_center_number": "+18108001001",
"start_time": "2023-01-01T08:00:00Z",
"end_time": "2023-01-01T09:00:00Z",
"consumer_number": "+12059300920",
"consumer_display_name": "Tester",
"queues": [
{
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "agentQueue"
}
],
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly"
}
],
"country_name": "China",
"sms_types": [
"sms"
],
"total_sent_messages": 0,
"total_received_messages": 0,
"total_sent_files": 0,
"total_received_files": 0
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: $engagementId. <br> **Error Code:** `1001` <br> User does not exist: $userId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Send an SMS
- Method:
POST - Path:
/contact_center/sms - Tags: SMS
Send an SMS message.
Scopes: contact_center_sms:write:admin
Granular Scopes: contact_center:write:sms:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
body(required)string— The content that needs to be sent as an SMS. Maximum length is 500 characters. Messages will be broken into smaller segments of 160 characters and concatenated at the time of delivery. Unicode characters and emojis are supported. You can send any text or URL. MMS is not supported. There is no support for handling inbound messages and delivery confirmations. -
consumer_numbers(required)array— The phone number of the person receiving the SMS. Consumer numbers should be in the E.164 format. Opt in - START - and opt out - STOP - keywords received from this number will be honored. This field may not be empty. Maximum length of the array is 20 items.Items:
string— The consumer's e164 number. -
contact_center_number(required)string— This must be an SMS capable phone number allocated to Zoom Contact Center within the customer account. Enter the number in E.164 format. Get the number via Zoom PAYG Global Number SKU after meeting the in-country compliance requirements.
Example:
{
"contact_center_number": "+12090000000",
"consumer_numbers": [
"+12090001111"
],
"body": "hello contact sms"
}
Responses
Status: 201 Send SMS response.
Content-Type: application/json
Array of:
-
consumer_number(required)string— The consumer's phone number, in e164 format. -
contact_center_number(required)string— E164 flow number. -
success(required)boolean— Indicates whether the SMS was sent successfully. -
descriptionstring, possible values:"Invalid consumer number. The format of the consumer number used is incorrect. E.164 format is required", "Zoom Contact Center numbers cannot be used as consumer numbers. Retry using a non Zoom Contact Center number", "The consumer number you have messaged has not opted in", "This consumer number has opted out of receiving SMS from this Zoom contact center number", "This consumer number is a part of the block list defined by your Zoom Contact Center account administrator and cannot be messaged", "International messaging is not supported on this account"— The error message returned when the SMS was not successfully sent. -
message_idstring— The message ID. Indicates the action of sending a message from this `contact_center_number` to this consumer number.
Example:
[
{
"contact_center_number": "+12090000000",
"consumer_number": "+12090001111",
"message_id": "IQ-dhfaoufosadfb",
"success": true,
"description": "The consumer number you have messaged has not opted in"
}
]
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1405` <br> `contact_center_number` has not enabled SMS feature. <br> **Error Code:** `1408` <br> `consumer_number` cannot be more than 20 digits. <br> **Error Code:** `1404` <br> `contact_center_number` not found. <br> **Error Code:** `1412` <br> `body` can't be empty. <br> **Error Code:** `1413` <br> SMS `body` is too long. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List voice call logs
- Method:
GET - Path:
/contact_center/voice_calls - Tags: Logs
Return a list of voice call engagement logs. Engagement data is available via API once it is completed. Note These fields - agents.user_ip_address, agents.user_device_mac_address, agents.user_registered_sip_zone, agents.sip_zone_ip_address, sbcInfos.session_border_controller_name, sbcInfos.session_border_controller_ip_address, sbcInfos.consumer_zoom_trunk_name and sbcInfos.consumer_sbc_ip_address - are only available to accounts which have enabled an internal flag to return these additional fields. To enable the feature flag, contact Zoom Support.
Scopes: contact_center_voice_call:read:admin
Granular Scopes: contact_center:read:voice_call_log:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Variables list returned.
Content-Type: application/json
-
fromstring, format:date-time— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, return data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
tostring, format:date-time— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter. -
total_recordsinteger— The total number of all the records available across pages. -
voice_callsarray— Information about the voice call.Items:
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The agent's name. -
sip_zone_ip_addressstring, format:ipv4— The SIP zome's IP address. -
team_idsarray— The agent's team IDsItems:
string— agent team ID list -
team_namesarray— The agent's team names.Items:
string— agent team name list. -
user_device_mac_addressstring— MAC address of the agent's device. -
user_emailstring— The agent's email. -
user_idstring— The agent's ID. -
user_ip_addressstring, format:ipv4— IP address of the agent's device. -
user_regionstring— The agent's region name -
user_registered_sip_zonestring— The SIP zone where the agent registered.
-
-
call_legsarray— The direction of the engagement call leg. `inbound` | `outbound`.Items:
string, possible values:"inbound", "outbound" -
callee_numberstring— The callee's phone number. -
callee_number_typestring, possible values:"toll_free_number", "virtual_service_number", "byoc_number"— The callee's number type. -
caller_idstring— The caller's number. -
caller_numberstring— The caller's phone number. -
caller_number_typestring, possible values:"toll_free_number", "virtual_service_number", "byoc_number"— The caller's number type. -
calling_partystring, possible values:"consumer", "agent"— The calling's party. -
chargestring— The bill's charge. -
charge_typestring, possible values:"per_minute"— The charge type. -
consumer_display_namestring— The consumer's name. -
consumer_numberstring— The consumer's phone number. -
country_namestring— The country name. -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. -
distributionsarray— The engagement's distribution.Items:
string, possible values:"acd", "non_acd" -
end_timestring— The date and time when the engagement ended, in `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format. The timezone offset is derived from the `from` input parameter if it includes a timezone offset (e.g., `-08:00`), otherwise it defaults to `+00:00` (UTC). -
engagement_idstring— The engagement's ID -
flowsarray— Information about the engagement's flows.Items:
-
flow_idstring— The flow's ID. -
flow_namestring— The flow's name.
-
-
inboxboolean— Flag to determine whether a message is in the box. -
monitoredboolean— Flag to determine whether to monitored. -
queuesarray— Information about the engagement's queues.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
ratesarray— The price for each sent message.Items:
string -
recordedboolean— Flag to determine whether to recorded. -
resultstring, possible values:"completed", "short_abandoned", "long_abandoned", "hold_abandoned", "long_calls", "short_calls", "hang_up_calls", "overflowed_to_disconnect", "overflowed_to_inbox", "overflowed", "abandon_quit", "auto_closed", "contained", "missed", "declined", "callback_abandoned_by_consumer"— The engagement's results. -
session_border_controller_listarray— Information about the session border controllers (SBCs) involved in the call.Items:
-
consumer_sbc_ip_addressstring— The customer's SBC IP address. -
consumer_zoom_trunk_namestring— The name of the trunk between the customer SBC and Zoom SBC. -
session_border_controller_ip_addressstring— The SBC's IP address. -
session_border_controller_namestring— The session border controller's name.
-
-
start_timestring— The date and time when the engagement started in `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format. The timezone offset matches the offset provided in the `from` input parameter, or defaults to UTC (+00:00) if no offset was provided. -
sub_typesarray— Specifies the detailed call leg type, such as a transfer or conference call.Items:
string, possible values:"external_warm_conference_call", "external_direct_conference_call", "external_warm_transfer_call", "external_direct_transfer_call", "internal_warm_conference_call", "internal_direct_conference_call", "internal_warm_transfer_call", "internal_direct_transfer_call", "flow_initiated_outgoing_call" -
total_durationinteger, format:int64— The engagement's total duration, in seconds. -
typesarray— The call's type.Items:
string, possible values:"external_call", "external_conference_call", "external_callback_call", "internal_call", "internal_conference_call", "internal_callback_call" -
voice_call_detailsarray— All related call logs.Items:
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The agent's name. -
sip_zone_ip_addressstring, format:ipv4— The SIP zone's IP address. -
team_idsarray— The agent's team IDsItems:
string— Agent team ID list. -
team_namesarray— The agent's team names.Items:
string— Agent team name list. -
user_device_mac_addressstring— The agent's device's MAC address. -
user_emailstring— The agent's email. -
user_idstring— The agent's ID. -
user_ip_addressstring, format:ipv4— The agent's device's IP address. -
user_regionstring— The agent's region name. -
user_registered_sip_zonestring— The SIP zone where the agent registered.
-
-
call_legstring, possible values:"inbound", "outbound"— The direction of the engagement call log. -
callee_numberstring— The callee's phone number. -
callee_number_typestring, possible values:"toll_free_number", "virtual_service_number", "byoc_number"— The callee's number type. -
caller_idstring— The caller's number. -
caller_numberstring— The caller's phone number. -
caller_number_typestring, possible values:"toll_free_number", "virtual_service_number", "byoc_number"— The caller's number type. -
calling_partystring, possible values:"consumer", "agent"— The calling's party. -
chargestring— The bill's charge. -
charge_typestring, possible values:"per_minute"— The charge type. -
consumer_display_namestring— The consumer's name. -
consumer_numberstring— The consumer's phone number. -
country_namestring— The country name. -
distributionstring, possible values:"acd", "non_acd"— The call log's distribution. -
end_timestring— The date and time when the call ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
engagement_idstring— The engagement's ID. -
flowobject— Information about the flow.-
flow_idstring— The flow's ID. -
flow_namestring— The flow's name.
-
-
inboxboolean— Whether a message is in the box. -
monitoredboolean— Whether to monitor. -
queueobject— Information about the queue.-
cc_queue_idstring— The Contact Center queue's ID. -
queue_namestring— The queue's name.
-
-
ratestring— The price for sent message. -
recordedboolean— Whether to record. -
resultstring, possible values:"completed", "short_abandoned", "long_abandoned", "hold_abandoned", "long_calls", "short_calls", "hang_up_calls", "overflowed_to_disconnect", "overflowed_to_inbox", "overflowed", "abandon_quit", "auto_closed", "contained", "missed", "declined", "callback_abandoned_by_consumer"— The engagement's results. -
start_timestring— The date and time when the call started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
total_durationinteger, format:int64— The call log's total duration, in seconds. -
typestring, possible values:"external_call", "external_conference_call", "external_callback_call", "internal_call", "internal_conference_call", "internal_callback_call"— The call's type.
-
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"from": "2023-01-01T08:00:00Z",
"to": "2023-01-01T09:00:00Z",
"voice_calls": [
{
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"direction": "inbound",
"call_legs": [
"inbound"
],
"distributions": [
"acd"
],
"types": [
"external_call"
],
"sub_types": [
"external_direct_transfer_call"
],
"caller_number": "+18108001001",
"caller_number_type": "toll_free_number",
"callee_number": "+12055437350",
"callee_number_type": "toll_free_number",
"start_time": "2023-01-01T00:00:00-08:00",
"end_time": "2023-01-01T01:00:00-08:00",
"total_duration": 10,
"consumer_number": "+12059300920",
"consumer_display_name": "Tester",
"queues": [
{
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "agentQueue"
}
],
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"user_email": "jakie@zoom.us",
"user_ip_address": "38.145.73.4",
"user_device_mac_address": "05:FA:15:25:EE:FF",
"user_registered_sip_zone": "ams1sbc",
"sip_zone_ip_address": "38.145.73.4",
"user_region": "Main Region",
"team_ids": [
"[\"3XilEfOvQEKRIWMWhX1jDg\"]"
],
"team_names": [
"[\"My team\"]"
]
}
],
"flows": [
{
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo"
}
],
"country_name": "China",
"recorded": false,
"monitored": false,
"inbox": false,
"result": "completed",
"caller_id": "+12058945728",
"calling_party": "consumer",
"charge": "$0.019",
"rates": [
"$0.019"
],
"charge_type": "per_minute",
"session_border_controller_list": [
{
"session_border_controller_name": "ams1sbc",
"session_border_controller_ip_address": "38.145.73.20",
"consumer_zoom_trunk_name": "C10010142296A06",
"consumer_sbc_ip_address": "39.15.60.145"
}
],
"voice_call_details": [
{
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"call_leg": "inbound",
"distribution": "acd",
"type": "external_call",
"caller_number": "+18108001001",
"caller_number_type": "toll_free_number",
"callee_number": "+12055437350",
"callee_number_type": "toll_free_number",
"start_time": "2023-01-01T00:00:00-08:00",
"end_time": "2023-01-01T01:00:00-08:00",
"total_duration": 10,
"consumer_number": "+12059300920",
"consumer_display_name": "Tester",
"queue": {
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "agentQueue"
},
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"user_email": "jakie@zoom.us",
"user_ip_address": "38.145.73.4",
"user_device_mac_address": "05:FA:15:25:EE:FF",
"user_registered_sip_zone": "ams1sbc",
"sip_zone_ip_address": "38.145.73.4",
"user_region": "Main Region",
"team_ids": [
"3XilEfOvQEKRIWMWhX1jDg"
],
"team_names": [
"My team"
]
}
],
"flow": {
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo"
},
"country_name": "China",
"recorded": false,
"monitored": false,
"inbox": false,
"result": "completed",
"caller_id": "+12058945728",
"calling_party": "consumer",
"charge": "$0.019",
"rate": "$0.019",
"charge_type": "per_minute"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in `yyyy-mm-dd`` or ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List work item message history
- Method:
GET - Path:
/contact_center/work_item/messages - Tags: Logs
Retrieve the list of messages exchanged during a specific work item engagement.
Note This endpoint retrieves messages from work item sessions associated with the engagement.
Scopes: contact_center_messaging:read:admin
Granular Scopes: contact_center:read:engagement_log:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 A list of messages belonging to the specified work item engagement.
Content-Type: application/json
-
has_more(required)boolean— Whether there are more records available beyond the current response. -
engagement_idstring— The work item engagement's unique identifier. -
messagesarray— List of messages exchanged during the work item engagement.Items:
-
message_id(required)string— The message's unique identifier. -
message_type(required)string, possible values:"general", "system"— The message type. * `general` - a standard user message * `system` - a message generated by the system, such as engagement events or status updates -
sender_participant_id(required)string— The message sender's unique identifier, corresponding to the internally generated `participant_id` within the Contact Center. -
sender_participant_name(required)string— The sender's display name. -
sent_time(required)string, format:date-time— The timestamp when the message was sent, in ISO 8601 format (UTC), to the millisecond. -
contentobject— **Deprecated**. Use `message_details`.-
type(required)string, possible values:"text", "html", "action", "markdown", "quickReplies", "card", "carousel", "article", "image", "audio", "video", "link", "attachment"— **Deprecated**. Use `message_details.content_type`. -
value(required)string— **Deprecated**. Use `message_details.content`.
-
-
message_channelstring, possible values:"email", "sms"— The message's channel, such as `email` or `sms`. This field is only set for flow send email or SMS messages. Otherwise it is empty. -
message_detailsobject— Message payload details. For email, content is the original email body and text is the plain-text body. For other channels, content is the original message payload.-
contentstring— The original message payload. For email, this is the full email body, typically HTML. For other channels, this is the original message content. The maximum content size is `400KB`, and UTF-8 encoded. -
content_typestring, possible values:"text", "html", "action", "markdown", "quickReplies", "card", "carousel", "article", "image", "audio", "video", "link", "attachment"— The type of `message_details.content`. For email, this is typically `html`, or `text` when there is no HTML body. For other channels, it indicates the original message payload type. -
filesarray— The list of attachments. This field is truncated to a maximum of 20 items. Additional files will not be returned.Items:
-
download_urlstring— Attachment download link. -
file_namestring— The file's name, including its extension. -
file_sizeinteger, format:int64— The file size, in bytes. -
file_typestring— The file's MIME type or format.
-
-
from_addressobject— Email-only. The email sender information.-
addressstring— The email sender's email address. -
namestring— The email sender's display name.
-
-
inline_filesarray— Email-only. Inline files embedded in the email body, such as images or logos. This field is truncated to a maximum of 20 items. Additional inline files will not be returned.Items:
-
download_urlstring— Attachment download link -
file_namestring— The file's name, including its extension. -
file_sizeinteger, format:int64— The file's size, in bytes. -
file_typestring— The file's MIME type or format.
-
-
subjectstring— Email-only. The subject of the email message. -
textstring— Email-only. The plain-text body extracted from the email content. -
to_addressesarray— Email-only. The list of email recipients. Maximum of 20 items will be returned. If there are more than 20 email addresses, only the first 20 will be included in the response.Items:
-
addressstring— The recipient's email address. -
namestring— The recipient's display name.
-
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes.
Example:
{
"engagement_id": "DmJzBVygRcaMuPqYar2lxU",
"messages": [
{
"message_id": "lKK_xlqXQWex0mKUYyGHUw",
"message_details": {
"content_type": "text",
"content": "<html><head><meta charset=\"UTF-8\"></head><body><p>Refund request for order 774512.</p><p>Customer reports duplicate charge and asks for reversal.</p></body></html>",
"text": "Refund request for order 774512. Customer reports duplicate charge and asks for reversal.",
"subject": "Refund request for order",
"from_address": {
"name": "Jane Doe",
"address": "jdoe@example.com"
},
"to_addresses": [
{
"name": "Jane Doe",
"address": "jdoe@example.com"
}
],
"files": [
{
"file_type": "application/pdf",
"file_name": "invoice_2025.pdf",
"file_size": 1024,
"download_url": "https://www.example.com/v2/contact_center/attachments/0AYFv9ePSsmPUSJYHorUWQ/download?type=email_attachment"
}
],
"inline_files": [
{
"file_type": "image/png",
"file_name": "logo.png",
"file_size": 2048,
"download_url": "https://www.example.com/v2/contact_center/attachments/0AYFv9ePSsmPUSJYHorUWQ/download?type=email_attachment"
}
]
},
"sent_time": "2025-12-03T13:07:46.123Z",
"sender_participant_id": "wMLp6VvjTc6A1mkiwHt3dQ",
"sender_participant_name": "Agent Alice",
"message_type": "system",
"message_channel": "email"
}
],
"has_more": false,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `11004` <br> Engagement not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Send a message
- Method:
POST - Path:
/contact_center/messages - Tags: Messaging
Send a message via the specified messaging channel.
Note A 200 OK response indicates that the request was successfully received and accepted by the API. It doesn't guarantee that the message has been sent or delivered.
Message delivery is processed asynchronously. To track the actual send and delivery status, use the contact_center.message_status webhook, which provides updates as the message progresses through the system.
Scopes: contact_center_messaging:write:admin
Granular Scopes: contact_center:write:messaging:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
from(required)string— The sender's identifier. Different channels use platform-specific formats. For number-based channels, like WhatsApp, the value must be in E.164 format. For the number-based SMS channel, we support either an E.164 formatted phone number or an alphanumeric ID. -
to(required)string— The recipient's identifier. Different channels use platform-specific formats. For number-based channels, like WhatsApp and SMS, the value must be in E.164 format. -
create_engagementboolean— Whether to create an engagement. -
flow_idstring— The flow ID to trigger when the consumer replies. Only used if `create_engagement=true` and a new engagement is created. -
sms_messageobject— SMS-specific message content.-
type(required)string, possible values:"text"— The SMS message content type. -
value(required)string— The SMS message payload.
-
-
whatsapp_messageobject— WhatsApp-specific message content, with type-specific structure.-
type(required)string, possible values:"whatsAppTemplate"— The message content type. -
value(required)string— The message payload.
-
Example:
{
"from": "+12090000000",
"to": "+12090001111",
"whatsapp_message": {
"type": "whatsAppTemplate",
"value": "{\"name\":\"marketing_button\",\"language_code\":\"en\"}"
},
"sms_message": {
"type": "text",
"value": "Hello, this is a test SMS message."
},
"create_engagement": true,
"flow_id": "zwKiV80hQ7CwRg9BEm0Bvw"
}
Responses
Status: 200 Message response sent.
Content-Type: application/json
-
from(required)string— The sender's identifier. Different channels use platform-specific formats. For number-based channels, such as WhatsApp, the value must be in E.164 format. -
message_id(required)string— The unique identifier of the sent message, automatically generated by the Contact Center. -
to(required)string— The recipient's identifier. Different channels use platform-specific formats. For number-based channels, such as WhatsApp, the value must be in E.164 format. -
engagement_idstring— The engagement's unique identifier, representing either a newly created engagement or an existing open engagement. -
new_engagementboolean— Returned when `create_engagement=true`. `true` indicates a new engagement was created, and `false` indicates an existing open engagement was reused. -
opt_in_requiredboolean— For SMS, `true` indicates the consumer has not opted in and an opt-in invitation was sent.
Example:
{
"from": "+12090000000",
"to": "+12090001111",
"message_id": "f21b5055-5ec2-4e3f-8dde-916d4f76a2ee",
"engagement_id": "u-ewaaDUS9qWlTNt8qhmmA",
"new_engagement": true,
"opt_in_required": true
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1019` <br> feature OP flag is not enabled. <br> **Error Code:** `1500` <br> Input contains an invalid phone number. Please provide valid phone numbers in E.164 format. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List notes
- Method:
GET - Path:
/contact_center/engagements/notes - Tags: Notes
Return a list of notes.
Scopes: contact_center_note:read:admin
Granular Scopes: contact_center:read:list_notes:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Note list returned
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
notesarray— Information about the notes.Items:
-
channelstring, possible values:"voice", "sms", "chat", "video", "email"— The channel's type. * voice * sms * chat * video * email -
channel_sourcestring— The channel source. -
channel_typestring, possible values:"voice", "sms", "chat", "video"— The channel's type: * voice * sms * chat * video -
engagement_idstring— The engagement event's unique ID. -
last_modified_timestring, format:date-time— The note's last modification time. -
notestring— The note's content. -
note_idstring— The note's unique ID. -
user_idstring— The ID of last user to modify the note.
-
-
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"notes": [
{
"note_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"channel": "email",
"channel_source": "email_address",
"note": "This is the content of the note.",
"last_modified_time": "2022-05-23T14:15:57Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List engagement notes
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/notes - Tags: Notes
Return a list of notes under an engagement.
Scopes: contact_center_note:read:admin
Granular Scopes: contact_center:read:list_notes:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Engagement note list returned
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
notesarray— Information about the notes.Items:
-
channelstring, possible values:"voice", "sms", "chat", "video", "email"— The channel's type. * voice * sms * chat * video* email -
channel_sourcestring— The channel source. -
channel_typestring, possible values:"voice", "sms", "chat", "video"— The channel's type. * voice * sms * chat * video -
engagement_idstring— The engagement event's unique ID. -
last_modified_timestring, format:date-time— The note's last modification time. -
notestring— The note's content. -
note_idstring— The note's unique ID. -
user_idstring— The ID of last user to modify the note.
-
-
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"notes": [
{
"note_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"channel": "email",
"channel_source": "email_address",
"note": "This is the content of the note.",
"last_modified_time": "2022-05-23T14:15:57Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get a note
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/notes/{noteId} - Tags: Notes
Retrieve a note.
Scopes: contact_center_note:read:admin
Granular Scopes: contact_center:read:note:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Note returned
Content-Type: application/json
-
channelstring, possible values:"voice", "sms", "chat", "video", "email"— The channel's type. * voice * sms * chat * video * email -
channel_sourcestring, possible values:"email_address"— channel source -
channel_typestring, possible values:"voice", "sms", "chat", "video", "email"— The channel's type. * voice * sms * chat * video -
engagement_idstring— The engagement event's unique ID. -
last_modified_timestring, format:date-time— The note's last modification time. -
notestring— The note's content. -
note_idstring— The note's unique ID. -
user_idstring— The ID of last user to modify the note.
Example:
{
"note_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"channel": "email",
"channel_source": "email_address",
"note": "This is the content of the note.",
"last_modified_time": "2022-05-23T14:15:57Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2704` <br> The engagementId that matches this noteId is: $engagementId <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2701` <br> Note does not exist: $noteId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a note
- Method:
PATCH - Path:
/contact_center/engagements/{engagementId}/notes/{noteId} - Tags: Notes
Update a note.
Scopes: contact_center_note:write
Granular Scopes: contact_center:update:note
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
notestring— The note's content.
Example:
{
"note": "This is the content of the note."
}
Responses
Status: 204 **HTTP Status Code:** `204` Note updated
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2702` <br> Note can not be updated. You can only update the note that belongs to you. <br> **Error Code:** `2704` <br> The `engagementId` that matches this noteId is: $engagementId. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2701` <br> Note does not exist: $noteId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List business hours
- Method:
GET - Path:
/contact_center/business_hours - Tags: Operating Hours
Get a list of business hours. Admins can create business hours to select, such as the business hours "Default Hours".
Scopes: contact_center_operating_hours:read:admin,contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_business_hours:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Business hours returned.
Content-Type: application/json
-
business_hoursarray— Information about the business hours.Items:
-
account_defaultboolean— Default business hours for the newly created queue. -
business_hour_idstring— The business hours' ID. -
business_hour_namestring— The business hours' name. -
flows_countinteger— The number of flows using the business hour. -
hoursobject— The business hours.-
custom_hoursarray— The custom hours settings. It returns only for the `Custom hours` type.Items:
-
custom_hour_rangesarray— The custom hours range. It returns only for the `Customized hours` type.Items:
-
end_timestring— The custom hours end time, `HH:mm` and `24-hour clock` format. -
start_timestring— The custom hours start time, `HH:mm` and `24-hour clock` format.
-
-
custom_hour_typeinteger, possible values:0, 1, 2— The type of custom hours. * `0` — Disabled. * `1` — 24 hours. * `2` — Customized hours. -
day_of_weekinteger, possible values:1, 2, 3, 4, 5, 6, 7— The day of the week. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — Sunday
-
-
hour_typeinteger, possible values:1, 2— The type of business hours. * `1` — 24 hours, 7 days a week. * `2` — Custom hours.
-
-
queues_countinteger— The number of queues using the business hour. -
timezonestring— The business hours' timezone ID.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"business_hours": [
{
"business_hour_id": "66ZjSQ7YTOescnINN_4vog",
"business_hour_name": "Default Business hours",
"timezone": "America/New_York",
"account_default": true,
"queues_count": 1,
"flows_count": 1,
"hours": {
"hour_type": 2,
"custom_hours": [
{
"day_of_week": 1,
"custom_hour_type": 2,
"custom_hour_ranges": [
{
"start_time": "09:00",
"end_time": "18:00"
}
]
}
]
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create business hours
- Method:
POST - Path:
/contact_center/business_hours - Tags: Operating Hours
Create new business hours.
Scopes: contact_center_operating_hours:write:admin,contact_center_queue:write:admin
Granular Scopes: contact_center:write:business_hour:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
account_defaultboolean— Default business hours for the newly created queue. -
business_hour_descriptionstring— The business hours' description. -
business_hour_namestring— The business hours' name. -
hoursobject-
custom_hoursarray— The custom hours' settings. Required only for the `Custom hours` type.Items:
-
custom_hour_rangesarray— The custom hours' range. Required only for the `Customized hours` type.Items:
-
end_timestring— The custom hours' end time, in `HH:mm` and `24-hour clock` format. -
start_timestring— The custom hours' start time, in `HH:mm` and `24-hour clock` format.
-
-
custom_hour_typeinteger, possible values:1, 2— The type of custom hours. * `1` — 24 hours. * `2` — Customized hours. -
day_of_weekinteger, possible values:1, 2, 3, 4, 5, 6, 7— The day of the week. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — Sunday
-
-
hour_typeinteger, possible values:1, 2— The type of business hours. * `1` — 24 hours, 7 days a week. * `2` — Custom hours.
-
-
timezonestring— The business hours' timezone ID.
Example:
{
"business_hour_name": "Default business hours",
"business_hour_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"hours": {
"hour_type": 2,
"custom_hours": [
{
"day_of_week": 1,
"custom_hour_type": 2,
"custom_hour_ranges": [
{
"start_time": "09:00",
"end_time": "18:00"
}
]
}
]
}
}
Responses
Status: 201 **HTTP Status Code:** `201` Business hours created.
Content-Type: application/json
-
account_defaultboolean— Default business hours for the newly created queue. -
business_hour_descriptionstring— The business hours' description. -
business_hour_idstring— The business hours' ID. -
business_hour_namestring— The business hours' name. -
hoursobject-
custom_hoursarray— The custom hours' settings. Returned only for the `Custom hours` type.Items:
-
custom_hour_rangesarray— The custom hours' range. Returned only for the `Customized hours` type.Items:
-
end_timestring— The custom hours' end time, in `HH:mm` and `24-hour clock` format. -
start_timestring— The custom hours' start time, in `HH:mm` and `24-hour clock` format.
-
-
custom_hour_typeinteger, possible values:0, 1, 2— The type of custom hours. * `0` — Disabled. * `1` — 24 hours. * `2` — Customized hours. -
day_of_weekinteger, possible values:1, 2, 3, 4, 5, 6, 7— The day of the week. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — Sunday
-
-
hour_typeinteger, possible values:1, 2— The type of business hours. * `1` — 24 hours, 7 days a week. * `2` — Custom hours.
-
-
timezonestring— The business hours' timezone ID.
Example:
{
"business_hour_id": "66ZjSQ7YTOescnINN_4vog",
"business_hour_name": "Default business hours",
"business_hour_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"hours": {
"hour_type": 2,
"custom_hours": [
{
"day_of_week": 1,
"custom_hour_type": 2,
"custom_hour_ranges": [
{
"start_time": "09:00",
"end_time": "18:00"
}
]
}
]
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3607` <br> The `custom_hour_ranges` should not be empty when the `custom_hour_type` is `Customized hours`. <br> **Error Code:** `3608` <br> The `end_time` $endTime should not be earlier than the `start_time` $startTime. <br> **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `3604` <br> The `custom_hours` should not be empty when the `hour_type` is `Custom hours`. <br> **Error Code:** `3602` <br> Timezone does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get business hours
- Method:
GET - Path:
/contact_center/business_hours/{businessHourId} - Tags: Operating Hours
Get information about business hours.
Scopes: contact_center_operating_hours:read:admin,contact_center_queue:read:admin
Granular Scopes: contact_center:read:business_hour:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Business hours returned.
Content-Type: application/json
-
account_defaultboolean— Default business hours for the newly created queue. -
business_hour_descriptionstring— The business hours' description. -
business_hour_idstring— The business hours' ID. -
business_hour_namestring— The business hours' name. -
hoursobject-
custom_hoursarray— The custom hours settings. It returns only for the `Custom hours` type.Items:
-
custom_hour_rangesarray— The custom hours range. It returns only for the `Customized hours` type.Items:
-
end_timestring— The custom hours end time, in `HH:mm` and `24-hour clock` format. -
start_timestring— The custom hours start time, in `HH:mm` and `24-hour clock` format.
-
-
custom_hour_typeinteger, possible values:0, 1, 2— The type of custom hours. * `0` - Disabled. * `1` - 24 hours. * `2` - Customized hours. -
day_of_weekinteger, possible values:1, 2, 3, 4, 5, 6, 7— The day of the week. * `1` - Monday * `2` - Tuesday * `3` - Wednesday * `4` - Thursday * `5` - Friday * `6` - Saturday * `7` - Sunday
-
-
hour_typeinteger, possible values:1, 2— The type of business hours. * `1` - 24 hours, 7 days a week. * `2` - Custom hours.
-
-
timezonestring— The business hours' timezone ID.
Example:
{
"business_hour_id": "66ZjSQ7YTOescnINN_4vog",
"business_hour_name": "Default Business hours",
"business_hour_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"hours": {
"hour_type": 2,
"custom_hours": [
{
"day_of_week": 1,
"custom_hour_type": 2,
"custom_hour_ranges": [
{
"start_time": "09:00",
"end_time": "18:00"
}
]
}
]
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3601` <br> Business hour does not exist: $businessHourId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete business hours
- Method:
DELETE - Path:
/contact_center/business_hours/{businessHourId} - Tags: Operating Hours
Delete business hours.
Scopes: contact_center_operating_hours:write:admin
Granular Scopes: contact_center:delete:business_hour:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Business hours deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3612` <br> The business hours of account default cannot be deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3601` <br> Business hours do not exist: $businessHourId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update business hours
- Method:
PATCH - Path:
/contact_center/business_hours/{businessHourId} - Tags: Operating Hours
Update business hours.
Scopes: contact_center_operating_hours:write:admin
Granular Scopes: contact_center:update:business_hour:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
account_defaultboolean— Default business hours for the newly created queue. Only support `true` value. -
business_hour_descriptionstring— The business hours' description. -
business_hour_namestring— The business hours' name. -
hoursobject— Hour items.-
custom_hoursarray— The custom hours' settings. Required only for the `custom` type.Items:
-
custom_hour_rangesarray— The custom hours' range. Required only for the `specific_Time` type.Items:
-
end_timestring— The custom hours' end time, in `HH:mm` and `24-hour clock` format. -
start_timestring— The custom hours' start time, in `HH:mm` and `24-hour clock` format.
-
-
custom_hour_typeinteger, possible values:0, 1, 2— The type of custom hours. * `0` — Disabled. * `1` — 24 hours. * `2` — Customized hours. -
day_of_weekinteger, possible values:1, 2, 3, 4, 5, 6, 7— The day of the week. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — Sunday
-
-
hour_typeinteger, possible values:1, 2— The type of business hours. * `1` — 24 hours, 7 days a week. * `2` — Custom hours.
-
-
timezonestring— The business hours' timezone ID.
Example:
{
"business_hour_name": "Default Business hours",
"business_hour_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"hours": {
"hour_type": 2,
"custom_hours": [
{
"day_of_week": 1,
"custom_hour_type": 2,
"custom_hour_ranges": [
{
"start_time": "09:00",
"end_time": "18:00"
}
]
}
]
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Business hour updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3602` <br> Timezone does not exist. <br> **Error Code:** `3611` <br> Can't update default business hours to be non-default. <br> **Error Code:** `3608` <br> The `end_time` $endTime should not be earlier than the `start_time` $startTime. <br> **Error Code:** `300` <br> Validation Failed <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3601` <br> Business hour does not exist: $businessHourId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List the business hours' flows
- Method:
GET - Path:
/contact_center/business_hours/{businessHourId}/flows - Tags: Operating Hours
Show a list of flows using business hours.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:business_hours_flow:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Flows returned.
Content-Type: application/json
-
next_page_token(required)string— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_size(required)integer, default:30— The number of records returned within a single API call. -
flowsarray— Information about the flows.Items:
-
flow_id(required)string— The flow's ID. -
flow_name(required)string— The flow's name.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"flows": [
{
"flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"flow_name": "Default Flow"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3601` <br> Business hour does not exist: $businessHourId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List the business hours' queues
- Method:
GET - Path:
/contact_center/business_hours/{businessHourId}/queues - Tags: Operating Hours
Show a list of queues using business hours.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:business_hours_queue:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Queues returned.
Content-Type: application/json
-
next_page_token(required)string— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_size(required)integer, default:30— The number of records returned within a single API call. -
queuesarray— Information about the queues.Items:
-
cc_queue_id(required)string— The Contact Center queue's ID. -
queue_id(required)string— The task queue's ID. -
queue_name(required)string— The queue's name.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"queues": [
{
"cc_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "VoiceQueue"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3601` <br> Business hours do not exist: $businessHourId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List closures
- Method:
GET - Path:
/contact_center/closures - Tags: Operating Hours
Get a list of closures. Admins can create closures to select.
Scopes: contact_center_queue:read:admin,contact_center_operating_hours:read:admin
Granular Scopes: contact_center:read:list_closure_hours:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Closures returned.
Content-Type: application/json
-
next_page_token(required)string— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_size(required)integer, default:30— The number of records returned within a single API call. -
closure_setsarray— Information about the closure.Items:
-
account_default(required)boolean— Default closure for the newly-created queue. -
closure_set_id(required)string— The closure set's ID. -
closure_set_name(required)string— The closure set's name. -
closures(required)array— The closure's details.Items:
-
closure_hour_type(required)integer, possible values:1, 2— The closure's time type. * `1` — All day. * `2` — Customized time. -
closure_name(required)string— The closure item's name. -
end_time(required)string— The closure's end time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recurring_frequency(required)integer, possible values:0, 1, 2, 3— The frequency of a closure's recurrence. * `0` — Never. * `1` — Annually. * `2` — Monthly. * `3` — Weekly. -
start_time(required)string— The closure's start time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
closure_idstring— The closure item's ID. -
recurring_days_of_weekarray— The week days of a recurrence. It returns only for the `Weekly/Customized`, the `Weekly/Specific`, the `Annually/Customized` and the `Monthly/Customized` recurrence time types. When the type is "`Weekly/Customized`", there may be multiple values. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — SundayItems:
string -
recurring_frequency_typeinteger, possible values:1, 2— The closure time's type of recurrence. This applies to `Annually`, `Monthly` and `Weekly` repeat frequency. It returns only for the not `Never` recurrence type. * `1` — Specific. * `2` — Customized. -
recurring_monthinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12— The recurrence month. It returns only for the `Annually` recurrence type. * `1` — January * `2` — February * `3` — March * `4` — April * `5` — May * `6` — June * `7` — July * `8` — August * `9` — September * `10` — October * `11` — November * `12` — December -
recurring_week_intervalinteger— The number of weekly recurrences. It returns only for the `Customized` recurrence time types. When it is `Annually/Customized` or `Monthly/Customized` type, the minimum value is `1` and the maximum value is `5`. When it is `Weekly/Customized` type, the minimum value is `1` and the maximum value is `12`.
-
-
flows_count(required)integer— The number of flows using the closure set. -
queues_count(required)integer— The number of queues using the closure set. -
timezone(required)string— The closure set's timezone ID.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"closure_sets": [
{
"closure_set_id": "Ixo-Na0bRfCyQ4q2lAryDw",
"closure_set_name": "Default Closure",
"timezone": "America/New_York",
"account_default": true,
"queues_count": 1,
"flows_count": 1,
"closures": [
{
"closure_id": "ksbJvJ",
"closure_name": "New Year",
"closure_hour_type": 2,
"start_time": "2023-01-01T00:00:00-04:00",
"end_time": "2023-02-01T00:00:00-04:00",
"recurring_frequency": 2,
"recurring_frequency_type": 2,
"recurring_month": 1,
"recurring_week_interval": 1,
"recurring_days_of_week": [
"1"
]
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a closure set
- Method:
POST - Path:
/contact_center/closures - Tags: Operating Hours
Create a new closure set.
Scopes: contact_center_queue:write:admin,contact_center_operating_hours:write:admin
Granular Scopes: contact_center:write:closure_hour:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
closure_set_name(required)string— The closure set's name. -
closures(required)array— The closure's details.Items:
-
closure_hour_type(required)integer, possible values:1, 2— The closure's time type. * `1` — All day. * `2` — Customized time. -
closure_name(required)string— The closure item's name. -
end_time(required)string— The closure's end time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recurring_frequency(required)integer, possible values:0, 1, 2, 3— The frequency of a closure's recurrence. * `0` — Never. * `1` — Annually. * `2` — Monthly. * `3` — Weekly. -
start_time(required)string— The closure's start time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recurring_days_of_weekarray— The week days of a recurrence. Required only for the `Weekly/Customized`, `Weekly/Specific`, `Annually/Customized`, and `Monthly/Customized` recurrence time types. When the type is "`Weekly/Customized`", there may be multiple values. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — SundayItems:
string -
recurring_frequency_typeinteger, possible values:1, 2— The closure time's type of recurrence. Applies to `Annually`, `Monthly`, and `Weekly` repeat frequency. Returns only for the not `Never` recurrence type. * `1` — Specific. * `2` — Customized. -
recurring_monthinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12— The recurrence month. Required only for the `Annually` recurrence type. * `1` — January * `2` — February * `3` — March * `4` — April * `5` — May * `6` — June * `7` — July * `8` — August * `9` — September * `10` — October * `11` — November * `12` — December -
recurring_week_intervalinteger— The number of weekly recurrences. Required only for the `Customized` recurrence time types. When the type is `Annually/Customized` or `Monthly/Customized`, the minimum value is `1` and the maximum value is `5`. When the type is `Weekly/Customized`, the minimum value is `1` and the maximum value is `12`.
-
-
timezone(required)string— The closure set's timezone ID. -
account_defaultboolean— Default closure for the newly created queue. -
closure_set_descriptionstring— The closure set's description.
Example:
{
"closure_set_name": "Default closure",
"closure_set_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"closures": [
{
"closure_name": "New Year",
"closure_hour_type": 2,
"start_time": "2023-01-01T00:00:00-04:00",
"end_time": "2023-02-01T00:00:00-04:00",
"recurring_frequency": 2,
"recurring_frequency_type": 2,
"recurring_month": 1,
"recurring_week_interval": 1,
"recurring_days_of_week": [
"1"
]
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Closure set created.
Content-Type: application/json
-
account_default(required)boolean— Default closure for the newly created queue. -
closure_set_description(required)string— The closure set's description. -
closure_set_id(required)string— The closure set's ID. -
closure_set_name(required)string— The closure set's name. -
closures(required)array— The closure details.Items:
-
closure_hour_type(required)integer, possible values:1, 2— The closure's time type. * `1` — All day. * `2` — Customized time. -
closure_name(required)string— The closure item's name. -
end_time(required)string— The closure's end time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recurring_frequency(required)integer, possible values:0, 1, 2, 3— The frequency of a closure's recurrence. * `0` — Never. * `1` — Annually. * `2` — Monthly. * `3` — Weekly. -
start_time(required)string— The closure's start time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
closure_idstring— The closure item's ID. -
recurring_days_of_weekarray— The week days of a recurrence. Returns only for the `Weekly/Customized`, the `Weekly/Specific`, the `Annually/Customized`, and the `Monthly/Customized` recurrence time types. When the type is "`Weekly/Customized`", there may be multiple values. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — SundayItems:
string -
recurring_frequency_typeinteger, possible values:1, 2— The closure time's type of recurrence. Applies to `Annually`, `Monthly`, and `Weekly` repeat frequency. Returns only for the not `Never` recurrence type. * `1` — Specific. * `2` — Customized. -
recurring_monthinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12— The recurrence month. Returns only for the `Annually` recurrence type. * `1` — January * `2` — February * `3` — March * `4` — April * `5` — May * `6` — June * `7` — July * `8` — August * `9` — September * `10` — October * `11` — November * `12` — December -
recurring_week_intervalinteger— The number of weekly recurrences. Returns only for the `Customized` recurrence time types. When the type is `Annually/Customized` or `Monthly/Customized`, the minimum value is `1` and the maximum value is `5`. When it is `Weekly/Customized`, the minimum value is `1` and the maximum value is `12`.
-
-
timezone(required)string— The closure set's timezone ID.
Example:
{
"closure_set_id": "Ixo-Na0bRfCyQ4q2lAryDw",
"closure_set_name": "Default closure",
"closure_set_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"closures": [
{
"closure_id": "ksbJvJ",
"closure_name": "New Year",
"closure_hour_type": 2,
"start_time": "2023-01-01T00:00:00-04:00",
"end_time": "2023-02-01T00:00:00-04:00",
"recurring_frequency": 2,
"recurring_frequency_type": 2,
"recurring_month": 1,
"recurring_week_interval": 1,
"recurring_days_of_week": [
"1"
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3602` <br> Timezone does not exist. <br> **Error Code:** `3702` <br> The closure name has already been duplicated: $closure_name. <br> **Error Code:** `3703` <br> The end time should be greater than the start time. <br> **Error Code:** `3704` <br> The `recurring_frequency_type` should not be empty when the `recurring_frequency` is anything other than `Never`. <br> **Error Code:** `3705` <br> The `start_time` and `end_time` must be in the same year when the `recurring_frequency` is `Annually`. <br> **Error Code:** `3706` <br> The `start_time` and `end_time` must be in the same month when the `recurring_frequency` is `Monthly`. <br> **Error Code:** `3707` <br> The `start_time` and `end_time` must be in the same week when the `recurring_frequency` is `Weekly`. <br> **Error Code:** `3708` <br> The `recurring_week_interval` should not be empty when the `recurring_frequency_type` type is `Customized`. <br> **Error Code:** `3709` <br> The `recurring_days_of_week` should not be empty when the `recurring_frequency_type` type is `Customized`. <br> **Error Code:** `3710` <br> The `recurring_month` should not be empty when the type is `Annually/Customized`. <br> **Error Code:** `3711` <br> The `recurring_week_interval` should be between `1` and `5` when the `recurring_frequency` type is `Annually` or `Monthly`. <br> **Error Code:** `3712` <br> The `start_time` and `end_time` must match the `timezone`: $start_time/$end_time. <br> **Error Code:** `3603` <br> The name already exists. <br> **Error Code:** `3714` <br> The `recurring_days_of_week` should be between `1` and `7`. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a closure set
- Method:
GET - Path:
/contact_center/closures/{closureSetId} - Tags: Operating Hours
Get information about a closure set.
Scopes: contact_center_queue:read:admin,contact_center_operating_hours:read:admin
Granular Scopes: contact_center:read:closure_hour:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Closure set returned.
Content-Type: application/json
-
account_default(required)boolean— Default closure for the newly-created queue. -
closure_set_description(required)string— The closure set's description. -
closure_set_id(required)string— The closure set's ID. -
closure_set_name(required)string— The closure set's name. -
closures(required)array— The closure's details.Items:
-
closure_hour_type(required)integer, possible values:1, 2— The closure's time type. * `1` - All day. * `2` - Customized time. -
closure_name(required)string— The closure item's name. -
end_time(required)string— The closure's end time and date in ISO 8601 format: `yyyy-MM-dd'T'HH:mm:ss'Z'`, or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
recurring_frequency(required)integer, possible values:0, 1, 2, 3— The frequency of a closure's recurrence. * `0` - Never. * `1` - Annually. * `2` - Monthly. * `3` - Weekly. -
start_time(required)string— The closure's start time and date in ISO 8601 format: `yyyy-MM-dd'T'HH:mm:ss'Z'`, or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
closure_idstring— The closure item's ID. -
recurring_days_of_weekarray— The recurrence's week days. It returns only for the `Weekly/Customized`, the `Weekly/Specific`, the `Annually/Customized`, and the `Monthly/Customized` recurrence time types. When the recurrence type is "`Weekly/Customized`", there may be multiple values. * `1` - Monday * `2` - Tuesday * `3` - Wednesday * `4` - Thursday * `5` - Friday * `6` - Saturday * `7` - SundayItems:
string -
recurring_frequency_typeinteger, possible values:1, 2— The closure time's recurrence type. This applies to `Annually`, `Monthly` and `Weekly` recurrence frequency. It returns for recurrence types that are not `Never`. * `1` - Specific. * `2` - Customized. -
recurring_monthinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12— The recurrence month. It returns only for the `Annually` recurrence type. * `1` - January * `2` - February * `3` - March * `4` - April * `5` - May * `6` - June * `7` - July * `8` - August * `9` - September * `10` - October * `11` - November * `12` - December -
recurring_week_intervalinteger— The number of weekly recurrences. It returns only for the `Customized` recurrence time types. When the recurrence type is either `Annually/Customized` or `Monthly/Customized` type, the minimum value is `1` and the maximum value is `5`. When it is `Weekly/Customized` type, the minimum value is `1` and the maximum value is `12`.
-
-
timezone(required)string— The closure set's timezone ID.
Example:
{
"closure_set_id": "Ixo-Na0bRfCyQ4q2lAryDw",
"closure_set_name": "Default closure",
"closure_set_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"closures": [
{
"closure_id": "ksbJvJ",
"closure_name": "New Year",
"closure_hour_type": 2,
"start_time": "2023-01-01T00:00:00-04:00",
"end_time": "2023-02-01T00:00:00-04:00",
"recurring_frequency": 2,
"recurring_frequency_type": 2,
"recurring_month": 1,
"recurring_week_interval": 1,
"recurring_days_of_week": [
"1"
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3701` <br> Closures set does not exist: $closureId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete a closure set
- Method:
DELETE - Path:
/contact_center/closures/{closureSetId} - Tags: Operating Hours
Delete closure sets.
Scopes: contact_center_operating_hours:write:admin
Granular Scopes: contact_center:delete:closure_hour:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Closure sets deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3713` <br> The closures of account default cannot be deleted. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3701` <br> Closure set does not exist: $closureSetId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a closure set
- Method:
PATCH - Path:
/contact_center/closures/{closureSetId} - Tags: Operating Hours
Update information about a closure set.
Scopes: contact_center_operating_hours:write:admin
Granular Scopes: contact_center:update:closure_hour:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
closure_set_name(required)string— The closure set's name. -
closures(required)array— The closure set's details.Items:
-
closure_hour_typeinteger, possible values:1, 2— The closure's time type. * `1` — All day. * `2` — Customized time. -
closure_idstring— The closure item's ID. -
closure_namestring— The closure item's name. -
end_timestring, format:datetime— The closure's end time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recurring_days_of_weekarray— The recurrence's week days. Required only for the `Weekly/Customized`, the `Weekly/Specific`, the `Annually/Customized`, and the `Monthly/Customized` recurrence time types. When the type is "`Weekly/Customized`", there may be multiple values. * `1` — Monday * `2` — Tuesday * `3` — Wednesday * `4` — Thursday * `5` — Friday * `6` — Saturday * `7` — SundayItems:
string -
recurring_frequencyinteger, possible values:0, 1, 2, 3— The frequency of a closure's recurrence. * `0` — Never. * `1` — Annually. * `2` — Monthly. * `3` — Weekly. -
recurring_frequency_typeinteger, possible values:1, 2— The closure time's type of recurrence. Applies to `Annually`, `Monthly`, and `Weekly` repeat frequency. Returns only for the not `Never` recurrence type. * `1` — Specific. * `2` — Customized. -
recurring_monthinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12— The recurrence month. Required only for the `Annually` recurrence type. * `1` — January * `2` — February * `3` — March * `4` — April * `5` — May * `6` — June * `7` — July * `8` — August * `9` — September * `10` — October * `11` — November * `12` — December -
recurring_week_intervalinteger— The number of weekly recurrences. Required only for the `Customized` recurrence time types. When the type is `Annually/Customized` or `Monthly/Customized`, the minimum value is `1` and the maximum value is `5`. When the type is `Weekly/Customized`, the minimum value is `1` and the maximum value is `12`. -
start_timestring— The closure's start time and date in ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss'Z', or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
to_deleteboolean— Whether to delete this closure item.
-
-
timezone(required)string— The closure set's timezone ID. -
account_defaultboolean— Default closure for the newly-created queue. -
closure_set_descriptionstring— The closure set's description.
Example:
{
"closure_set_name": "Default closure",
"closure_set_description": "This is a description.",
"timezone": "America/New_York",
"account_default": true,
"closures": [
{
"closure_id": "ksbJvJ",
"closure_name": "New Year",
"closure_hour_type": 2,
"start_time": "2023-01-01T00:00:00-04:00",
"end_time": "2023-02-01T00:00:00-04:00",
"recurring_frequency": 2,
"recurring_frequency_type": 2,
"recurring_month": 1,
"recurring_week_interval": 1,
"recurring_days_of_week": [
"1"
],
"to_delete": false
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Closure set updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3602` <br> Timezone does not exist. <br> **Error Code:** `3702` <br> The closure name has already been duplicated: $closure_name. <br> **Error Code:** `3703` <br> The end time should be greater than the start time. <br> **Error Code:** `3704` <br> The `recurring_frequency_type` should not be empty when the `recurring_frequency` is not `Never`. <br> **Error Code:** `3705` <br> The `start_time` and `end_time` must be in the same year when the `recurring_frequency` is `Annually`. <br> **Error Code:** `3706` <br> The `start_time` and `end_time` must be in the same month when the `recurring_frequency` is `Monthly`. <br> **Error Code:** `3707` <br> The "start_time" and "end_time" must be in the same week when the "recurring_frequency" is the "Weekly". <br> **Error Code:** `3708` <br> The `recurring_week_interval` should not be empty when the `recurring_frequency_type` type is `Customized`. <br> **Error Code:** `3709` <br> The `recurring_days_of_week` should not be empty when the `recurring_frequency_type` type is `Customized`. <br> **Error Code:** `3710` <br> The `recurring_month` should not be empty when the type is `Annually/Customized`. <br> **Error Code:** `3711` <br> The `recurring_week_interval` should between `1` and `5` when the `recurring_frequency` type is `Annually` or `Monthly`. <br> **Error Code:** `3712` <br> The `start_time` and `end_time` must match the `timezone`: $start_time/$end_time. <br> **Error Code:** `3603` <br> The name already exists. <br> **Error Code:** `3901` <br> The closure id has already been duplicated: $closure_id. <br> **Error Code:** `3902` <br> Closure does not exist: $closure_id. <br> **Error Code:** `3903` <br> The `hour_type` field cannot be empty when the `closure_id` field is empty. <br> **Error Code:** `3904` <br> The `closure_name` field cannot be empty when the `closure_id` field is empty. <br> **Error Code:** `3905` <br> The `start_time` field cannot be empty when the `closure_id` field is empty. <br> **Error Code:** `3906` <br> The `end_time` field cannot be empty when the `closure_id` field is empty. <br> **Error Code:** `3907` <br> The `recurring_frequency` field cannot be empty when the `closure_id` field is empty. <br> **Error Code:** `3908` <br> Every closure set has at least one closure item. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3701` <br> Closure set does not exist: $closureSetId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List the closures' flows
- Method:
GET - Path:
/contact_center/closures/{closureSetId}/flows - Tags: Operating Hours
Show a list of flows using closures.
Scopes: contact_center_flow:read:admin
Granular Scopes: contact_center:read:clousre_hour_flow:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Flows returned.
Content-Type: application/json
-
next_page_token(required)string— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_size(required)integer, default:30— The number of records returned within a single API call. -
flowsarray— Information about the flows.Items:
-
flow_id(required)string— The flow's ID. -
flow_name(required)string— The flow's name.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"flows": [
{
"flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"flow_name": "Default Flow"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3701` <br> Closures set does not exist: $closureSetId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List the closures' queues
- Method:
GET - Path:
/contact_center/closures/{closureSetId}/queues - Tags: Operating Hours
Show a list of queues using closures.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:closure_hour_queue:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Queues returned.
Content-Type: application/json
-
next_page_token(required)string— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_size(required)integer, default:30— The number of records returned within a single API call. -
queuesarray— Information about the queues.Items:
-
cc_queue_id(required)string— The Contact Center queue's ID. -
queue_id(required)string— The task queue's ID. -
queue_name(required)string— The queue's name.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"queues": [
{
"cc_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "VoiceQueue"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3701` <br> Closures set does not exist: $closureSetId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List queue templates
- Method:
GET - Path:
/contact_center/queue_templates - Tags: Queues
Retrieve a list of queue templates.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Queue templates by page.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizenumber— The number of records returned within a single API call. -
queue_templatesarray— Information about the queue templates.Items:
-
channel(required)string, possible values:"voice", "messaging", "email", "video", "work_item"— Template channel. -
last_modified_time(required)string— The date and time when the asset was last modified. -
modified_by(required)string— The ID of user who last modified the asset. -
template_description(required)string— Template description. -
template_id(required)string— Template ID. -
template_name(required)string— Template name. -
template_need_attention(required)boolean— Whether the template needs attention or not. -
template_status(required)string, possible values:"active", "inactive"— Template status. -
template_type(required)string, possible values:"add", "update"— Template type.
-
-
total_recordsnumber— The total number of all the records available across pages.
Example:
{
"next_page_token": "3Y42JUhtdR7yav3CwXpQxzCA8b8LjPGySQ2",
"page_size": 5,
"total_records": 5,
"queue_templates": [
{
"template_id": "cIInrJZUQWy12qoLPASXLw",
"template_name": "voice add template 9",
"template_description": "test voice add template 9",
"channel": "voice",
"template_type": "add",
"template_status": "active",
"template_need_attention": false,
"modified_by": "CXF7npCJTQ2i3blpn9tSCw",
"last_modified_time": "2025-05-14T23:30:38.000+00:00"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create a queue template
- Method:
POST - Path:
/contact_center/queue_templates - Tags: Queues
Create a Contact Center queue template.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
channel(required)string, possible values:"voice", "video", "messaging", "email", "work_item"— The queue template's channel type. -
queue_template_name(required)string— The queue template's name. -
queue_template_type(required)string, possible values:"add", "update"— The queue template's type. Use `add` to create new queues, and use `update` to modify existing queues. -
queue_template_descriptionstring— The queue template's description.
Example:
{
"queue_template_name": "Voice Queue Template",
"queue_template_description": "Standard template for voice queues with default settings",
"channel": "voice",
"queue_template_type": "add"
}
Responses
Status: 201 Queue template created successfully.
Content-Type: application/json
-
channel(required)string, possible values:"voice", "video", "messaging", "email", "work_item"— The queue template's channel type. -
last_modified_time(required)string— The date and time when the queue template was last modified, in ISO 8601 format. -
modified_by(required)string— The user ID of the user who last modified the queue template. -
queue_template_id(required)string— The queue template's unique identifier. -
queue_template_name(required)string— The queue template's name. -
queue_template_status(required)string, possible values:"active", "inactive"— The queue template's status. `active` templates can be used, `inactive` templates are disabled. -
queue_template_type(required)string, possible values:"add", "update"— The queue template's type. Use `add` to create new queues, and use `update` to modify existing queues. -
queue_template_descriptionstring— The queue template's description. -
queue_template_need_attentionboolean— Whether the queue template requires attention due to configuration issues or missing dependencies.
Example:
{
"queue_template_id": "cIInrJZUQWy12qoLPASXLw",
"queue_template_name": "Voice Queue Template",
"queue_template_description": "Standard template for voice queues with default settings",
"channel": "voice",
"queue_template_type": "add",
"queue_template_status": "active",
"queue_template_need_attention": false,
"modified_by": "zIInwJQUCUy12qoLPASXJi",
"last_modified_time": "2025-12-03T08:43:10.000+00:00"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1214` <br> Queue template is not enabled: {accountId}. <br> **Error Code:** `1205` <br> Queue channel type is invalid: {channel}. <br> **Error Code:** `1240` <br> Queue template type is invalid: {templateType}. Valid values: add, update. <br> **Error Code:** `1242` <br> Queue template name already exists: {templateName}. <br> **Error Code:** `1243` <br> Queue template limit exceeded. Maximum number of templates allowed has been reached. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch delete queue templates
- Method:
DELETE - Path:
/contact_center/queue_templates - Tags: Queues
Delete multiple Contact Center queue templates.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
queue_template_ids(required)array— A list of queue template IDs to delete.Items:
string
Example:
{
"queue_template_ids": [
"UdfmrJHUQWy12qoLPASXAa",
"cIInrJZUQWy12qoLPASXLw"
]
}
Responses
Status: 204 Queue templates deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1214` <br> Queue template is not enabled: {accountId}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1213` <br> Queue template does not exist: {queueTemplateId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a queue template
- Method:
GET - Path:
/contact_center/queue_templates/{queueTemplateId} - Tags: Queues
Retrieve a Contact Center queue template.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 200 Queue template retrieved successfully.
Content-Type: application/json
-
channel(required)string, possible values:"voice", "video", "messaging", "email", "work_item"— The queue template's channel type. -
last_modified_time(required)string— The date and time when the queue template was last modified, in ISO 8601 format. -
modified_by(required)string— The user ID of the user who last modified the queue template. -
queue_template_id(required)string— The queue template's unique identifier. -
queue_template_name(required)string— The queue template's name. -
queue_template_status(required)string, possible values:"active", "inactive"— The queue template's status. `active` templates can be used, `inactive` templates are disabled. -
queue_template_type(required)string, possible values:"add", "update"— The queue template's type. Use `add` to create new queues, and use `update` to modify existing queues. -
queue_template_descriptionstring— The queue template's description. -
queue_template_need_attentionboolean— Whether the queue template requires attention due to configuration issues or missing dependencies.
Example:
{
"queue_template_id": "cIInrJZUQWy12qoLPASXLw",
"queue_template_name": "Voice Queue Template",
"queue_template_description": "Standard template for voice queues with default settings",
"channel": "voice",
"queue_template_type": "add",
"queue_template_status": "active",
"queue_template_need_attention": false,
"modified_by": "zIInwJQUCUy12qoLPASXJi",
"last_modified_time": "2025-12-03T08:43:10.000+00:00"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1214` <br> Queue template is not enabled: {accountId}. <br> **Error Code:** `1245` <br> More than one matching queue template found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1213` <br> Queue template does not exist: {queueTemplateId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a queue template
- Method:
DELETE - Path:
/contact_center/queue_templates/{queueTemplateId} - Tags: Queues
Delete a Contact Center queue template.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 204 Queue template deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1214` <br> Queue template is not enabled: {accountId}. <br> **Error Code:** `1245` <br> More than one matching queue template found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1213` <br> Queue template does not exist: {queueTemplateId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a queue template
- Method:
PATCH - Path:
/contact_center/queue_templates/{queueTemplateId} - Tags: Queues
Update a Contact Center queue template.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
queue_template_descriptionstring— The queue template's description. -
queue_template_namestring— The queue template's name. -
queue_template_statusstring, possible values:"active", "inactive"— The queue template's status. `active` templates can be used, `inactive` templates are disabled.
Example:
{
"queue_template_name": "Voice Queue Template",
"queue_template_description": "Standard template for voice queues with default settings",
"queue_template_status": "active"
}
Responses
Status: 204 Queue template updated successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1214` <br> Queue template is not enabled: {accountId}. <br> **Error Code:** `1241` <br> Queue template status is invalid: {status}. Valid values: active, inactive. <br> **Error Code:** `1242` <br> Queue template name already exists: {templateName}. <br> **Error Code:** `1245` <br> More than one matching queue template found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1213` <br> Queue template does not exist: {queueTemplateId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List queues
- Method:
GET - Path:
/contact_center/queues - Tags: Queues
Get information about all available queues.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_queues:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queues list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
queuesarray— Information about the task queues.Items:
-
agents_countinteger— The number of assigned agents. -
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat", "messaging" -
last_modified_timestring, format:date-time— The date and time when the asset was last modified. -
modified_bystring— The ID of user who last modified the asset. -
queue_idstring— The task queue's ID. -
queue_namestring— The task queue's name. -
supervisors_countinteger— The number of assigned supervisors.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"queues": [
{
"cc_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "queue_661c6e4b-89fc-4b0d-9978-c7394725462",
"agents_count": 1,
"supervisors_count": 1,
"channel": "voice",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a queue
- Method:
POST - Path:
/contact_center/queues - Tags: Queues
Create an agent queue to determine which agents calls are routed to. Queues also link to an existing routing profile to determine how calls are routed.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat", "messaging", "work_item" -
queue_descriptionstring— The task queue's description. -
queue_namestring— The task queue's name.
Example:
{
"queue_name": "queue_661c6e4b-89fc-4b0d-9978-c7394725462",
"queue_description": "This is a task queue.",
"channel": "voice"
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue created.
Content-Type: application/json
-
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat", "messaging", "work_item" -
queue_descriptionstring— The task queue's description. -
queue_idstring— The task queue's ID. -
queue_namestring— The task queue's name.
Example:
{
"cc_queue_id": "zeYjXoDOS_eV1QmTpj63PQ",
"queue_name": "queue_661c6e4b-89fc-4b0d-9978-c7394725462",
"queue_description": "This is a task queue.",
"channel": "voice"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Invalid channel type. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Batch create queues with a template
- Method:
POST - Path:
/contact_center/queues/batch - Tags: Queues
Create bulk of contact center queues with templateId.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
queuesarray— List of queues need to be created.Items:
-
queue_description(required)string— The queue description. -
queue_name(required)string— The queue name.
-
-
template_idstring— The template ID
Example:
{
"template_id": "urxORBoRRDCtvCT7xE5K9g",
"queues": [
{
"queue_name": "voice queue 600",
"queue_description": "test voice queue 600"
}
]
}
Responses
Status: 201 List of queues created.
Content-Type: application/json
Array of:
-
cc_queue_id(required)string— The Contact Center queue's ID. -
channel(required)string— The Contact Center queue's channel. -
queue_description(required)string— The task queue's description. -
queue_name(required)string— The task queue's name.
- Max items:
50
Example:
[
{
"cc_queue_id": "GaMccDOOTvqV_bfmWqRVxA",
"queue_name": "voice queue 200",
"queue_description": "test voice queue 200",
"channel": "voice"
}
]
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1213` <br> Queue template does not exist: {templateId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Batch delete queues
- Method:
DELETE - Path:
/contact_center/queues/batch - Tags: Queues
Delete bulk of Contact Center queues.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
cc_queue_idsarray— IDs of the queues to be deleted.Items:
string— ID of the queue to be deleted.
Example:
{
"cc_queue_ids": [
"0HlBusg3QpqHGlGnaHJgOw"
]
}
Responses
Status: 204 Queues deleted.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {quueId}. <br>
Get a queue
- Method:
GET - Path:
/contact_center/queues/{queueId} - Tags: Queues
Get information about a queue.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Queue returned.
Content-Type: application/json
-
agent_routing_profile_idstring— The queue's agent routing profile ID. -
agent_routing_profile_namestring— The queue's agent routing profile name. -
auto_close_alert_messagestring— An alert message to web-chat users before auto-closing. -
auto_close_alert_message_enabledboolean— Send an alert message before auto-closing web chats. Channel type - chat. -
auto_close_alert_message_timeinteger— How long, in minutes, before a warning is sent to the user. -
auto_close_messagestring— Auto-closed message to users for web chats. -
auto_close_message_enabledboolean— Send an auto-closed message for web chats. Channel type - chat. -
auto_close_timeoutinteger— How long, in minutes, before the chat is auto-closed. -
caller_idsarray— The queue's caller ID list. Only for voice queues. When a voice queue is configured with caller ID(s), the list will populate with phone numbers.Items:
string— Caller ID number, in E.164 format. -
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat", "messaging", "work_item" -
connecting_media_filenamestring— **Deprecated** See `queue_waiting_experience` object. File name of the media in use while consumers are being connected. Channel type: voice. -
connecting_media_idstring— **Deprecated** See `queue_waiting_experience` object. Media ID to use while users are being connected. Channel type: voice. -
consumer_routing_profile_idstring— The queue's consumer routing profile ID. -
consumer_routing_profile_namestring— The queue's consumer routing profile name. -
disposition_sets_countinteger— The number of disposition sets. -
dispositions_countinteger— The number of dispositions. -
distribution_duration_in_secondsinteger— The notify duration for each queue user, in seconds. -
distribution_typeinteger, possible values:0, 1, 2, 3, 4, 5, 6, 7— Distribute incoming engagements. -
engagement_acceptanceobject— Queue engagement acceptance configurations.-
acceptance_typestring, possible values:"auto", "manual"— Methods to accept an engagement. -
agent_greeting_asset_idstring— The agent greeting's audio asset ID. -
agent_whisper_announcement_asset_idstring— The agent whisper announcement's audio asset ID. -
enable_agent_alert_toneboolean— Whether to enable playing an alert tone to the agent. -
enable_agent_greetingboolean— Whether to enable playing a default agent greeting. -
enable_agent_whisper_announcementboolean— Whether to enable playing an announcement to the agent. -
greeting_filenamestring— The agent greeting audio's file name. -
whisper_filenamestring— The agent whisper announcement audio's file name.
-
-
engagement_distributionstring, possible values:"longest_idle", "sequential", "rotating", "simultaneous", "most_available", "manual", "longest_ready", "longest_idle_for_this_queue"— Method of engagement distribution. -
holding_media_filenamestring— **Deprecated** See `queue_waiting_experience` object. File name of the media to use while users are on hold. Channel type: voice. -
holding_media_idstring— **Deprecated** See `queue_waiting_experience` object. Media ID to use while users are on hold. Channel type: voice. -
inbound_dispositionsobject— Queue configured inbound dispositions and disposition sets.-
default_disposition_idstring— Inbound default disposition ID. -
default_disposition_namestring— Inbound default disposition name. -
disposition_setsarray— Inbound bounded disposition sets.Items:
-
disposition_set_idstring— The disposition set's ID. -
disposition_set_namestring— The disposition set's name.
-
-
dispositionsarray— Inbound bounded dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
enable_dispositionboolean— Enable inbound disposition. -
queue_disposition_typeinteger— Type of inbound disposition. 0 - Mandatory, 1 - Optional.
-
-
inbound_launch_url_infoobject— Inbound launch URL configurations.-
configarray— Configurations of launching URL and methods to launch.Items:
-
launch_triggerstring, possible values:"ringing", "answered", "ended"— Methods to launch URL. -
launch_urlstring— URL to be launched.
-
-
enable_launch_urlboolean— Whether to enable inbound launch URL section.
-
-
max_engagement_in_queueinteger— The task queue's maximum engagement in queue value. -
max_wait_timeinteger— The task queue's maximum wait time, in seconds. -
message_acceptstring, possible values:"manual", "auto"— Option to accept a message manually or automatically. Channel types - chat, SMS. -
outbound_dispositionsobject— Queue configured outbound dispositions and disposition sets.-
default_disposition_idstring— Outbound default disposition ID. -
default_disposition_namestring— Outbound default disposition name. -
disposition_setsarray— Outbound bounded disposition sets.Items:
-
disposition_set_idstring— The disposition set's ID. -
disposition_set_namestring— The disposition set's name.
-
-
dispositionsarray— Outbound bounded dispositions.Items:
-
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name.
-
-
enable_dispositionboolean— Whether to enable outbound disposition. -
queue_disposition_typeinteger— Type of outbound disposition. 0 - Mandatory, 1 - Optional.
-
-
outbound_launch_url_infoobject— Outbound launch URL configurations.-
configarray— Configurations of launching URL and methods to launch.Items:
-
launch_triggerstring, possible values:"initiated", "connected", "ended"— Methods to launch URL. -
urlstring— URL to be launched.
-
-
enable_launch_urlboolean— Whether to enable outbound launch URL section.
-
-
outbound_settingsobject— Queue configurations for outbound calls.-
enable_outbound_callsboolean— Whether to enable outbound call. -
outbound_default_disposition_idstring— Outbound default disposition ID. -
outbound_disposition_requiredboolean— Whether an outbound disposition is required. -
outbound_holding_media_idstring— Outbound holding media asset ID. -
outbound_labelsobject— Set up the talking duration for brief outbound engagements, labeled in reports as **short calls**, which also sets the duration for long calls and hang-up calls. Short calls - Select minimum and maximum talking duration of short calls using the `outbound_call_duration_lower_threshold` and `outbound_call_duration_upper_threshold` values. Long calls - Over 2 minutes. Hang-up calls - Under 10 seconds.-
outbound_call_duration_lower_thresholdinteger— Minimum talking duration for brief outbound engagements, in seconds. -
outbound_call_duration_upper_thresholdinteger— Maximum talking duration for brief outbound engagements, inseconds.
-
-
outbound_launch_url_infoobject-
configarrayItems:
-
launch_triggerstring, possible values:"initiated", "connected", "ended"— Methods to launch URL. -
urlstring— URL to be launched.
-
-
enable_launch_urlboolean— Whether to enable outbound launch URL section.
-
-
outbound_notes_asset_idstring— Outbound notes audio asset ID. -
outbound_transferring_media_idstring— Outbound transferring media asset ID. -
outbound_wrap_up_after_transferboolean— Whether to enable wrap up after outbound transfer. -
outbound_wrap_up_expirationboolean— Auto-close outbound engagements at the end of wrap-up duration. -
outbound_wrap_up_timeinteger— Outbound wrap up time, in seconds. -
queue_caller_idsarray— The queue's outbound caller ID number list. A caller ID number is what your customers will see on their phone when agents and supervisors reach out to them. Assign numbers that users can update from the default caller ID when they call consumers. Only for voice queues. When a voice queue is configured with caller ID(s), the list will populate with phone numbers.Items:
string— Caller ID number, in E.164 format.
-
-
overflow_to_cc_queue_idstring— The Contact Center queue ID to receive the overflow. Only one of these overflow fields can be updated each time, either `overflow_to_goodbye_message`, `overflow_to_cc_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_flow_idstring— The flow ID to receive the overflow. -
overflow_to_goodbye_messageboolean— Reply goodbye message, then disconnect. -
overflow_to_goodbye_message_asset_idstring— Reply goodbye message. Use asset instead of system default audio. -
overflow_to_inbox_idstring— The voicemail inbox ID to receive the overflow. -
overflow_to_queue_idstring— The queue ID to receive the overflow. -
overflow_typeinteger, possible values:0, 1, 2, 3— Type of overflow. 0 - Reply goodbye message, then disconnect. 1 - Route to queue. 2 - Leave email. 3 - Route to flow. -
queue_descriptionstring— The task queue's description. -
queue_idstring— The task queue's ID. -
queue_namestring— The task queue's name. -
queue_waiting_experienceobject— Queue configured waiting experience.-
connecting_music_asset_idstring— Connecting music audio ID. -
connecting_music_filenamestring— Connecting music audio file name. -
connecting_music_urlstring— Connecting music audio file URL. -
default_connecting_music_file_idstring— Default connecting music file ID. -
default_connecting_music_namestring— Default connecting music file name. -
default_connecting_music_urlstring— Default connecting music file URL. -
default_hold_music_file_idstring— Default holding music file ID. -
default_hold_music_namestring— Default holding music file name. -
default_hold_music_urlstring— Default holding music file URL. -
default_transfer_music_urlstring— Default transferring music file URL. -
holding_music_asset_idstring— Holding music audio asset ID. -
holding_music_filenamestring— Holding music audio file name. -
holding_music_urlstring— Holding music audio file URL. -
transfer_music_asset_idstring— Transferring music audio asset ID. -
transfer_music_filenamestring— Transferring music audio file name. -
transfer_music_urlstring— Transferring music audio file URL.
-
-
recording_storage_locationstring, possible values:"us", "au", "br", "ca", "de", "jp", "sg"— Determine where to store the recording. - us - United States - au - Australia - br - Brazil - ca - Canada - de - Germany - jp - Japan - sg - Singapore Supported channel types - voice, video. -
scheduled_callback_settingsobject— Queue configurations for callback and greeting message.-
consumer_inquiry_optionstring— The unique keyword that consumers can choose to identify this queue. -
enable_scheduled_callbackboolean— Whether to enable scheduled callback. -
greeting_messageobject— The greeting message.-
custom_media_asset_idstring— Audio asset ID for custom media. -
language_codestring— The default message's language. -
message_textstring— Greeting message free text. -
voice_idstring, possible values:"Danielle", "Gregory", "Ivy", "Joanna", "Joey", "Justin", "Kendra", "Kevin", "Kimberly", "Matthew", "Ruth", "Salli", "Stephen"— The TTS service's voice ID to generate audio for the greeting message.
-
-
-
service_level_exclude_abandoned_quit_engagementsboolean— Choose to include quit engagements in service level metrics. Channel types - chat, in_app_chat, sms -
service_level_exclude_long_abandoned_callsboolean— Choose to include long abandoned calls in service level metrics. Channel types - voice, video. -
service_level_exclude_short_abandoned_callsboolean— Choose to include short abandoned calls in service level metrics. Channel types - voice, video. -
service_level_target_in_percentageinteger— The service-level target as the benchmark to refer to in reports. -
service_level_threshold_in_secondsinteger— Agents' first message speed for all engagements. -
short_abandonobject— Information about the task queue's [**Short Abandon**](https://support.zoom.us/hc/en-us/articles/4469989300493-Changing-queue-settings#:~:text=for%20this%20queue.-,Short%20Abandon,-(only%20available%20if) settings. This setting is only available if the queue's channel type is a Zoom Room, voice, or video.-
enableboolean— Whether the **Enable short abandon** setting is enabled. -
thresholdinteger— The task queue's short abandon threshold, in seconds.
-
-
teamsarray— Teams assigned to the Contact Center queue.Items:
-
team_idstring— The team's unique identifier. -
team_namestring— The team's name.
-
-
transferring_media_filenamestring— **Deprecated** See `queue_waiting_experience` object. File name of the media to use while users are being transferred. Channel type: voice. -
transferring_media_idstring— **Deprecated** See `queue_waiting_experience` object. Media ID to use while users are being transferred. Channel type: voice. -
waiting_room_idstring— ID of the waiting room for users. Channel type - video. -
waiting_room_namestring— Name of the user's waiting room. Channel type - video. -
wrap_up_after_transferboolean— Whether to enable wrap up transfer. -
wrap_up_expirationboolean— Auto-close engagements at the end of wrap-up duration. Channel type - voice, video. -
wrap_up_timeinteger— The task queue's wrap up time, in seconds.
Example:
{
"cc_queue_id": "xqJE_cgERLyAJHYYL5LLeg",
"queue_name": "queue_661c6e4b-89fc-4b0d-9978-c7394725462",
"queue_description": "This is a task queue.",
"dispositions_count": 1,
"disposition_sets_count": 1,
"channel": "voice",
"max_wait_time": 50,
"wrap_up_time": 50,
"max_engagement_in_queue": 50,
"short_abandon": {
"enable": false,
"threshold": 5
},
"distribution_type": 1,
"distribution_duration_in_seconds": 30,
"waiting_room_name": "User Waiting Room",
"waiting_room_id": "vPtSZOzBSLWMiorssYWTZw",
"message_accept": "manual",
"wrap_up_expiration": true,
"overflow_type": 0,
"overflow_to_goodbye_message": true,
"overflow_to_goodbye_message_asset_id": "9gp4iyqUR_qq8tYpWw1EKg",
"overflow_to_cc_queue_id": "m8IhNvUyTUmx7Jm8h5ZvLQ",
"overflow_to_flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"overflow_to_inbox_id": "cMH8RJA0QsyJBCWIFbWfBQ",
"auto_close_message_enabled": true,
"auto_close_timeout": 10,
"auto_close_alert_message_enabled": true,
"auto_close_alert_message_time": 10,
"recording_storage_location": "us",
"service_level_threshold_in_seconds": 15,
"service_level_exclude_short_abandoned_calls": true,
"service_level_exclude_long_abandoned_calls": true,
"service_level_exclude_abandoned_quit_engagements": true,
"service_level_target_in_percentage": 80,
"agent_routing_profile_id": "fgjdkhgfieryt7465435kjhdkhg",
"agent_routing_profile_name": "My agent routing profile",
"consumer_routing_profile_id": "fgjdkhgfieryt7465435kjhdkhg",
"consumer_routing_profile_name": "My Consumer Routing Profile",
"caller_ids": [
"+14155552671"
],
"teams": [
{
"team_id": "qeYjXoDO3_eV1QmTpj63Pz",
"team_name": "Sales Team"
}
],
"engagement_acceptance": {
"acceptance_type": "manual",
"enable_agent_alert_tone": true,
"enable_agent_whisper_announcement": false,
"agent_whisper_announcement_asset_id": "9gp4iyqUR_qq8tYpWw1EKg",
"enable_agent_greeting": false,
"agent_greeting_asset_id": "9gp4iyqUR_qq8tYpWw1EKg",
"greeting_filename": "greeting.mp3",
"whisper_filename": "whisper.mp3"
},
"inbound_launch_url_info": {
"config": [
{
"launch_trigger": "ringing",
"launch_url": "https://www.example.com"
}
],
"enable_launch_url": true
},
"outbound_launch_url_info": {
"config": [
{
"launch_trigger": "connected",
"url": "https://www.example.com"
}
],
"enable_launch_url": true
},
"queue_waiting_experience": {
"default_connecting_music_file_id": "feca393267648418947gswurw70b4e43",
"default_connecting_music_name": "Hold the Phone_Mastered",
"default_connecting_music_url": "https://device.s3.example.com/default_wait/Hold_the_Phone_Mastered.mp3",
"connecting_music_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"connecting_music_filename": "Connecting Tone",
"connecting_music_url": "https://example.com/connecting.mp3",
"default_transfer_music_url": "https://example.com/gocci/ringtone_music.wav",
"transfer_music_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"transfer_music_filename": "Transferring Tone",
"transfer_music_url": "https://example.com/transferring.mp3",
"default_hold_music_file_id": "feca3932676484heud123568970b4e42",
"default_hold_music_name": "Calming Hold_Mastered",
"default_hold_music_url": "https://example.com/default_wait/Calming_Hold_Mastered.mp3",
"holding_music_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"holding_music_filename": "Holding Tone",
"holding_music_url": "https://example.com/holding.mp3"
},
"inbound_dispositions": {
"enable_disposition": true,
"queue_disposition_type": 0,
"dispositions": [
{
"disposition_id": "2UiwcOPiS8y1XiQMKYFRfw",
"disposition_name": "test disposition 10"
}
],
"disposition_sets": [
{
"disposition_set_id": "Q5cXMppKQgm0W_bV72Wrgw",
"disposition_set_name": "test disposition set 1"
}
],
"default_disposition_id": "2UiwcOPiS8y1XiQMKYFRfw",
"default_disposition_name": "test disposition 10"
},
"outbound_dispositions": {
"enable_disposition": true,
"queue_disposition_type": 0,
"dispositions": [
{
"disposition_id": "2UiwcOPiS8y1XiQMKYFRfw",
"disposition_name": "test disposition 10"
}
],
"disposition_sets": [
{
"disposition_set_id": "Q5cXMppKQgm0W_bV72Wrgw",
"disposition_set_name": "test disposition set 1"
}
],
"default_disposition_id": "2UiwcOPiS8y1XiQMKYFRfw",
"default_disposition_name": "test disposition 10"
},
"wrap_up_after_transfer": false,
"engagement_distribution": "simultaneous",
"outbound_settings": {
"enable_outbound_calls": true,
"queue_caller_ids": [
"+14155552671"
],
"outbound_launch_url_info": {
"enable_launch_url": true,
"config": [
{
"launch_trigger": "connected",
"url": "https://www.example.com"
}
]
},
"outbound_labels": {
"outbound_call_duration_lower_threshold": 19,
"outbound_call_duration_upper_threshold": 300
},
"outbound_transferring_media_id": "transferringAudioMp3",
"outbound_holding_media_id": "holdingAudioMp3",
"outbound_notes_asset_id": "notesAsset123",
"outbound_disposition_required": true,
"outbound_default_disposition_id": "2UiwcOPiS8y1XiQMKYFRfw",
"outbound_wrap_up_time": 60,
"outbound_wrap_up_expiration": true,
"outbound_wrap_up_after_transfer": false
},
"scheduled_callback_settings": {
"enable_scheduled_callback": true,
"consumer_inquiry_option": "hello 100",
"greeting_message": {
"custom_media_asset_id": "9gp4iyqUR_qq8tYpWw1EKg",
"language_code": "English (US)",
"voice_id": "Joanna",
"message_text": "You will be connected to the next available agent in a short moment."
}
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a queue
- Method:
DELETE - Path:
/contact_center/queues/{queueId} - Tags: Queues
Delete a specified queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a queue
- Method:
PATCH - Path:
/contact_center/queues/{queueId} - Tags: Queues
Update a queue's settings.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
agent_routing_profile_idstring— The queue's agent routing profile ID. If this is empty, the agent routing profile will be removed. -
agent_routing_settingsobject— A routing profile to route the engagement to queue users, based on who has the corresponding skills.-
allow_agent_select_skill_for_transferboolean— Agent routing to allow agent to specify skills during the transfer. This requires the routing profile enable 'Route engagement to last engaged agent first'. -
last_engaged_agent_data_from_queue_idsarray— Last engaged agent data from the queue. Select queues that will be evaluated to determine the last engaged agent, based on maximum look-back period. Default to `All queues` if no select queue ID. To get the queue ID, use [**List Queues API**](/docs/api/contact-center/#tag/queues/get/contact_center/queues). **Channels** voice, video.Items:
string— The queue ID. -
maximum_look_back_periodinteger— The timeframe for searching previous engagements with the consumer to determine the last agent, in minutes. **Channels** voice, video.
-
-
auto_close_alert_messagestring— An alert message to web-chat users before auto-closing. -
auto_close_alert_message_enabledboolean— Send an alert message before auto-closing web chats. **Channels** messaging. -
auto_close_alert_message_timeinteger— How long, in minutes, before a warning is sent to the user. Must be less than or equal to `auto_close_timeout`. -
auto_close_messagestring— Auto-closed message to web-chat users. -
auto_close_message_enabledboolean— Send an auto-closed message for web chats. **Channels** messaging. -
auto_close_timeoutinteger— How long, in minutes, before the chat is auto-closed. -
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The Contact Center queue's channel. -
channel_typesarray— The task queue's channel types.Items:
string, possible values:"voice", "chat", "sms", "video", "in_app_chat", "messaging", "work_item" -
connecting_media_idstring, default:"Passing an empty string will set this option to the default media."— Media ID to use while users are being connected. **Channels** voice. -
consumer_routing_profile_idstring— The queue's consumer routing profile ID. -
default_disposition_idstring— When a queue disposition is required. Must assign a default disposition. -
disposition_requiredboolean— Whether a queue disposition is required. * `true` - mandatory * `false` - optional -
distribution_duration_in_secondsinteger— The notify duration for each queue user, in seconds. The default on new queues is 30 seconds. -
distribution_typeinteger, possible values:0, 1, 2, 3, 4, 5, 6, 7— Distribute incoming engagements. **Allowed** * 0 - Longest Idle. This value is only supported if the channel types contain voice or video. * 1 - Sequential. This value is only supported if the channel types contain voice or video. * 2 - Rotating. This value is only supported if the channel types contain voice or video. * 3 - Simultaneous. This value is only supported if the channel types contain voice or video. * 4 - Most Available. This value is only supported if the channel is **messaging**. * 5 - Manual. This value is only supported if the channel types contain video. * 6 - Longest idle while ready. This value is only supported if the channel types contain voice or video. * 7 - Longest idle for this queue. This value is only supported if the channel types contain voice or video. -
engagement_acceptanceobject— Queue engagement acceptance configurations.-
acceptance_typestring, possible values:"manual", "auto"— How to accept an engagement. -
agent_greeting_asset_idstring— Play a greeting message chosen from the asset library. To find the asset ID, use the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets). Required when 'enable_agent_greeting' is `true`. -
agent_whisper_announcement_asset_idstring— Play a whisper announcement, chosen from the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets), to the agent. Required when 'enable_agent_whisper_announcement' is `true`. -
enable_agent_alert_toneboolean— Whether to play an alert tone to the agent. Can only enable 'enable_agent_alert_tone' or 'enable_agent_whisper_announcement'. This setting is for engagement acceptance type set as `auto`. -
enable_agent_greetingboolean— Whether to enable playing a default agent greeting. This setting is for engagements whose acceptance type is set as `auto`. -
enable_agent_whisper_announcementboolean— Whether to play an announcement to the agent. Can only enable 'enable_agent_alert_tone' or 'enable_agent_whisper_announcement'. This setting is for engagement acceptance type set as `auto`.
-
-
holding_media_idstring, default:"Passing an empty string will set this option to the default media."— Media ID to use while users are on hold. **Channels** voice. -
inbound_launch_url_infoobject— Inbound launch URL configurations. The URL link launches for each engagement according to the selected trigger.-
configarray— Configurations of launching URL and methods to launch.Items:
-
launch_triggerstring, possible values:"ringing", "answered", "ended"— Methods to trigger the launch URL. -
launch_urlstring— URL to be launched. Enter a URL beginning with `https://`.
-
-
enable_launch_urlboolean— Whether to enable inbound launch URL section.
-
-
max_engagement_in_queueinteger— The task queue's maximum engagement in queue. -
max_wait_timeinteger— The task queue's maximum wait time, in seconds. -
message_acceptstring, possible values:"manual", "auto"— Option to accept a message manually or automatically. **Channels** messaging. -
notes_asset_idstring— Provide a template from the asset library for agents to follow when writing notes. To find the asset ID, use the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets). -
outbound_settingsobject— Queue configurations for outbound settings.-
enable_outbound_callsboolean— Whether to enable outbound call. -
outbound_default_disposition_idstring— When a queue disposition is required. Must assign a default disposition. -
outbound_disposition_requiredboolean— Whether a queue disposition is required. * `true` - mandatory * `false` - optional -
outbound_holding_media_idstring, default:"Passing an empty string will set this option to the default media."— Media ID, chosen from the asset library, to use while users are on hold. To find the asset ID, use the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets). **Channels:** voice -
outbound_labelsobject— The talking duration for brief outbound engagements, labeled in reports as short calls. This also sets the duration for long calls and hang-up calls.-
outbound_call_duration_lower_thresholdinteger— Minimum talking duration for brief outbound engagements, in seconds. -
outbound_call_duration_upper_thresholdinteger— Maximum talking duration for brief outbound engagements, in seconds.
-
-
outbound_launch_url_infoobject— Outbound launch URL configurations.-
configarray— Configurations for launching a URL and methods to launch.Items:
-
launch_triggerstring, possible values:"initiated", "connected", "ended"— Methods to launch a URL. -
urlstring— URL to be launched. Enter a URL beginning with `https://`.
-
-
enable_launch_urlboolean— Whether to enable the outbound launch URL section.
-
-
outbound_notes_asset_idstring— Provide a template, chosen from the asset library, for agents to follow when writing notes. To find the asset ID, use the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets). **Channels:** voice, video, messaging -
outbound_transferring_media_idstring, default:"Passing an empty string will set this option to the default media."— Media, chosen from the asset library, to use while users are being transferred. To find the asset ID, use the [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets). **Channels:** voice -
outbound_wrap_up_after_transferboolean— Agents can wrap up when transferring internally or when a supervisor takes over from them. **Channels** voice, video. -
outbound_wrap_up_expirationboolean— Auto-close engagements at the end of wrap-up duration. **Channels** voice, video. -
outbound_wrap_up_timeinteger— The task queue's wrap up time, in seconds. -
queue_caller_idsarray— What customers see on their phone when agents and supervisors reach out to them. Assign numbers that users can update from the default caller ID when they call consumers. Get a caller ID from [Get A Queue API](/docs/api/contact-center/#tag/queues/get/contact_center/queues/{queueId}).Items:
string— What customers see on their phone when agents and supervisors reach out to them. Assign numbers that users can update from the default caller ID when they call consumers. Get a caller ID from [Get A Queue API](/docs/api/contact-center/#tag/queues/get/contact_center/queues/{queueId}).
-
-
overflow_to_cc_queue_idstring— The Contact Center queue ID to receive the overflow. Only one of these overflow fields can be updated each time, `overflow_to_goodbye_message`, `overflow_to_cc_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_flow_idstring— The flow ID to receive the overflow. Get the flow ID from [**List Flows API**](/docs/api/contact-center/#tag/flows/get/contact_center/flows). Only one of these overflow fields can be updated each time, `overflow_to_goodbye_message`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_goodbye_messageboolean— Reply goodbye message, then disconnect. Only one of these overflow fields can be updated each time, `overflow_to_goodbye_message`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_goodbye_message_asset_idstring— Reply goodbye message choose from an asset. Asset ID refer to Asset Library OpenAPI. * [**Create Asset API**](/docs/api/contact-center/#tag/asset-library/post/contact_center/asset_library/assets) * [**List Assets API**](/docs/api/contact-center/#tag/asset-library/get/contact_center/asset_library/assets) -
overflow_to_inbox_idstring— The voicemail inbox ID to receive the overflow. Get the inbox ID from [**List Inboxes API**](/docs/api/contact-center/#tag/inboxes/get/contact_center/inboxes). Only one of these overflow fields can be updated each time, `overflow_to_goodbye_message`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. **Channels:** voice -
overflow_to_queue_idstring— The queue ID to receive the overflow. Only one of these overflow fields can be updated each time, `overflow_to_goodbye_message`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
queue_descriptionstring— The Contact Center queue description. -
queue_namestring— The Contact Center queue name. -
recording_storage_locationstring, possible values:"us", "au", "br", "ca", "de", "jp", "sg"— Determine where to store the recording. - us - United States - au - Australia - br - Brazil - ca - Canada - de - Germany - jp - Japan - sg - Singapore **Channels** voice, video. -
scheduled_callback_settingsobject— Queue configurations for the scheduled callback.-
consumer_inquiry_optionstring— The unique keyword that consumers can choose to identify this queue. This keyword displays to consumers as an inquiry option when they schedule callbacks. -
enable_scheduled_callbackboolean— Whether to enable scheduled callbacks. When 'enable_scheduled_callback' is `false`, the other settings under 'scheduled_callback_settings' will not take effect. -
greeting_messageobject— Message to play when consumers receive the callback. Choose customized media from `asset_library` and set 'custom_media_asset_id'. Alternately, set the 'message_text', 'language_code', and 'voice_id' together, then will play the message according to language and voice.-
custom_media_asset_idstring— The audio asset ID for a greeting message's custom media. -
language_codestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The default message's language (IETF language tag). -
message_textstring— Greeting message free text. -
voice_idstring, possible values:"Danielle", "Gregory", "Ivy", "Joanna", "Joey", "Justin", "Kendra", "Kevin", "Kimberly", "Matthew", "Ruth", "Salli", "Stephen"— The TTS service's voice ID to generate audio for the greeting message.
-
-
-
service_level_exclude_abandoned_quit_engagementsboolean— Whether to exclude quit engagements from service level metrics. **Channels** messaging. -
service_level_exclude_long_abandoned_callsboolean— Whether to exclude long abandoned calls from service level metrics. **Channels** voice, video. -
service_level_exclude_overflow_engagementsboolean— Whether to exclude overflow engagements from service level metrics. **Channels** email. -
service_level_exclude_short_abandoned_callsboolean— Whether to exclude short abandoned calls from service level metrics. **Channels** voice, video. -
service_level_target_in_percentageinteger— The service-level target as the benchmark to refer to in reports. -
service_level_threshold_in_secondsinteger— First message speed by agents for all engagements. -
short_abandonobject— Information about the task queue's [**Short Abandon**](https://support.zoom.us/hc/en-us/articles/4469989300493-Changing-queue-settings) settings. **Channels** voice, video.-
enableboolean— Whether to enable the **Short Abandon** setting. -
thresholdinteger— The task queue's **Short Abandon** threshold, in seconds.
-
-
transferring_media_idstring, default:"Passing an empty string will set this option to the default media."— Media ID to use while users are being transferred. **Channels** voice. -
video_callback_settingsobject— Video callback settings. **Channels** video.-
callback_cancel_email_bodystring— Email body for callback cancellation. -
callback_cancel_email_subjectstring— Email subject for callback cancellation. -
callback_cancel_sms_textstring— SMS text for callback cancellation. -
callback_offer_timearray— Specific days and times when callbacks can be offered. Required when `enable_callback_offter_time` is `true`.Items:
-
callback_offer_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— Day of the week. -
callback_offer_end_timestring— End time in `HH:mm` format. -
callback_offer_start_timestring— Start time in `HH:mm` format.
-
-
callback_return_dayarray— Specific days and times when consumers can return callbacks. Required when `enable_callback_return_time` is `true`.Items:
-
callback_return_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— Day of the week. -
callback_return_end_timestring— End time in `HH:mm` format. -
callback_return_start_timestring— Start time in `HH:mm` format.
-
-
callback_return_timezone_idstring— Timezone ID for callback return times. Required when `enable_callback_return_time` is `true`. -
callback_timeoutinteger— Callback timeout, in minutes. Maximum is 14 days. -
callback_url_expirationinteger— Callback URL expiration time, in minutes. -
enable_callback_cancel_messageboolean— Whether to enable callback cancellation email messages. -
enable_callback_cancel_sms_messageboolean— Whether to enable callback cancellation SMS messages. -
enable_callback_offer_timeboolean— Whether to enable specific callback offer times. When `true`, `callback_offer_time` is required. -
enable_callback_offter_timeboolean— **Deprecated.** Use `enable_callback_offer_time` instead. Whether to enable specific callback offer times. When `true`, `callback_offer_time` is required. -
enable_callback_return_timeboolean— Whether to enable specific callback return times. When `true`, `callback_return_timezone_id` and `callback_return_day` are required. -
enable_mobile_notificationboolean— Whether to enable mobile notifications for callbacks. -
enable_resend_callback_urlboolean— Whether to enable resending the callback URL. -
enable_video_callbackboolean— Whether to enable video callbacks. -
resend_callback_url_timestring, possible values:"60", "90", "120"— **Deprecated** use `resend_callback_url_time_in_seconds` instead. Time interval for resending the callback URL, in seconds. If both this and the `resend_callback_url_time_in_seconds` field are submitted, then `resend_callback_url_time_in_seconds` field takes precedence. -
resend_callback_url_time_in_secondsinteger, possible values:60, 90, 120— Time interval for resending the callback URL, in seconds. Valid values are 60, 90, or 120. If both this and the deprecated `resend_callback_url_time` field are submitted, then this field takes precedence. -
time_to_offer_callbackinteger— Time to offer callback to consumers, in minutes. Must be in 5-minute intervals.
-
-
waiting_room_idstring— The users' waiting room ID. **Channels** video. -
wrap_up_after_transferboolean— Add wrap-up time after transferring an engagement. -
wrap_up_expirationboolean— Auto-close engagements at the end of wrap-up duration. **Channels** voice, video. -
wrap_up_timeinteger— The task queue's wrap up time, in seconds.
Example:
{
"queue_name": "Voice - Customer Support",
"queue_description": "Agents assigned to this queue handle Customer Support voice calls.",
"max_wait_time": 50,
"wrap_up_time": 50,
"max_engagement_in_queue": 50,
"short_abandon": {
"enable": false,
"threshold": 5
},
"channel": "voice",
"distribution_type": 1,
"distribution_duration_in_seconds": 30,
"connecting_media_id": "connectingAudioMp3",
"transferring_media_id": "transferringAudioMp3",
"holding_media_id": "holdingAudioMp3",
"waiting_room_id": "vPtSZOzBSLWMiorssYWTZw",
"message_accept": "manual",
"wrap_up_expiration": true,
"wrap_up_after_transfer": true,
"overflow_to_goodbye_message": true,
"overflow_to_cc_queue_id": "m8IhNvUyTUmx7Jm8h5ZvLQ",
"overflow_to_flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"overflow_to_inbox_id": "cMH8RJA0QsyJBCWIFbWfBQ",
"overflow_to_goodbye_message_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"auto_close_message": "This chat has been auto-closed due to inactivity.",
"auto_close_message_enabled": true,
"auto_close_timeout": 10,
"auto_close_alert_message": "Chat will auto-close soon if you don't reply",
"auto_close_alert_message_enabled": true,
"auto_close_alert_message_time": 10,
"recording_storage_location": "us",
"service_level_threshold_in_seconds": 15,
"service_level_exclude_short_abandoned_calls": true,
"service_level_exclude_long_abandoned_calls": true,
"service_level_exclude_abandoned_quit_engagements": true,
"service_level_exclude_overflow_engagements": true,
"service_level_target_in_percentage": 80,
"agent_routing_profile_id": "fgjdkhgfieryt7465435kjhdkhg",
"agent_routing_settings": {
"allow_agent_select_skill_for_transfer": true,
"maximum_look_back_period": 30,
"last_engaged_agent_data_from_queue_ids": [
"BxTw_zCQTVO_kGOJh6-vkg"
]
},
"consumer_routing_profile_id": "fgjdkhgfieryt7465435kjhdkhg",
"engagement_acceptance": {
"acceptance_type": "manual",
"enable_agent_alert_tone": true,
"enable_agent_whisper_announcement": true,
"agent_whisper_announcement_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"enable_agent_greeting": true,
"agent_greeting_asset_id": "dORBRSTxTN6B0vLJ37Kvnw"
},
"inbound_launch_url_info": {
"config": [
{
"launch_trigger": "ringing",
"launch_url": "https://www.example.com"
}
],
"enable_launch_url": true
},
"notes_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"disposition_required": true,
"default_disposition_id": "dORBRSTxTN6B0vLJ37Kvnw",
"outbound_settings": {
"enable_outbound_calls": true,
"queue_caller_ids": [
"jJ2QCIFaS9eLqNi9vF3WPg"
],
"outbound_launch_url_info": {
"config": [
{
"launch_trigger": "connected",
"url": "https://www.example.com"
}
],
"enable_launch_url": true
},
"outbound_labels": {
"outbound_call_duration_lower_threshold": 3,
"outbound_call_duration_upper_threshold": 19
},
"outbound_transferring_media_id": "transferringAudioMp3",
"outbound_holding_media_id": "holdingAudioMp3",
"outbound_notes_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"outbound_disposition_required": true,
"outbound_default_disposition_id": "dORBRSTxTN6B0vLJ37Kvnw",
"outbound_wrap_up_time": 50,
"outbound_wrap_up_expiration": true,
"outbound_wrap_up_after_transfer": true
},
"scheduled_callback_settings": {
"enable_scheduled_callback": false,
"consumer_inquiry_option": "Tech Support 1",
"greeting_message": {
"custom_media_asset_id": "9gp4iyqUR_qq8tYpWw1EKg",
"language_code": "en-US",
"voice_id": "Joanna",
"message_text": "You will be connected to the next available agent in a short moment."
}
},
"video_callback_settings": {
"enable_video_callback": true,
"time_to_offer_callback": 10,
"callback_url_expiration": 3,
"enable_resend_callback_url": true,
"resend_callback_url_time_in_seconds": 60,
"enable_mobile_notification": true,
"callback_timeout": 1440,
"enable_callback_cancel_message": true,
"callback_cancel_email_subject": "Your callback has been cancelled",
"callback_cancel_email_body": "We regret to inform you that your scheduled callback has been cancelled.",
"enable_callback_cancel_sms_message": true,
"callback_cancel_sms_text": "Your callback has been cancelled.",
"enable_callback_offer_time": true,
"callback_offer_time": [
{
"callback_offer_day": "Mon",
"callback_offer_start_time": "09:00",
"callback_offer_end_time": "17:00"
}
],
"enable_callback_return_time": true,
"callback_return_timezone_id": "America/Los_Angeles",
"callback_return_day": [
{
"callback_return_day": "Mon",
"callback_return_start_time": "09:00",
"callback_return_end_time": "17:00"
}
]
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Queue updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Queue channel type is invalid: {value}. <br> **Error Code:** `1206` <br> `video_callback_settings` can only be configured for video queues. <br> **Error Code:** `1220` <br> Invalid engagement acceptance type. <br> **Error Code:** `1221` <br> Cannot enable both `agent_alert_tone` and `agent_whisper_announcement`. <br> **Error Code:** `1222` <br> `agent_whisper_announcement_asset_id` is required when `enable_agent_whisper_announcement` is true. <br> **Error Code:** `1223` <br> `agent_greeting_asset_id` is required when `enable_agent_greeting` is true. <br> **Error Code:** `1225` <br> Invalid launch URL trigger specified. <br> **Error Code:** `1233` <br> Launch URL must start with `https://`. <br> **Error Code:** `1234` <br> Launch URL config is required when launch URL is enabled. <br> **Error Code:** `1235` <br> `default_disposition_id` is required when `disposition_required` is true. <br> **Error Code:** `1236` <br> `outbound_default_disposition_id` is required when `outbound_disposition_required` is true. <br> **Error Code:** `1240` <br> Agent routing profile is required. <br> **Error Code:** `1241` <br> **Last Called Agent** must be enabled in the agent routing profile. <br> **Error Code:** `1206` <br> Auto-close warning time must be less than or equal to the auto-close time. <br> **Error Code:** `1237` <br> Outbound launch URL config is required when launch URL is enabled. <br> **Error Code:** `1238` <br> Invalid outbound launch URL trigger specified. <br> **Error Code:** `1239` <br> Outbound launch URL must start with `https://`. <br> **Error Code:** `1250` <br> time_to_offer_callback must be in 5-minute intervals (5, 10, 15, 20, 25, 30, 35, 40). <br> **Error Code:** `1251` <br> callback_offer_time is required when enable_callback_offer_time is true. <br> **Error Code:** `1252` <br> callback_return_timezone_id is required when enable_callback_return_time is true. <br> **Error Code:** `1253` <br> callback_return_day is required when enable_callback_return_time is true. <br> **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `1210` <br> Agent routing profile does not exist. <br> **Error Code:** `1900` <br> Consumer routing profile not found. <br> **Error Code:** `2301` <br> Asset not found. <br> **Error Code:** `2401` <br> Disposition not found: {dispositionId}. <br> **Error Code:** `2405` <br> Disposition is not assigned to queue. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List queue agents
- Method:
GET - Path:
/contact_center/queues/{queueId}/agents - Tags: Queues
Retrieve the list of Contact Center users assigned to a queue, including their agent persona assignments for that queue.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_queue_agents:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queue agents list returned.
Content-Type: application/json
-
agentsarray— Information about the agents.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
opt_in_out_statusinteger, possible values:0, 1, 2— Opt out status. `0` - Opted in by agent himself or supervisor. `1` - Opted out by supervisor or admin. `2` - Opted out by agent himself. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as **Lunch**. -
teamsarray— The teams the user is assigned to.Items:
-
team_idstring— The ID of the team. -
team_namestring— The display name of the team.
-
-
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"agents": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"status_id": "1",
"status_name": "Offline",
"user_access": "active",
"opt_in_out_status": 0,
"teams": [
{
"team_id": "qlU902FoTD-dFi9QnCdZhw",
"team_name": "Support Team"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign queue agents
- Method:
POST - Path:
/contact_center/queues/{queueId}/agents - Tags: Queues
Assign users to a Contact Center queue as agent persona.
The API response will contain only those users confirmed to have been assigned to the queue, and ignores any unrecognized user ID or users already assigned to the queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue_agent:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Successfully assigned queue agents. Can be empty.
Content-Type: application/json
-
agentsarray— Information about the agents.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
opt_in_out_statusinteger, possible values:0, 1, 2— Opt out status. `0` - Opted in by agent himself or supervisor. `1` - Opted out by supervisor or admin. `2` - Opted out by agent himself. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as Lunch. -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"agents": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"status_id": "1",
"status_name": "Offline",
"user_access": "active",
"opt_in_out_status": 0
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign a queue agent
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/agents/{userId} - Tags: Queues
Remove an agent from a Contact Center queue. The specified user will be unassigned from the queue and will no longer receive engagements routed through it. The user must be currently assigned as an agent to the queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_agent:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue agent removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a queue agent's opt-in/opt-out status
- Method:
PATCH - Path:
/contact_center/queues/{queueId}/agents/{userId} - Tags: Queues
Updates the opt-in or opt-out status of an agent assigned to a Contact Center queue. Use this endpoint to control whether an agent receives engagements from the specified queue. Opting an agent out temporarily removes them from the queue's routing pool without removing their queue assignment.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue_agent:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
opt_in_out_status(required)integer, format:int32, possible values:0, 1, 2— Opt in/out status. `0` - Opted in. The agent is opted in and available to receive engagements from this queue. `1` - Opted out by supervisor or admin. A supervisor or administrator has opted out this agent from receiving engagements from this queue. `2` - Opted out by agent. The agent has opted themselves out from receiving engagements from this queue.
Example:
{
"opt_in_out_status": 0
}
Responses
Status: 204 **HTTP Status Code:** `204` Queue agent updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> The agent must be in available state (Ready) to opt-in for the queue. <br> **Error Code:** `1011` <br> The agent is not allowed to opt in or out of their assigned queues. <br> **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List queue dispositions
- Method:
GET - Path:
/contact_center/queues/{queueId}/dispositions - Tags: Queues
Return a list of queue's dispositions.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_dispositions:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queue dispositions list returned.
Content-Type: application/json
-
dispositionsarray— Information about the task queue's dispositions.Items:
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The disposition's assignment type. -
cc_queue_idstring— The Contact Center queue's ID. -
disposition_descriptionstring— Information about the disposition. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_namestring— The Contact Center queue's name. -
statusstring, possible values:"inactive", "active"— The disposition's status. * `inactive` — Deactivated. * `active` — Activated.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"queue_name": "default voice queue",
"cc_queue_id": "11Fx7UtNQaaWBM9XBCFX2Q",
"assign_type": "inbound"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign queue dispositions
- Method:
POST - Path:
/contact_center/queues/{queueId}/dispositions - Tags: Queues
Add dispositions to a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue disposition:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The assignment type. The default is `inbound`. -
disposition_idsarray— The dispositions to assign to the queue. This request supports a maximum of 30 dispositions per call.Items:
string
Example:
{
"disposition_ids": [
"sgdfghr_2454y5hdfgsfsgsdg"
],
"assign_type": "inbound"
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue dispositions assigned.
Content-Type: application/json
-
dispositionsarray— Information about the dispositionsItems:
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The disposition's assignment type. -
cc_queue_idstring— The Contact Center queue's ID. -
disposition_descriptionstring— Information about the disposition. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_namestring— The Contact Center queue's name. -
statusstring, possible values:"inactive", "active"— The disposition's status. * `inactive` — Deactivated. * `active` — Activated.
-
Example:
{
"dispositions": [
{
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"disposition_description": "Inquiry dispositions.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"queue_name": "default voice queue",
"cc_queue_id": "11Fx7UtNQaaWBM9XBCFX2Q",
"assign_type": "inbound"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List queue disposition sets
- Method:
GET - Path:
/contact_center/queues/{queueId}/dispositions/sets - Tags: Queues
Return a list of queue's disposition sets(https://support.zoom.us/hc/en-us/articles/4470153057549-Managing-dispositions).
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:list_disposition_sets:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queue disposition sets list returned.
Content-Type: application/json
-
disposition_setsarray— Information about the task queue's disposition sets.Items:
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The disposition set's assignment type. -
cc_queue_idstring— The Contact Center queue's ID. -
disposition_set_descriptionstring— The information about the disposition set. -
disposition_set_idstring— The disposition set's ID. -
disposition_set_namestring— The disposition set's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_namestring— The Contact Center queue's name. -
statusstring, possible values:"inactive", "active"— The disposition set's status. * `inactive` — Deactivated. * `active` — Activated.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"disposition_sets": [
{
"disposition_set_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_set_name": "Inquiry",
"disposition_set_description": "Inquiry dispositions.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"queue_name": "default voice queue",
"cc_queue_id": "11Fx7UtNQaaWBM9XBCFX2Q",
"assign_type": "inbound"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Assign queue disposition sets
- Method:
POST - Path:
/contact_center/queues/{queueId}/dispositions/sets - Tags: Queues
Add disposition sets to a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue_disposition_set:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The assignment type. The default is `inbound`. -
disposition_set_idsarray— The IDs of the disposition sets to assign to the queue. This request supports a maximum of 30 dispositions per call.Items:
string
Example:
{
"disposition_set_ids": [
"sgdfghr_2454y5hdfgsfsgsdg"
],
"assign_type": "inbound"
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue disposition sets assigned.
Content-Type: application/json
-
disposition_setsarray— Information about the queue's disposition sets.Items:
-
assign_typestring, possible values:"inbound", "outbound", default:"inbound"— The disposition set's assignment type. -
cc_queue_idstring— The Contact Center queue's ID. -
disposition_set_descriptionstring— The information about the disposition set. -
disposition_set_idstring— The disposition set's ID. -
disposition_set_namestring— The disposition set's name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
queue_namestring— The Contact Center queue's name. -
statusstring, possible values:"inactive", "active"— The disposition set's status. * `inactive` — Deactivated. * `active` — Activated.
-
Example:
{
"disposition_sets": [
{
"disposition_set_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_set_name": "Inquiry",
"disposition_set_description": "Inquiry dispositions.",
"status": "inactive",
"last_modified_time": "2022-02-15T09:27:15Z",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"queue_name": "default voice queue",
"cc_queue_id": "11Fx7UtNQaaWBM9XBCFX2Q",
"assign_type": "inbound"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Unassign a queue disposition set
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/dispositions/sets/{dispositionSetId} - Tags: Queues
Delete a disposition set from a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_disposition_set:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue disposition set deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue disposition set does not exist: $dispositionSetId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Unassign a queue disposition
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/dispositions/{dispositionId} - Tags: Queues
Delete a disposition from a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_disposition:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue disposition deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue disposition does not exist: $dispositionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a queue's interrupt settings
- Method:
GET - Path:
/contact_center/queues/{queueId}/interrupt - Tags: Queues
Retrieve the interrupt settings for a specific queue, including audio interrupts and notify interrupts. If set up, returns detailed information about custom audio configurations.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Queue interrupt settings retrieved successfully.
Content-Type: application/json
-
audio_interruptsarray— List of audio messages to play during queue wait time.Items:
-
audio_asset_idstring— The ID of the audio asset to play. -
audio_filenamestring— The audio asset's filename. -
audio_urlstring— The URL to access the audio asset. -
disable_audioboolean— Whether this audio interrupt is disabled. -
is_loopboolean— Whether to loop this audio message. -
loop_intervalinteger | null— Interval in seconds between loops. Required when `is_loop` is `true`. -
play_after_secondsinteger— Number of seconds to wait before playing this audio.
-
-
bucket_idstring | null— The waiting experience bucket's unique identifier. Only present when the request includes a `bucket_id` parameter. -
notify_interruptsobject— Notify interrupt settings for estimated wait time and position in queue announcements.-
is_loopboolean— Whether to repeat the notification periodically. -
loop_intervalinteger | null— Interval in seconds between notification repetitions. Required when `is_loop` is `true`. -
notify_estimated_wait_timeobject— Estimated wait time notification settings. Announces the estimated wait time to the caller.-
backup_custom_audioarray— Custom audio to play when the system cannot calculate an estimated wait time. Always uses STANDARD mode.Items:
-
audio_asset_idstring | null— The ID of the audio asset to play at this position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_filenamestring | null— The audio asset's filename. This is a read-only field populated by the system. -
audio_variablestring | null, possible values:"customer_position", "wait_time"— A dynamic variable to announce at this position. - `customer_position` - Announces the caller's position in the queue. - `wait_time` - Announces the estimated wait time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
orderinteger— The playback order of this audio prompt in the sequence.
-
-
custom_audioarray— The main custom audio prompts for wait time announcement. **STANDARD mode** Exactly 1 audio file. **ADVANCED mode** 1-7 audio segments.Items:
-
audio_asset_idstring | null— The ID of the audio asset to play at this position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_filenamestring | null— The filename of the audio asset. This is a read-only field populated by the system. -
audio_variablestring | null, possible values:"customer_position", "wait_time"— A dynamic variable to announce at this position. - `customer_position` - Announces the caller's position in the queue. - `wait_time` - Announces the estimated wait time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
orderinteger— The playback order of this audio prompt in the sequence.
-
-
custom_audio_typestring, possible values:"standard", "advanced"— The type of custom audio configuration. - `standard` - Single pre-recorded audio file that includes the complete message. - `advanced` - Multiple audio segments combined with dynamic variables. -
over_limit_custom_audioarray— Custom audio to play when the estimated wait time exceeds the digit audio library limit. Always uses STANDARD mode.Items:
-
audio_asset_idstring | null— The ID of the audio asset to play at this position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_filenamestring | null— The audio asset's filename. This is a read-only field populated by the system. -
audio_variablestring | null, possible values:"customer_position", "wait_time"— A dynamic variable to announce at this position. - `customer_position` - Announces the caller's position in the queue. - `wait_time` - Announces the estimated wait time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
orderinteger— The playback order of this audio prompt in the sequence.
-
-
-
notify_position_in_queueobject— Position In Queue notification settings. Announces the caller's position in the queue.-
custom_audioarray— The main custom audio prompts for position announcement. **STANDARD mode** - Exactly 1 audio file. **ADVANCED mode** - 1-7 audio segments.Items:
-
audio_asset_idstring | null— The ID of the audio asset to play at this position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_filenamestring | null— The audio asset's filename. This is a read-only field populated by the system. -
audio_variablestring | null, possible values:"customer_position", "wait_time"— A dynamic variable to announce at this position. - `customer_position` - Announces the caller's position in the queue. - `wait_time` - Announces the estimated wait time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
orderinteger— The playback order of this audio prompt in the sequence.
-
-
custom_audio_typestring, possible values:"standard", "advanced"— The type of custom audio configuration. - `standard` - Single pre-recorded audio file that includes the complete message. - `advanced` - Multiple audio segments combined with dynamic variables. -
over_limit_custom_audioarray— Custom audio to play when the caller's position exceeds the digit audio library limit. Always uses STANDARD mode.Items:
-
audio_asset_idstring | null— The ID of the audio asset to play at this position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_filenamestring | null— The audio asset's filename. This is a read-only field populated by the system. -
audio_variablestring | null, possible values:"customer_position", "wait_time"— A dynamic variable to announce at this position. - `customer_position` - Announces the caller's position in the queue. - `wait_time` - Announces the estimated wait time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
orderinteger— The playback order of this audio prompt in the sequence.
-
-
-
play_after_secondsinteger— Number of seconds to wait before playing the first notification.
-
Example:
{
"bucket_id": "zeYjXoDOS_eV1QmTpj63PQ",
"audio_interrupts": [
{
"audio_asset_id": "asset_001",
"audio_filename": "welcome_message.mp3",
"audio_url": "https://www.example.com/audio/asset_001.mp3",
"play_after_seconds": 30,
"is_loop": false,
"loop_interval": 45,
"disable_audio": false
}
],
"notify_interrupts": {
"play_after_seconds": 15,
"is_loop": true,
"loop_interval": 30,
"notify_position_in_queue": {
"custom_audio_type": "advanced",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "piq_intro_001",
"audio_filename": "you_are_number.mp3",
"audio_variable": "customer_position"
}
],
"over_limit_custom_audio": [
{
"order": 1,
"audio_asset_id": "piq_intro_001",
"audio_filename": "you_are_number.mp3",
"audio_variable": "customer_position"
}
]
},
"notify_estimated_wait_time": {
"custom_audio_type": "advanced",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "piq_intro_001",
"audio_filename": "you_are_number.mp3",
"audio_variable": "customer_position"
}
],
"over_limit_custom_audio": [
{
"order": 1,
"audio_asset_id": "piq_intro_001",
"audio_filename": "you_are_number.mp3",
"audio_variable": "wait_time"
}
],
"backup_custom_audio": [
{
"order": 1,
"audio_asset_id": "piq_intro_001",
"audio_filename": "you_are_number.mp3",
"audio_variable": "wait_time"
}
]
}
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Queue channel type is invalid. Only voice queues support interrupt settings. <br> **Error Code:** `2313` <br> Bucket option is not enabled for queue {queueId}. Enable bucket option before using bucket_id. <br> **Error Code:** `` <br> <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **HTTP Status Code:** `403` Forbidden User does not have permission to read queue settings. **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `2312` <br> The `bucket_id` {bucketId} does not exist or does not belong to queue {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits]https://developers.zoom.us/docs/api/rate-limits/. **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a queue's interrupt settings
- Method:
PATCH - Path:
/contact_center/queues/{queueId}/interrupt - Tags: Queues
Update the interrupt settings for a voice queue.
While consumers wait to connect, the queue can interrupt the hold media to announce estimated wait time, position in queue, audio messages, or menu options. Configure interrupts to occur within the max wait duration.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
audio_interruptsarray— A list of audio interrupts to play during consumer wait in the queue.Items:
-
audio_asset_id(required)string— ID of the audio asset choose to play as queue audio interrupt. -
is_loop(required)boolean— Whether the audio interrupt repeat to play. -
play_after_seconds(required)integer— The number of seconds to wait for the first time to play the audio interrupt. -
disable_audioboolean— Choose to disable this audio interrupt. When set to true, the audio interrupt will be disabled and filled with background music. Defaults to false (enabled) if not provided. -
loop_intervalinteger— How long to wait between repeats. `loop_interval` must be at least 1 second when `is_loop` is `true`. Maximum value has no hard limit, but not exceed queue's maximum waiting time. As a best practice, stay within 5-300 seconds.
-
-
notify_interruptsobject— Notify the consumer of their position and estimated wait time while waiting in the queue.-
is_loop(required)boolean— Whether the position and estimated wait time notifications repeat. -
play_after_seconds(required)integer— The number of seconds to wait before playing the first notification to notify consumer about their position and estimated waiting time in queue. -
loop_intervalinteger— How long to wait between repeats. `loop_interval` must be at least 1 second when `is_loop` is `true`. Maximum value has no hard limit, but not exceed queue's maximum waiting time. As a best practice, stay within 5-300 seconds. -
notify_estimated_wait_timeobject— Notify the consumer of their estimated wait time while waiting in the queue. The wait time is calculated by the routing engine based on current queue conditions, agent availability, and historical data.-
backup_custom_audio(required)array— Fallback audio message to play when the system cannot calculate or provide estimated wait time. **Play times** EWT service is unavailable No active agents are available Insufficient historical data for calculation System errors occur Queue is newly created without historical dataItems:
-
audio_asset_id(required)string— ID of the audio asset choose to play when system not able to provide an estimated wait time. -
order(required)integer— The order to play the audio message when system not able to provide an estimated wait time.
-
-
custom_audio(required)array— Set the custom audio settings for notifying the consumer of their estimated wait time in the queue. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. The 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and with dynamic variable 'audio_variable'. For each part, select 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_wait_time_prefix" }, { "order": 2, "audio_variable": "wait_time" }, { "order": 3, "audio_asset_id": "asset_wait_time_suffix" }Items:
-
order(required)integer— The playback sequence order for audio segments. Must be unique within the array. -
audio_asset_idstring— ID of the audio asset choose to play to notify the consumer of their estimated wait time in the queue. -
audio_variablestring, possible values:"wait_time", default:"wait_time"— Dynamic variable for advanced mode only. Use `wait_time` to announce the estimated wait time, in minutes. The time is calculated in real time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"standard", "advanced", default:"standard"— Select custom audio type. -standard - Single pre-recorded audio file. The audio prompt must include all words and time values as part of the message. Variables cannot be used with this option. -advanced - Audio message split into multiple reusable parts, up to 7 segments. Combines pre-recorded audio files with dynamic variables. Requires digit audio library to be configured first. -
over_limit_custom_audio(required)array— Audio message to play when the estimated wait time exceeds the digit audio library limit, typically 60+ minutes. This provides a fallback message for very long wait times where specific durations can't be announced accurately.Items:
-
audio_asset_id(required)string— ID of the audio asset choose to play when the estimated wait time exceeds the maximum limit. -
order(required)integer— The order to play the audio message when over limit, estimated wait time is more than 60 minutes.
-
-
-
notify_position_in_queueobject— Notify the consumer of their position while waiting in queue.-
custom_audio(required)array— Set the custom audio settings for notifying a user of their queue position. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable'. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_position_in_queue_prefix" }, { "order": 2, "audio_variable": "customer_position" }, { "order": 3, "audio_asset_id": "asset_position_in_queue_suffix" }Items:
-
order(required)integer— The playback sequence order for audio segments. Must be unique within the array. **Example** { "order": 1, "audio_asset_id": "asset_position_in_queue_prefix" }, { "order": 2, "audio_variable": "customer_position" }, { "order": 3, "audio_asset_id": "asset_position_in_queue_suffix" } -
audio_asset_idstring— ID of the audio asset choose to play for notifying a user of their queue position. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"customer_position", default:"customer_position"— Dynamic variable for advanced mode only. Use `customer_position` to announce the caller's current position in the queue. The position is calculated in real-time. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"standard", "advanced", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option. -
over_limit_custom_audio(required)array— Audio message to play when the caller's position exceeds the digit audio library limit, typically 60. Provides a fallback message for very long queues where specific position numbers cannot be announced.Items:
-
audio_asset_idstring— ID of the audio asset to play when the position exceeds the maximum limit. -
orderinteger— The playback sequence order for over-limit audio segments
-
-
-
Example:
{
"audio_interrupts": [
{
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"play_after_seconds": 5,
"is_loop": false,
"loop_interval": 1,
"disable_audio": true
}
],
"notify_interrupts": {
"play_after_seconds": 10,
"is_loop": false,
"loop_interval": 1,
"notify_position_in_queue": {
"custom_audio_type": "advanced",
"custom_audio": [
{
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"audio_variable": "customer_position",
"order": 1
}
],
"over_limit_custom_audio": [
{
"order": 1,
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw"
}
]
},
"notify_estimated_wait_time": {
"custom_audio_type": "advanced",
"custom_audio": [
{
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"audio_variable": "wait_time",
"order": 1
}
],
"over_limit_custom_audio": [
{
"order": 1,
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw"
}
],
"backup_custom_audio": [
{
"order": 1,
"audio_asset_id": "dORBRSTxTN6B0vLJ37Kvnw"
}
]
}
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Queue interrupts updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Queue channel type is invalid. <br> **Error Code:** `2304` <br> Asset '{assetId}' is not valid for this operation. Audio asset is required. <br> **Error Code:** `2311` <br> `disable_audio` cannot be set via API for this audio interrupt when `is_enable_api_control` is not enabled. <br> **Error Code:** `1254` <br> Bucket ID is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `2301` <br> Asset does not exist: {assetId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign a queue menu based interrupt
- Method:
POST - Path:
/contact_center/queues/{queueId}/interrupt_menu - Tags: Queues
Create a menu of options to offer to consumers during the queue waiting experience. Currently, the only support for queue channel type is voice.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
menu_language_code(required)string, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The menu language and voice applied to default messages for menu and callback prompts. -
menu_options(required)array— A list of menu options for keypresses and detail menu action. Each keypress can only be related to one action.Items:
-
keypress(required)string, possible values:"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "*", "#"— The keypress provided in the menu. -
menu_action(required)string, possible values:"request_callback", "leave_voicemail", "route_flow", "repeat_menu"— The keypress action for selecting the menu. -
callback_settingsobject— Set call back settings for when the menu action is `request_callback`.-
accept_callback_timeoutinteger— Time to accept callback menu, in seconds. Configured at 5 second intervals. -
advanced_callback_confirmationobject— when 'enable_advanced_callback_confirmation' set as `true`, required to set the advanced callback confirmation voice message recording under this section.-
advanced_callback_confirm_messagestring, default:"Your callback request is confirmed. We will use the phone number {{phoneNumber}} to call you back when it's your turn in the queue. To leave a voice message, press {{keyPress}}. Or hang up to end the call."— Mesage to caller with callback request. Do no edit or remove symbols or text in `{{}}` -
advanced_callback_confirm_message_with_extensionstring, default:"Your request for callback is confirmed. We'll call you back at your {{current phone number}} and extension {{extension number}} when it's your turn in the queue. To leave a voice message, press {{keyPress}}, or hang up to end the call."— Message to caller with callback request, with extension entered. Do not edit or remove symbols or text in `{{}}`. -
callback_voice_message_display_timeinteger, default:5— Callback voice message is displayed to the agent for the set number of seconds before contacting the consumer. If the agent does not click **Confirm** to dial consumer after the timeout, the system will automatically dial the number. -
callback_voice_message_time_limitinteger, default:1— The voice message time limit, in minutes. -
enable_voice_message_transcriptionboolean— Allow agent to access voice message transcriptions from the Zoom client -
end_messagestring, default:"Good bye."— End call message to play. -
greeting_messagestring, default:"Please record your voice message after the tone, press {{starKey}} to discard and end call, or press any digit key to save the recording."— Greeting voice message to play. Do no edit or remove symbols or text in `{{}}`, -
keypress_listen_recording_messagestring, default:"Press {{keyPress}} to listen to the voice message."— Customize the message for listen to voice message. The keypress is predefined as `1`. Do not edit or remove symbols or text in `{{}}`. -
keypress_re_recording_messagestring, default:"Press {{keyPress}} to re-record your voice message."— Customize the message for re-record the voice message. The keypress is predefined as `3`. Do not edit or remove symbols or text in `{{}}`. -
keypress_save_recording_messagestring, default:"Press {{keyPress}} to save the voice message and end the call."— Customize the message for save the voice message. The keypress is predefined as `2`. Do not edit or remove symbols or text in `{{}}`. -
keypress_voice_messagestring, possible values:"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "*", default:"1"— The keypress provided in the menu for the leave a voice message action. -
save_recording_messagestring, default:"Message saved"— Customize the message to play for save recording message to play. -
short_recording_messagestring, default:"Sorry, your recording is too short. Please try again."— Customize the message to play for voice for short recording.
-
-
callback_cancel_messagestring, default:"Your callback has been canceled due to high call volumes. Please try calling again."— Notification message about callback cancellation. -
callback_cancel_message_custom_audioobject— Play prerecorded audio message about callback cancellation. **Note** Provide either 'callback_cancel_message' or 'callback_cancel_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_confirm_keypressstring, possible values:"#", "*"— Callers use this key to confirm in response to message for a request callback. -
callback_confirm_messagestring, default:"Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue"— Message to the returning caller with callback set up. Do not edit or remove symbols and text in {{}}. {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
callback_confirm_message_custom_audioobject— Play prerecorded audio message to the returning caller with callback set up. **Note** Provide either 'callback_confirm_message' or 'callback_confirm_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_confirm_messsagestring, default:"Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue"— Deprecate. Message to the returning caller with callback set up. Do not edit or remove symbols and text in {{}}. {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
callback_number_typestring, possible values:"flow_entry_id", "account_default_caller_id", "queue_default_caller_id"— Callback caller ID number type. -
callback_offer_timearray— Set the day when callbacks will be offered and returned to consumers. Required when `enable_callback_offer_time` is `true`.Items:
-
callback_offer_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— Set the day when callbacks will be offered to consumers. -
callback_offer_end_timestring— End time on the day when callbacks will be offered to consumers, between `00:00` and `23:59`. -
callback_offer_start_timestring— Start time on the day when callbacks will be offered to consumers, between `00:00` and `23:59`.
-
-
callback_offer_timezone_idstring— Set the [timezone](/docs/api/references/abbreviations/#timezones) when callbacks will be offered and returned to consumers. Required when `enable_callback_offer_time` is `true`. -
callback_return_dayarray— The day when callbacks will be returned to consumers. Required when `enable_callback_return_time` is `true`.Items:
-
callback_return_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— The day when callbacks will be returned to consumers. -
callback_return_end_timestring— Set the end time range when callbacks will be returned to consumers, between `00:00` to `23:59`. -
callback_return_start_timestring— Set the start time range when callbacks will be returned to consumers, between `00:00` to `23:59`.
-
-
callback_return_timezone_idstring— Set the [timezone ID](/docs/api/references/abbreviations/#timezones) to limit the times when callbacks will be returned to consumers. Required when `enable_callback_return_time` is `true`. -
callback_returning_messagestring, default:"Hello again. You have a callback set up. Press {{keyPress}} to cancel your callback and wait on the line, or hang up to keep your callback request and end this call."— Message to returning caller with callback setup. Do not edit or remove symbols and text in {{}}.The {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
callback_returning_message_custom_audioobject— Play prerecorded audio message to returning caller with callback setup. **Note** Provide either 'callback_returning_message' or 'callback_returning_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_timeoutinteger— Set the limit for how long callbacks will remain as tasks in the queue, in seconds. -
confirm_extension_number_messagestring, default:"You entered the extension {{extension number}}. If this is correct, press {{keyPress}} to confirm. Otherwise, enter your extension number and then press {{keyPress}}."— Message asking the caller to confirm the phone number extension. Do not edit or remove symbols and text in {{}}. The {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
confirm_extension_number_message_custom_audioobject— Play prerecorded audio message asking the caller to confirm the phone number extension. **Note** Provide either 'confirm_extension_number_message' or 'confirm_extension_number_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
enable_advanced_callback_confirmationboolean— Enable or disable advanced callback confirmation feature. The account needs to enable the feature OP flag. -
enable_callback_cancel_messageboolean— Send a message to consumers if callbacks are canceled. -
enable_callback_offer_timeboolean— Limit the times when callbacks will be offered to consumers. -
enable_callback_return_timeboolean— Limit the times when callbacks will be returned to consumers. -
enable_offer_extension_numberboolean— Lets callers to add an extension to their callback phone number so that callers who don't have a direct line can still be reached directly. -
enable_offer_phone_numberboolean— Allow callers to provide a different callback number. -
offer_extension_number_messagestring, default:"We'll call you back using the phone number {{current phone number}}. If you want to add an extension, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now."— Message asking the caller to give a phone number extension. Do not edit or remove symbols and text in {{}}. The {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
offer_extension_number_message_custom_audioobject— Play prerecorded audio message asking the caller to give a phone number extension. **Note** Provide either 'offer_extension_number_message' or 'offer_extension_number_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
offer_number_messagestring, default:"We'll call you back using the phone number {{current phone number}}. If you want to use a different number, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now."— The message to play to consumer asking for a call back phone number. Do not edit or remove symbols and text in {{}}. {{keyPress}} plays the keypress configured in 'callback_confirm_keypress' to the consumer. -
offer_number_message_custom_audioobject— The prerecorded audio message to play to consumers asking for a call back phone number. **Note** Provide either 'offer_number_message' or 'offer_number_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
outbound_dial_greeting_messagestring, default:"Thanks for waiting in the queue. You will be connected to the next available agent shortly."— greeting message to callers before they are connected to an agent. -
outbound_dial_greeting_message_custom_audioobject— Play prerecorded greeting message to callers before they are connected to an agent. **Note** Provider either 'outbound_dial_greeting_message' or 'outbound_dial_greeting_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
outbound_dial_optionstring, possible values:"auto_greeting", "directly_connect"— Choose the outbound method for how callers are connected when they receive a callback.
-
-
play_messagestring— The text message to play for the keypress. -
play_message_custom_audioobject— The prerecorded audio message to play for the keypress. **Note** Provide either 'play_message' or 'play_message_custom_audio'.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
route_to_flow_idstring— Select a voice flow to route when the chosen menu action is `route_flow`. Get the voice flow's ID from the [**List flows API**](/docs/api/contact-center/#tag/flows/get/contact_center/flows). -
voice_mail_inbox_idstring— Select a voice mail inbox when the chosen menu action is `leave_voicemail`. Get the voicemail inbox's ID from the [**List Inboxes API**](/docs/api/contact-center/#tag/inboxes/get/contact_center/inboxes).
-
-
play_interval(required)integer— Time, in seconds, to offer menu sets when consumers will be offered the menu, as long as they're still waiting. When this time is less than their estimated wait time, they will be asked right away. Maximum time is less than the maximum wait duration. -
voice_id(required)string, possible values:"Danielle", "Gregory", "Ivy", "Joanna", "Joey", "Justin", "Kendra", "Kevin", "Kimberly", "Matthew", "Ruth", "Salli", "Stephen"— The voice used to play the menu prompts. -
accept_timeoutinteger— Time to accept menu, at 5 second intervals. `0` means accept menu at any time. -
invalid_option_message_custom_audioobject— Play prerecorded audio message to consumer when they press a phone key for invalid menu option.-
custom_audio(required)array— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_type(required)string, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
loop_intervalinteger— Loop play interval, in seconds. Required when `loop_play` is `true`. -
loop_playboolean— Enable loop play based on loop interval time.
Example:
{
"menu_language_code": "en-US",
"voice_id": "Joanna",
"accept_timeout": 10,
"play_interval": 60,
"loop_play": false,
"loop_interval": 120,
"menu_options": [
{
"keypress": "1",
"menu_action": "request_callback",
"play_message": "If you would like to leave a voicemail, press {{keyPress}}.\nDo not edit or remove symbols and text in {{}}, this will play and tell consumer the keypress for the menu action.",
"play_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"route_to_flow_id": "c0SjVYqFTzOKs7wgAXM5cQ",
"voice_mail_inbox_id": "rdc5hgEDTKuEVI7nz0umDg",
"callback_settings": {
"callback_number_type": "queue_default_caller_id",
"callback_confirm_keypress": "#",
"accept_callback_timeout": 10,
"enable_offer_phone_number": false,
"offer_number_message": "We'll call you back using the phone number {{current phone number}}. If you want to use a different number, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now.",
"offer_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_confirm_message": "Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue",
"callback_confirm_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"enable_offer_extension_number": false,
"offer_extension_number_message": "We'll call you back using the phone number {{current phone number}}. If you want to add an extension, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now.",
"offer_extension_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"confirm_extension_number_message": "You entered the extension {{extension number}}. If this is correct, press {{keyPress}} to confirm. Otherwise, enter your extension number and then press {{keyPress}}.",
"confirm_extension_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"outbound_dial_option": "auto_greeting",
"outbound_dial_greeting_message": "Thanks for waiting in the queue. You will be connected to the next available agent shortly.",
"outbound_dial_greeting_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_timeout": 10,
"enable_callback_cancel_message": false,
"callback_cancel_message": "Your callback has been canceled due to high call volumes. Please try calling again.",
"callback_cancel_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_returning_message": "Hello again. You have a callback set up. Press {{keyPress}} to cancel your callback and wait on the line, or hang up to keep your callback request and end this call.",
"callback_returning_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"enable_callback_offer_time": false,
"callback_offer_timezone_id": "America/Los_Angeles",
"callback_offer_time": [
{
"callback_offer_day": "Mon",
"callback_offer_start_time": "09:00",
"callback_offer_end_time": "18:00"
}
],
"enable_callback_return_time": false,
"callback_return_timezone_id": "America/Los_Angeles",
"callback_return_day": [
{
"callback_return_day": "Mon",
"callback_return_start_time": "09:00",
"callback_return_end_time": "18:00"
}
],
"enable_advanced_callback_confirmation": false,
"advanced_callback_confirmation": {
"keypress_voice_message": "1",
"advanced_callback_confirm_message": "Your callback request is confirmed. We will use the phone number {{phoneNumber}} to call you back when it's your turn in the queue. To leave a voice message, press {{keyPress}}. Or hang up to end the call.",
"callback_voice_message_time_limit": 1,
"enable_voice_message_transcription": false,
"callback_voice_message_display_time": 5,
"advanced_callback_confirm_message_with_extension": "Your request for callback is confirmed. We'll call you back at your {{current phone number}} and extension {{extension number}} when it's your turn in the queue. To leave a voice message, press {{keyPress}}, or hang up to end the call.",
"greeting_message": "Please record your voice message after the tone, press {{starKey}} to discard and end call, or press any digit key to save the recording.",
"end_message": "Good bye.",
"save_recording_message": "Save recording message to play.",
"short_recording_message": "Sorry, your recording is too short. Please try again.",
"keypress_listen_recording_message": "Press {{keyPress}} to listen to the voice message.",
"keypress_save_recording_message": "Press {{keyPress}} to save the voice message and end the call.",
"keypress_re_recording_message": "Press {{keyPress}} to re-record your voice message."
}
}
}
],
"invalid_option_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
}
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue menu based interrupt assigned.
Content-Type: application/json
-
accept_timeoutinteger— Time to accept menu, in 5 second intervals. `0` means accept the menu at any time. -
invalid_option_message_custom_audioobject— Play prerecorded audio message to consumer when they press a phone key for an invalid menu option.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
loop_intervalinteger— Loop play interval, in seconds. Required when `loop_play` is `true`. -
loop_playboolean— Enable loop play based on loop interval time. -
menu_language_codestring, possible values:"zh-CN", "zh-TW", "yue-CN", "cmn-CN", "da-DK", "nl-NL", "en-AU", "en-NZ", "en-GB", "en-US", "fr-CA", "fr-FR", "de-DE", "it-IT", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "ru-RU", "es-ES", "es-MX", "es-US", "sv-SE", "tr-TR"— The menu language and voice for default messages for menu and callback prompts. -
menu_optionsarray— A list of menu options for keypresses and detail menu action. Each keypress can only relate to one action.Items:
-
keypress(required)string, possible values:"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "*", "#"— The keypress provided in the menu. -
menu_action(required)string, possible values:"request_callback", "leave_voicemail", "route_flow", "repeat_menu"— The action for selecting the menu when pressing a key. -
callback_settingsobject— Set call back settings when menu action choose as `request_callback`.-
accept_callback_timeoutinteger— Time to accept callback menu, in 5 second intervals. -
callback_cancel_messagestring, default:"Your callback has been canceled due to high call volumes. Please try calling again."— Message sent to notify of callback cancellation. -
callback_cancel_message_custom_audioobject— Play prerecorded audio message about callback cancellation. **Note** Provide either 'callback_cancel_message' or 'callback_cancel_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_confirm_keypressstring, possible values:"#", "*"— Callers use this key to confirm in response to message for a request callback. -
callback_confirm_messagestring, default:"Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue"— Message to returning caller with callback set up. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play the keypress configured in 'callback_confirm_keypress' to the consumer. -
callback_confirm_message_custom_audioobject— Play prerecorded audio message to the returning caller with callback set up. **Note** Provide either 'callback_confirm_message' or 'callback_confirm_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_confirm_messsagestring, default:"Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue"— Message to returning caller with callback set up. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play the keypress configured in 'callback_confirm_keypress' to the consumer. -
callback_number_typestring, possible values:"flow_entry_id", "account_default_caller_id", "queue_default_caller_id"— Callback caller ID number type. -
callback_offer_timearray— Set the day when callbacks will be offered and returned to consumers. Required when `enable_callback_offer_time` is `true`.Items:
-
callback_offer_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— The day callbacks will be offered to consumers. -
callback_offer_end_timestring— End time on the day that callback offer to consumers, between `00:00` and `23:59`. -
callback_offer_start_timestring— Start time on the day that callbacks are offered to consumers, between `00:00` and `23:59`.
-
-
callback_offer_timezone_idstring— Set the [timezone](/docs/api/references/abbreviations/#timezones) when callbacks will be offered and returned to consumers. Required when `enable_callback_offer_time` is `true`. -
callback_return_dayarray— The day when callbacks will be returned to consumers. Required when `enable_callback_return_time` is `true`.Items:
-
callback_return_daystring, possible values:"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"— The day when callbacks will be returned to consumers. -
callback_return_end_timestring— The time range's end time when callbacks will be returned to consumers, between `00:00` and `23:59`. -
callback_return_start_timestring— The time range's start time when callbacks will be returned to consumers, between `00:00` and `23:59`.
-
-
callback_return_timezone_idstring— Set the [timezoneID](/docs/api/references/abbreviations/#timezones) to limit the times when callbacks will be returned to consumers. Required when `enable_callback_return_time` is `true`. -
callback_returning_messagestring, default:"Hello again. You have a callback set up. Press {{keyPress}} to cancel your callback and wait on the line. Or you can hang up to keep your callback request and end this call."— Message with callback setup sent to returning callers. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play to consumer the keypress configured in 'callback_confirm_keypress'. -
callback_returning_message_custom_audioobject— Play prerecorded audio message to returning caller with callback setup. **Note** Provide either 'callback_returning_message' or 'callback_returning_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
callback_timeoutinteger— How long callbacks will remain as tasks in the queue, in seconds -
confirm_extension_number_messagestring, default:"You entered the extension {{extension number}}. If this is correct, press {{keyPress}} to confirm. Otherwise, enter your extension number and then press {{keyPress}}."— Message to ask the caller to confirm the phone number extension. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play the keypress configured in 'callback_confirm_keypress' to the consumer. -
confirm_extension_number_message_custom_audioobject— Play prerecorded audio message asking the caller to confirm the phone number extension. **Note** Provide either 'confirm_extension_number_message' or 'confirm_extension_number_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
enable_callback_cancel_messageboolean— The message sent to consumers if callbacks are canceled. -
enable_callback_offer_timeboolean— Limit the times when callbacks will be offered to consumers. -
enable_callback_return_timeboolean— Limit the times when callbacks will be returned to consumers. -
enable_offer_extension_numberboolean— Lets callers to add an extension to their callback phone number so that callers who don't have a direct line can still be reached directly. -
enable_offer_phone_numberboolean— Allow callers to provide a different callback number. -
offer_extension_number_messagestring, default:"We'll call you back using the phone number {{current phone number}}. If you want to add an extension, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now."— Message to ask the caller to offer a phone number extension. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play the keypress configured in 'callback_confirm_keypress' to the consumer. -
offer_extension_number_message_custom_audioobject— Play prerecorded message asking the caller to give a phone number extension. **Note** Provide either 'offer_extension_number_message' or 'offer_extension_number_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
offer_number_messagestring, default:"We'll call you back using the phone number {{current phone number}}. If you want to use a different number, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now."— The message to play to ask the consumer to offer a callback phone number. Do not edit or remove symbols and text in {{}}. The {{keyPress}} will play the keypress configured in 'callback_confirm_keypress' to the consumer. -
offer_number_message_custom_audioobject— Play prerecorded audio message to consumer asking for a call back phone number. **Note** Provide either 'offer_number_message' or 'offer_number_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
outbound_dial_greeting_messagestring, default:"Thanks for waiting in the queue. You will be connected to the next available agent in a short moment"— Greeting message sent to callers before they are connected to agent. -
outbound_dial_greeting_message_custom_audioobject— Play prerecorded greeting message to callers before they are connected to an agent. **Note** Provider either 'outbound_dial_greeting_message' or 'outbound_dial_greeting_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
outbound_dial_optionstring, possible values:"auto_greeting", "directly_connect"— Choose the outbound method for how callers are connected when they receive a callback.
-
-
play_messagestring— The keypress text message. This tells the consumer the menu action's keypress. Do not edit or remove symbols and text in `{{}}`. -
play_message_custom_audioobject— The prerecorded audio message to play for the keypress. **Note** Provide either 'play_message' or 'play_message_custom_audio'.-
custom_audioarray— Set the custom audio settings for the message will be played to the consumer before selecting a keypress. Currently, 'standard' mode supports a single audio message file. Specify using 'audio_asset_id' only. 'advanced' mode supports up to 7 pre-recorded audio message files. Combine per-recorded audio file 'audio_asset_id' and dynamic variable 'audio_variable', here the variable is for {{keypress}}. For each part, use 'audio_asset_id' or 'audio_variable'. **Advanced mode example** { "order": 1, "audio_asset_id": "asset_play_message_prefix" }, { "order": 2, "audio_variable": "keypress" }, { "order": 3, "audio_asset_id":"asset_play_message_suffix" }Items:
-
order(required)integer— The order to play audio. -
audio_asset_idstring— ID of the audio asset choose to play message to consumer **Note** Provide either `audio_asset_id` or `audio_variable`, but not both. -
audio_variablestring, possible values:"keypress", default:"keypress"— Dynamic variable for advanced mode only. Use `keypress` to announce the keypress for consumer to chooes. **Note** Provide either `audio_asset_id` or `audio_variable`, but not both.
-
-
custom_audio_typestring, possible values:"advanced", "standard", default:"standard"— Select custom audio type. -'standard' - Choose an audio file. The audio prompt must include all words, numbers, and keypress digits as part of the message. Variables cannot be used with this option. -'advanced' - With this option, the audio message can be split into multiple reusable audio parts. Variables are needed. Set up the digits library before using numbers with this option.
-
-
route_to_flow_idstring— Select a voice flow to route when the chosen menu action is `route_flow`. Get the voice flow's ID from [**List flows API**](/docs/api/contact-center/#tag/flows/get/contact_center/flows). -
voice_mail_inbox_idstring— Select a voice mail inbox when the chosen menu action is `leave_voicemail`. Get the voicemail inbox's ID from [**List Inboxes API**](/docs/api/contact-center/#tag/inboxes/get/contact_center/inboxes).
-
-
play_intervalinteger— Time, in seconds, when consumers will be offered the menu, as long as they're still waiting. When this time is less than their estimated wait time, they will be offered the menu right away. Maximum time is less than the maximum wait duration. -
queue_idstring— Contact Center queue identifier. -
voice_idstring, possible values:"Danielle", "Gregory", "Ivy", "Joanna", "Joey", "Justin", "Kendra", "Kevin", "Kimberly", "Matthew", "Ruth", "Salli", "Stephen"— The voice used to play the menu prompts.
Example:
{
"queue_id": "zeYjXoDOS_eV1QmTpj63PQ",
"menu_language_code": "en-US",
"voice_id": "Joanna",
"accept_timeout": 10,
"play_interval": 60,
"loop_play": false,
"loop_interval": 120,
"menu_options": [
{
"keypress": "1",
"menu_action": "request_callback",
"play_message": "If you would like to leave a voicemail, press {{keyPress}}.Do not edit or remove symbols and text in {{}}, this will play and tell consumer the keypress for the menu action.",
"play_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"route_to_flow_id": "c0SjVYqFTzOKs7wgAXM5cQ",
"voice_mail_inbox_id": "rdc5hgEDTKuEVI7nz0umDg",
"callback_settings": {
"callback_number_type": "queue_default_caller_id",
"callback_confirm_keypress": "#",
"accept_callback_timeout": 10,
"enable_offer_phone_number": false,
"offer_number_message": "We'll call you back using the phone number {{current phone number}}. If you want to use a different number, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now.",
"offer_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_confirm_message": "Your request for callback is confirmed. We will use the phone number {{current phone number}} and extension {{extension number}} to call you back when it's your turn in the queue",
"callback_confirm_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"enable_offer_extension_number": false,
"offer_extension_number_message": "We'll call you back using the phone number {{current phone number}}. If you want to add an extension, enter it now and then press {{keyPress}}. Otherwise, please stay on the line or press {{keyPress}} now.",
"offer_extension_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"confirm_extension_number_message": "You entered the extension {{extension number}}. If this is correct, press {{keyPress}} to confirm. Otherwise, enter your extension number and then press {{keyPress}}.",
"confirm_extension_number_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"outbound_dial_option": "auto_greeting",
"outbound_dial_greeting_message": "Thanks for waiting in the queue. You will be connected to the next available agent in a short moment.",
"outbound_dial_greeting_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_timeout": 10,
"enable_callback_cancel_message": false,
"callback_cancel_message": "Your callback has been canceled due to high call volumes. Please try calling again.",
"callback_cancel_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"callback_returning_message": "Hello again. You have a callback set up. Press {{keyPress}} to cancel your callback and wait on the line. Or you can hang up to keep your callback request and end this call.",
"callback_returning_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
},
"enable_callback_offer_time": false,
"callback_offer_timezone_id": "America/Los_Angeles",
"callback_offer_time": [
{
"callback_offer_day": "Mon",
"callback_offer_start_time": "09:00",
"callback_offer_end_time": "18:00"
}
],
"enable_callback_return_time": false,
"callback_return_timezone_id": "America/Los_Angeles",
"callback_return_day": [
{
"callback_return_day": "Mon",
"callback_return_start_time": "09:00",
"callback_return_end_time": "18:00"
}
]
}
}
],
"invalid_option_message_custom_audio": {
"custom_audio_type": "standard",
"custom_audio": [
{
"order": 1,
"audio_asset_id": "-6y2_bOWTBixtxmNywboJg",
"audio_variable": "keypress"
}
]
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Queue channel type is invalid. <br> **Error Code:** `1254` <br> Bucket ID is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not found. **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `3001` <br> Inbox does not exist: {voice_mail_inbox_id}. <br> **Error Code:** `3201` <br> Flow does not exist: {route_to_flow_id}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a queue's interrupt menu configuration
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/interrupt_menu - Tags: Queues
Deletes the interrupt menu configuration for a specific queue. This removes all menu-based interrupt settings including menu options, callback settings, voice prompts, and timing configurations.
This operation only works for voice queues. Other channel types will return an error.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Interrupt menu deleted successfully. No content is returned.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1205` <br> Queue channel type is invalid. <br> **Error Code:** `1254` <br> Bucket ID is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a queue's operating hours
- Method:
GET - Path:
/contact_center/queues/{queueId}/operating_hours - Tags: Queues
Get information about a queue's operating hours.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue_operating_hours:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Operating hours returned.
Content-Type: application/json
-
account_default_business_hour(required)boolean— Whether the queue's business hour is the account default business hour. -
business_hour_id(required)string— The business hours' ID. -
business_hour_name(required)string— The business hours' name. -
account_default_closure_setboolean— Whether the queue's closure set is the account default. -
closure_set_idstring— The closure's ID. -
closure_set_namestring— The closure's name. -
operating_hours_overflow_enabledboolean— Specify consumer handling when the queue is unavailable. -
overflow_to_default_goodbye_messageboolean— Reply system default goodbye message, then disconnect. -
overflow_to_flow_idstring— The flow ID to receive the overflow. -
overflow_to_flow_namestring— The name of flow to receive the overflow. -
overflow_to_goodbye_message_asset_idstring— Reply goodbye message choose from an asset -
overflow_to_goodbye_message_asset_namestring— Reply goodbye message choose from an asset name -
overflow_to_inbox_idstring— The voicemail inbox ID to receive the overflow. -
overflow_to_inbox_namestring— The name voicemail inbox to receive the overflow. -
overflow_to_queue_idstring— The queue ID to receive the overflow. -
overflow_to_queue_namestring— The name of queue to receive the overflow.
Example:
{
"business_hour_id": "66ZjSQ7YTOescnINN_4vog",
"business_hour_name": "Default Business hours",
"closure_set_id": "Ixo-Na0bRfCyQ4q2lAryDw",
"closure_set_name": "Default Closure",
"account_default_business_hour": true,
"account_default_closure_set": true,
"operating_hours_overflow_enabled": true,
"overflow_to_default_goodbye_message": true,
"overflow_to_goodbye_message_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"overflow_to_goodbye_message_asset_name": "message",
"overflow_to_queue_id": "m8IhNvUyTUmx7Jm8h5ZvLQ",
"overflow_to_queue_name": "voice_queue1",
"overflow_to_flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"overflow_to_flow_name": "voice_flow",
"overflow_to_inbox_id": "cMH8RJA0QsyJBCWIFbWfBQ",
"overflow_to_inbox_name": "voice_mail_1"
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update a queue's operating hours
- Method:
PATCH - Path:
/contact_center/queues/{queueId}/operating_hours - Tags: Queues
Update a queue's operating hours.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:patch:queue_operating_hours:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
account_default_business_hourboolean— Whether to use the account's default business hours. When the account's default business hours change, the business hours used by the queue also change. -
account_default_closure_setboolean— Whether to use the account's default closure set. When the account's default closure set changes, the closure set used by the queue also changes. -
operating_hours_business_hour_idstring— The business hours' ID. -
operating_hours_closure_set_idstring— The closure set's ID. -
operating_hours_overflow_enabledboolean— Specify consumer handling when the queue is unavailable. -
overflow_to_default_goodbye_messageboolean— Reply goodbye message, then disconnect. Only one of these overflow fields can be updated each time - `overflow_to_default_goodbye_message`, `overflow_to_goodbye_message_asset_id`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_flow_idstring— The flow ID to receive the overflow. Only one of these overflow fields can be updated each time - `overflow_to_default_goodbye_message`, `overflow_to_goodbye_message_asset_id`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_goodbye_message_asset_idstring— Reply goodbye message choose from an asset. -
overflow_to_inbox_idstring— The voicemail inbox ID to receive the overflow. Only one of these overflow fields can be updated each time - `overflow_to_default_goodbye_message`, `overflow_to_goodbye_message_asset_id`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields. -
overflow_to_queue_idstring— The queue ID to receive the overflow. Only one of these overflow fields can be updated each time - `overflow_to_default_goodbye_message`, `overflow_to_goodbye_message_asset_id`, `overflow_to_queue_id`, `overflow_to_flow_id`, or `overflow_to_inbox_id`. Updating an overflow field will clear out the other overflow fields.
Example:
{
"account_default_business_hour": true,
"operating_hours_business_hour_id": "66ZjSQ7YTOescnINN_4vog",
"account_default_closure_set": true,
"operating_hours_closure_set_id": "Ixo-Na0bRfCyQ4q2lAryDw",
"operating_hours_overflow_enabled": true,
"overflow_to_default_goodbye_message": true,
"overflow_to_goodbye_message_asset_id": "dORBRSTxTN6B0vLJ37Kvnw",
"overflow_to_queue_id": "m8IhNvUyTUmx7Jm8h5ZvLQ",
"overflow_to_flow_id": "psjHGHrHQbaX8Zk7ldc81Q",
"overflow_to_inbox_id": "cMH8RJA0QsyJBCWIFbWfBQ"
}
Responses
Status: 204 **HTTP Status Code:** `204` Operating hours updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List queue recordings
- Method:
GET - Path:
/contact_center/queues/{queueId}/recordings - Tags: Queues
Return a list of all recordings in a queue.
Note Use recording-related APIs to manipulate data whose recording was created after July 18, 2022.
Scopes: contact_center_recording:read:admin,contact_center_recording:read
Granular Scopes: contact_center:read:list_recordings:admin,contact_center:read:list_recordings
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queue recordings returned.
Content-Type: application/json
-
fromstring, format:string— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If unspecified, this parameter returns data from the past 30 days. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
recordingsarray— Information about the recordings.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
channel_typestring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
conference_participantarray— Information about the recording conference participants.Items:
-
contact_idstring— The participant's contact ID. -
contact_namestring— The participant's contact name. -
contact_numberstring— The participant's contact number. -
participant_typestring, possible values:"agent", "customer", "supervisor", "outbound"— The participant's type. -
queue_idstring— The participant's queue ID. -
queue_namestring— The participant's queue name. -
team_idstring— The participant's team ID. -
team_namestring— The participant's team name. -
user_idstring— The participant's user ID. -
user_namestring— The participant's username.
-
-
consumer_namestring— The customer's name. * **Note** This field will be abolished, and the `consumer_name` in `consumers` will be used uniformly. -
consumer_numberstring— The customer's phone number. * **Note** This field will be abolished, and the `consumer_number` in `consumers` will be used uniformly. -
consumersarray— Information about the recording consumers.Items:
-
consumer_namestring— The customer's name. -
consumer_numberstring— The customer's phone number.
-
-
directionstring, possible values:"inbound", "outbound"— The recording's call direction. * `inbound` - Call in. * `outbound` - Call out. -
display_namestring— The user's name. -
download_urlstring— The URL to download the recording. For security purposes, you **must** provide an OAuth access token in the Authorization header to download the recording file using this URL. Example: ```curl --request GET \ --url {download_url} \ --header 'authorization: Bearer {access_token} \ --header 'content-type: application/json' ``` -
engagement_idstring— The engagement event's unique ID. -
exemptionboolean— Whether the recording is exempted from data retention. -
flow_idstring— The recording's flow ID. -
flow_namestring— The recording's flow name. -
owner_idstring— The recording's owner ID, either the queue ID or user ID. -
owner_namestring— The recording's owner name, either the queue name or user name. -
owner_typestring, possible values:"user", "queue"— The recording's owner type. * `user` - This recording belongs to an user. * `queue` - This recording belongs to a queue. -
playback_urlstring— The URL to play the recording. For security purposes, you **must** provide an OAuth access token in the authorization header to play the recording file using this URL. Example: ```curl --request GET --url {playback_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
queue_idstring— The queue's unique ID. -
queue_namestring— The queue's name. -
reason_detailsstring— The recording's data retention exemption reason details. -
recording_durationinteger— The recording's duration, in seconds. -
recording_end_timestring, format:date-time— The date and time when the recording's end time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recording_idstring— The recording's unique ID. -
recording_start_timestring, format:date-time— The date and time when the recording's start time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recording_typestring, possible values:"on_demand", "automatic"— The recording's type. * `on_demand` - Manually trigger recording. * `automatic` - Automatically trigger recording. -
segment_typestring, possible values:"inbound", "conference"— Whether the recording is an inbound recording or a conference recording. -
team_idstring— The team's ID. -
team_namestring— The team's name. -
transcript_urlstring— The URL to download the recording transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. Example: ```curl --request GET --url {transcript_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
user_emailstring— The user's email. -
user_idstring— The user's ID.
-
-
tostring, format:string— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"from": "2023-01-01T00:00:00-08:00",
"to": "2023-01-01T01:00:00-08:00",
"recordings": [
{
"recording_id": "ghyetrjj_sdfsdgfkdjfl111",
"cc_queue_id": "smyko04pSCWt9zLI0nn3AQ",
"queue_name": "voice",
"recording_duration": 150,
"download_url": "https://example.com/contact_center/recording/download/01bdb222-9984-4f41-8141-2f760cb398aa?type=voice",
"transcript_url": "https://example.com/contact_center/recording/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"playback_url": "https://example.com/contact_center/recording/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"recording_start_time": "2023-01-01T08:00:00Z",
"recording_end_time": "2023-01-01T09:00:00Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jill",
"user_email": "jcill@example.com",
"recording_type": "automatic",
"channel": "voice",
"direction": "outbound",
"owner_id": "auiketrjj_2342353fsewkdjfl",
"owner_name": "voice",
"owner_type": "queue",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_name": "voice",
"flow_id": "fsdfsd4oippe0ffewcbhjk",
"consumers": [
{
"consumer_name": "Jill",
"consumer_number": "+12058945728"
}
],
"exemption": true,
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"conference_participant": [
{
"user_id": "HljBAYkdSzqk_eXkXyEV7g",
"user_name": "Jill Doe",
"queue_id": "y5yK894sT4ixNaO__FO_Jg",
"queue_name": "Jill Doe's queue",
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"team_name": "Jill Doe's team",
"contact_id": "edlbknHGRjq35Y5WYxb7_A",
"contact_name": "Jill Doe",
"contact_number": "+12058945728",
"participant_type": "agent"
}
],
"segment_type": "conference",
"reason_details": "Compliance review.",
"team_name": "Jill Doe's team"
}
]
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1204` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete queue recordings
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/recordings - Tags: Queues
Delete all recordings in a queue.
Note Use recording-related APIs to manipulate data whose recording creation time is after 2022-07-18.
Scopes: contact_center_recording:write:admin
Granular Scopes: contact_center:delete:recording:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue recordings deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId <br> **Error Code:** `2803` <br> Queue recordings does not exist: $queueId. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `2820` <br> You cannot delete this recording because it is exempt from retention policy due to legal hold. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Delete an attendee from a scheduled callback event
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/scheduled_callbacks/attendees/{attendeeId} - Tags: Queues
Remove an attendee from an event slot on a scheduled callback. If the attendee is the last remaining participant in that event, the entire event is deleted.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue:admin
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
cancelation_reasonstring— Reason for cancelation.
Example:
{
"cancelation_reason": "I'm feeling unwell and need to rest."
}
Responses
Status: 204 **HTTP Status Code:** `204` Scheduled callback for attendee canceled.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad Request. **Error Code:** `1503` <br> Scheduler is not set up. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Forbidden.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not found. **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br> **Error Code:** `1504` <br> Attendee not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Schedule a callback on a queue
- Method:
POST - Path:
/contact_center/queues/{queueId}/scheduled_callbacks/events - Tags: Queues
Schedule a callback on a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue:admin
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
attendees(required)array— An array of attendees.Items:
-
email(required)string, format:email— The attendee's email address. -
first_name(required)string— The attendee's first name. -
last_name(required)string— The attendee's last name. -
phone_number(required)string— The attendee's phone number, in E.164 format.
-
-
start_time(required)string, format:date-time— The `start_time` of the slot selected. Should match the `start_time` of the selected slot returned by the [Available slots API](/docs/api/contact-center/#tag/queues/GET/contact_center/queues/{queueId}/scheduled_callbacks/supportive_slots).
Example:
{
"start_time": "2025-06-18T15:00:00Z",
"attendees": [
{
"first_name": "Jill",
"last_name": "Chill",
"email": "jchill@example.com",
"phone_number": "+1 555-555-5555"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Callback Scheduled
Content-Type: application/json
-
attendeesarray— An array of attendees.Items:
-
attendee_idstring— The attendee's ID. -
emailstring— The attendee's email address. -
first_namestring— The attendee's first name. -
last_namestring— The attendee's last name. -
phone_numberstring— The attendee's phone number, in E.164 format.
-
Example:
{
"attendees": [
{
"first_name": "Jill",
"last_name": "Chill",
"email": "jchill@example.com",
"phone_number": "+1 555-555-5555",
"attendee_id": "zeYjXoDOS_eV1QmTpj63PQ"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad request. **Error Code:** `300` <br> Invalid `dateTime` format. <br> **Error Code:** `300` <br> Must be a well-formed email address. <br> **Error Code:** `620003` <br> Invalid phone number. <br> **Error Code:** `400` <br> Requested slot in the past. <br> **Error Code:** `400` <br> Requested slot does not exist. <br> **Error Code:** `400` <br> Requested duration changed. <br> **Error Code:** `55008` <br> Duplicated booking request. <br> **Error Code:** `1503` <br> Scheduler is not set up. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Forbidden.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not found. **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List a queue's scheduled callbacks availability
- Method:
GET - Path:
/contact_center/queues/{queueId}/scheduled_callbacks/supportive_slots - Tags: Queues
List scheduled callbacks booking slots for a scheduler set up under a queue.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:read:queue:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Return a list of booking spots.
Content-Type: application/json
-
booking_daysarray— List of days that contain booking spots.Items:
-
slot_datestring, format:date— Date of the day. -
slotsarray— List of spots.Items:
-
availability_statusstring, possible values:"available", "unavailable"— Whether the time slot is available to book. -
available_countinteger— Number of booking spots available for the specific time slot. -
start_timestring, format:date-time— The booking slot's start time.
-
-
-
slot_durationinteger— Duration for every booking spot, in minutes. -
timezonestring— Time zone used to allocate booking spots to days.
Example:
{
"timezone": "America/Los_Angeles",
"slot_duration": 15,
"booking_days": [
{
"slot_date": "2025-06-19",
"slots": [
{
"available_count": 2,
"start_time": "2025-06-18T15:00:00Z",
"availability_status": "available"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad request. **Error Code:** `300` <br> `min_time` must come before `max_time`. <br> **Error Code:** `300` <br> Time range cannot exceed 45 days. <br> **Error Code:** `300 ` <br> Invalid `dateTime` format. <br> **Error Code:** `300` <br> Invalid time zone format. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `1503` <br> Scheduler is not set up. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Forbidden.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List queue supervisors
- Method:
GET - Path:
/contact_center/queues/{queueId}/supervisors - Tags: Queues
Retrieve the list of a queue's assigned Contact Center users with supervisor persona assignment to the Contact Center queue.
Scopes: contact_center_queue:read:admin
Granular Scopes: contact_center:delete:queue_supervisor:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Queue supervisors list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
supervisorsarray— Information about the supervisors.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as **Lunch**. -
teamsarray— The teams the user is assigned to.Items:
-
team_idstring— The ID of the team. -
team_namestring— The display name of the team.
-
-
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"supervisors": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"status_id": "1",
"status_name": "Offline",
"user_access": "active",
"teams": [
{
"team_id": "qlU902FoTD-dFi9QnCdZhw",
"team_name": "Support Team"
}
],
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1244` <br> More than one matching queue found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Assign queue supervisors
- Method:
POST - Path:
/contact_center/queues/{queueId}/supervisors - Tags: Queues
Assign users to a Contact Center queue as supervisor persona.
The API response will contain only those users confirmed to have been assigned to the queue, and ignores any unrecognized user ID and users already assigned to the queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_supervisor:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue supervisors assigned. Can be empty.
Content-Type: application/json
-
supervisorsarray— Information about the supervisors.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as "Lunch". -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"supervisors": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"status_id": "1",
"status_name": "Offline",
"user_access": "active"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign a queue supervisor
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/supervisors/{userId} - Tags: Queues
Remove a supervisor from a Contact Center queue. The specified user will be unassigned from the queue and will no longer have supervisory access to engagements routed through it. The user must be currently assigned as a supervisor to the queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_supervisor:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Queue supervisor removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {0}. <br> **Error Code:** `1001` <br> User does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign queue teams
- Method:
POST - Path:
/contact_center/queues/{queueId}/teams - Tags: Queues
Add teams to a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:write:queue_team:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
team_ids(required)array— The team's ID to assign to the queue, up to a maximum of 10 teams per call.Items:
string
Example:
{
"team_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Queue teams assigned.
Content-Type: application/json
-
teamsarray— Information about the successful assigned teams.Items:
-
team_idstring— The team's ID. -
team_namestring— The team's name.
-
Example:
{
"teams": [
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Example team"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1215` <br> Teams feature is not enabled. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br> **Error Code:** `1216` <br> Teams does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Unassign queue teams
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/teams - Tags: Queues
Remove teams from a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_team:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
team_ids(required)array— The team's ID to unassign from the queue.Items:
string— The team's ID.
Example:
{
"team_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Queue teams removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1215` <br> Teams feature is not enabled. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign a queue team
- Method:
DELETE - Path:
/contact_center/queues/{queueId}/teams/{teamId} - Tags: Queues
Remove a team from a queue.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:delete:queue_team:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` Queue team removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1215` <br> Teams feature is not enabled. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br> **Error Code:** `1216` <br> Team does not exist: $teamId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update engagement Real-Time Media Streams (RTMS) app status
- Method:
PUT - Path:
/contact_center/{engagementId}/rtms_app/status - Tags: RTMS
Update the RTMS status for a specific engagement. Contact Center allows changing status [start, pause, resume, stop] for RTMS at the engagement level.
Prerequisites:
- The app has a media scope assigned in the Zoom Marketplace.
- The app has an OpenAPI scope assigned in the Zoom Marketplace.
- The app has queues assigned in the Contact Center web portal.
- The engagement must be in progress.
Scopes: contact_center_rtms:write:admin
Granular Scopes: contact_center:update:engagement_rtms_app_status,contact_center:update:engagement_rtms_app_status:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
actionstring, possible values:"start", "stop", "pause", "resume"— The engagement's RTMS app status. * `start` - Start an RTMS app. * `stop` - Stop an ongoing RTMS app. * `pause` - Pause an ongoing RTMS app. * `resume` - Resume a paused RTMS app. -
settingsobject— Engagement's RTMS app settings.-
client_id(required)string— The unique identifier of the authorized app configured in MP.
-
Example:
{
"action": "start",
"settings": {
"client_id": "a_Zu0X_FVBUycmEi9ms5hg"
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Engagement's RTMS app status updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4100` <br> Engagement {engagementId} is not yet ready for streaming. <br> **Error Code:** `4101` <br> Action {action} not valid for {engagementId}. Streaming is already in the requested state. <br> **Error Code:** `4102` <br> Action {action} is invalid. Engagement is in {state}. <br> **Error Code:** `4103` <br> Invalid app {clientId} for engagement {engagementId}. <br> **Error Code:** `4105` <br> Invalid streaming command. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `4106` <br> The current engagement does not support the RTMS app feature. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: {engagementId}. <br> **Error Code:** `20006` <br> Account not found. <br> **Error Code:** `4109` <br> The system could not find the session for the engagement. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `4111` <br> There was a problem processing this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error **Error Code:** `4107` <br> There was a problem processing this request. <br>
List engagement recordings
- Method:
GET - Path:
/contact_center/engagements/{engagementId}/recordings - Tags: Recordings
Return a list of all of an engagement's recordings.
Note: Use recording-related APIs to manipulate data whose recording was created after July 18, 2022.
Scopes: contact_center_recording:read:admin
Granular Scopes: contact_center:read:list_recordings:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Engagement recordings returned.
Content-Type: application/json
-
fromstring, format:string— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If unspecified, this parameter returns data from the past 30 days. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
recordingsarray— Information about the recordings.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
channel_typestring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
conference_participantarray— Information about the recording conference participants.Items:
-
contact_idstring— The participant's contact ID. -
contact_namestring— The participant's contact name. -
contact_numberstring— The participant's contact number. -
participant_typestring, possible values:"agent", "customer", "supervisor", "outbound"— The participant's type. -
queue_idstring— The participant's queue ID. -
queue_namestring— The participant's queue name. -
team_idstring— The participant's team ID. -
team_namestring— The participant's team name. -
user_idstring— The participant's user ID. -
user_namestring— The participant's username.
-
-
consumer_namestring— The customer's name. * **Note** This field will be deprecated, and the `consumer_name` in `consumers` will be used uniformly. -
consumer_numberstring— The customer's phone number. * **Note** This field will be deprecated, and the `consumer_number` in `consumers` will be used uniformly. -
consumersarray— Information about the recording consumers.Items:
-
consumer_namestring— The customer's name. -
consumer_numberstring— The customer's phone number.
-
-
directionstring, possible values:"inbound", "outbound"— The recording's call direction. * `inbound` - Call in. * `outbound` - Call out. -
display_namestring— The user's name. -
download_urlstring— The URL to download the recording. For security purposes, you **must** provide an OAuth access token in the Authorization header to download the recording file using this URL. Example: ``` curl --request GET \ --url {download_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
engagement_idstring— The engagement event's unique ID. -
exemptionboolean— To specify whether the recording is exempted from data retention. -
flow_idstring— The recording's flow ID. -
flow_namestring— The recording's flow name. -
owner_idstring— The recording's owner ID, either the queue ID or user ID. -
owner_namestring— The recording's owner name, either the queue name or user name. -
owner_typestring, possible values:"user", "queue"— The recording's owner type. * `user` - This recording belongs to an userl * `queue` - This recording belongs to a queue. -
playback_urlstring— The URL to play the recording. For security purposes, you **must** provide an OAuth access token in the authorization header to play the recording file using this URL. Example: ``` curl --request GET \ --url {playback_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
queue_idstring— The queue's unique ID. -
queue_namestring— The queue's name. -
reason_detailsstring— The recording's data retention exemption reason details. -
recording_durationinteger— The recording's duration in seconds. -
recording_end_timestring, format:date-time— The date and time when the recording's end time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
recording_idstring— The recording's unique ID. -
recording_start_timestring, format:date-time— The date and time when the recording's start time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
recording_typestring, possible values:"on_demand", "automatic"— The recording's type. * `on_demand` - Manually trigger recording. * `automatic` - Automatically trigger recording. -
segment_typestring, possible values:"inbound", "conference"— Whether the recording is an inbound recording or a conference recording. -
team_idstring— The team's ID. -
team_namestring— The team's name. -
transcript_urlstring— The URL to download the recording transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. Example: ``` curl --request GET \ --url {transcript_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
user_emailstring— The user's email. -
user_idstring— The user's ID.
-
-
tostring, format:string— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"from": "2023-01-01T00:00:00-08:00",
"to": "2023-01-01T01:00:00-08:00",
"recordings": [
{
"recording_id": "ghyetrjj_sdfsdgfkdjfl111",
"cc_queue_id": "smyko04pSCWt9zLI0nn3AQ",
"queue_name": "voice",
"recording_duration": 150,
"download_url": "https://example.com/contact_center/recording/download/01bdb222-9984-4f41-8141-2f760cb398aa?type=voice",
"transcript_url": "https://example.com/contact_center/recording/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"playback_url": "https://example.com/contact_center/recording/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"recording_start_time": "2023-01-01T08:00:00Z",
"recording_end_time": "2023-01-01T09:00:00Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jill",
"user_email": "jchill@example.com",
"recording_type": "automatic",
"channel": "voice",
"direction": "outbound",
"owner_id": "auiketrjj_2342353fsewkdjfl",
"owner_name": "voice",
"owner_type": "queue",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_name": "voice",
"flow_id": "fsdfsd4oippe0ffewcbhjk",
"consumers": [
{
"consumer_name": "Jill",
"consumer_number": "+12058945728"
}
],
"exemption": true,
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"conference_participant": [
{
"user_id": "HljBAYkdSzqk_eXkXyEV7g",
"user_name": "Jill Doe",
"queue_id": "y5yK894sT4ixNaO__FO_Jg",
"queue_name": "Jill Doe's queue",
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"team_name": "Jill Doe's team",
"contact_id": "edlbknHGRjq35Y5WYxb7_A",
"contact_name": "Jill Doe",
"contact_number": "+12058945728",
"participant_type": "agent"
}
],
"segment_type": "conference",
"reason_details": "Compliance review.",
"team_name": "Jill Doe's team"
}
]
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2805` <br> Engagement recordings does not exist or you do not have the corresponding operation authority: $engagementId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete engagement recordings
- Method:
DELETE - Path:
/contact_center/engagements/{engagementId}/recordings - Tags: Recordings
Delete all recordings in a given engagement.
Note: Use recording-related APIs to manipulate data whose recording creation time is after 2022-07-18.
Scopes: contact_center_recording:write:admin
Granular Scopes: contact_center:delete:recording:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Engagement recordings deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2805` <br> Engagement recordings does not exist: $engagementId. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `2820` <br> You cannot delete this recording because it is exempt from retention policy due to legal hold. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List recordings
- Method:
GET - Path:
/contact_center/recordings - Tags: Recordings
Return a list of available recordings.
Note Use recording-related APIs to manipulate data whose recording was created after July 18, 2022.
Scopes: contact_center_recording:read:admin
Granular Scopes: contact_center:read:list_recordings:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Recordings returned
Content-Type: application/json
-
fromstring, format:string— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If unspecified, this parameter returns data from the past 30 days. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
recordingsarray— Information about the recordings.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
channel_typestring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
conference_participantarray— Information about the recording conference participants.Items:
-
contact_idstring— The participant's contact ID. -
contact_namestring— The participant's contact name. -
contact_numberstring— The participant's contact number. -
participant_typestring, possible values:"agent", "customer", "supervisor", "outbound"— The participant's type. -
queue_idstring— The participant's queue ID. -
queue_namestring— The participant's queue name. -
team_idstring— The participant's team ID. -
team_namestring— The participant's team name. -
user_idstring— The participant's user ID. -
user_namestring— The participant's username.
-
-
consumer_namestring— The customer's name. * **Note** This field will be abolished, and the `consumer_name` in `consumers` will be used uniformly. -
consumer_numberstring— The customer's phone number. * **Note** This field will be abolished, and the `consumer_number` in `consumers` will be used uniformly. -
consumersarray— Information about the recording consumers.Items:
-
consumer_namestring— The customer's name. -
consumer_numberstring— The customer's phone number.
-
-
directionstring, possible values:"inbound", "outbound"— The recording's call direction. * `inbound` - Call in. * `outbound` - Call out. -
display_namestring— The user's name. -
download_urlstring— The URL to download the recording. For security purposes, you **must** provide an OAuth access token in the Authorization header to download the recording file using this URL. Example: ``` curl --request GET \ --url {download_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
engagement_idstring— The engagement event's unique ID. -
exemptionboolean— Whether the recording is exempted from data retention. -
flow_idstring— The recording's flow ID. -
flow_namestring— The recording's flow name. -
owner_idstring— The recording's owner ID, either the queue ID or user ID. -
owner_namestring— The recording's owner name, either thequeue name or user name. -
owner_typestring, possible values:"user", "queue"— The recording's owner type. * `user` - This recording belongs to a user. * `queue` - This recording belongs to a queue. -
playback_urlstring— The URL to play the recording. For security purposes, you **must** provide an OAuth access token in the authorization header to play the recording file using this URL. Example: ``` curl --request GET \ --url {playback_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
queue_idstring— The queue's unique ID. -
queue_namestring— The queue's name. -
reason_detailsstring— The recording's data retention exemption reason details. -
recording_durationinteger— The recording's duration in seconds. -
recording_end_timestring, format:date-time— The date and time when the recording's end time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
recording_idstring— The recording's unique ID. -
recording_start_timestring, format:date-time— The date and time when the recording's start time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
recording_typestring, possible values:"on_demand", "automatic"— The recording's type. * `on_demand` - Manually trigger recording. * `automatic` - Automatically trigger recording. -
segment_typestring, possible values:"inbound", "conference"— Whether the recording is an inbound recording or a conference recording. -
team_idstring— The team's ID. -
team_namestring— The team's name. -
transcript_urlstring— The URL to download the recording transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. Example: ``` curl --request GET \ --url {transcript_url} \ --header 'authorization: Bearer {access_token}' \ --header 'content-type: application/json' ``` Note: The URL may be a redirect. In that case, use `curl --location` to follow redirects or use another tool, like Postman. -
user_emailstring— The user's email. -
user_idstring— The user's ID.
-
-
tostring, format:string— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"from": "2023-01-01T00:00:00-08:00",
"to": "2023-01-01T01:00:00-08:00",
"recordings": [
{
"recording_id": "ghyetrjj_sdfsdgfkdjfl111",
"cc_queue_id": "smyko04pSCWt9zLI0nn3AQ",
"queue_name": "voice",
"recording_duration": 150,
"download_url": "https://example.com/contact_center/recording/download/01bdb222-9984-4f41-8141-2f760cb398aa?type=voice",
"transcript_url": "https://example.com/contact_center/recording/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"playback_url": "https://example.com/contact_center/recording/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"recording_start_time": "2023-01-01T08:00:00Z",
"recording_end_time": "2023-01-01T09:00:00Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Tom",
"user_email": "xxxx@example.com",
"recording_type": "automatic",
"channel": "voice",
"direction": "outbound",
"owner_id": "auiketrjj_2342353fsewkdjfl",
"owner_name": "voice",
"owner_type": "queue",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_name": "voice",
"flow_id": "fsdfsd4oippe0ffewcbhjk",
"consumers": [
{
"consumer_name": "Jill",
"consumer_number": "+12058945728"
}
],
"exemption": true,
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"conference_participant": [
{
"user_id": "HljBAYkdSzqk_eXkXyEV7g",
"user_name": "Jill Doe",
"queue_id": "y5yK894sT4ixNaO__FO_Jg",
"queue_name": "Jill Doe's queue",
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"team_name": "Jill Doe's team",
"contact_id": "edlbknHGRjq35Y5WYxb7_A",
"contact_name": "Jill Doe",
"contact_number": "+12058945728",
"participant_type": "agent"
}
],
"segment_type": "conference",
"reason_details": "Compliance review.",
"team_name": "Jill Doe's team"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete a recording
- Method:
DELETE - Path:
/contact_center/recordings/{recordingId} - Tags: Recordings
Delete a selected recording.
Note: Use recording-related APIs to manipulate data whose recording creation time is after 2022-07-18.
Scopes: contact_center_recording:write:admin
Granular Scopes: contact_center:delete:recording:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Recording deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2801` <br> Recording does not exist: $recordingId. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `2820` <br> You cannot delete this recording because it is exempt from retention policy due to legal hold. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List regions
- Method:
GET - Path:
/contact_center/regions - Tags: Regions
Get information about all available regions.
Scopes: contact_center_region:read:admin
Granular Scopes: contact_center:read:list_regions:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Region list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
regionsarray— Information about the regions.Items:
-
is_main_regionboolean— Whether this region is the main region. -
last_modified_timestring, format:date-time— The date and time when the asset was last modified. -
region_idstring— The region's ID. -
region_namestring— The region's name. -
sip_zone_idstring— The region SIP zone's ID. -
sip_zone_namestring— The region SIP zone's name. -
users_countinteger— The number of users assigned to region.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"regions": [
{
"region_id": "36c8dc7c-695f-11ed-a081-0a514d46f86b",
"region_name": "Main Region",
"is_main_region": true,
"sip_zone_id": "AfgzMEweSQ6tqzC8jhYJ2A",
"sip_zone_name": "zccsipzone",
"users_count": 20,
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a region
- Method:
POST - Path:
/contact_center/regions - Tags: Regions
Create a new region.
Scopes: contact_center_region:write:admin
Granular Scopes: contact_center:write:region:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
region_namestring— The region's name. -
sip_zone_idstring— The region SIP zone's ID.
Example:
{
"region_name": "Customer region",
"sip_zone_id": "AfgzMEweSQ6tqzC8jhYJ2A"
}
Responses
Status: 200 **HTTP Status Code:** `201` Region created.
Content-Type: application/json
-
region_idstring— The region's ID. -
region_namestring— The region's name. -
sip_zone_idstring— The region SIP zone's ID.
Example:
{
"region_name": "Customer region",
"region_id": "6c8dc7c-695f-11ed-a081-0a514d46f86b",
"sip_zone_id": "AfgzMEweSQ6tqzC8jhYJ2A"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get a region
- Method:
GET - Path:
/contact_center/regions/{regionId} - Tags: Regions
Get information about a region.
Scopes: contact_center_region:read:admin
Granular Scopes: contact_center:read:region:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Region returned.
Content-Type: application/json
-
is_main_regionboolean— Whether this region is the main region. -
region_idstring— The region's ID. -
region_namestring— The region's name. -
sip_zone_idstring— The region SIP zone's ID. -
sip_zone_namestring— The region SIP zone's ID.
Example:
{
"region_id": "36c8dc7c-695f-11ed-a081-0a514d46f86b",
"region_name": "Main Region",
"sip_zone_id": "AfgzMEweSQ6tqzC8jhYJ2A",
"sip_zone_name": "zccsipzone",
"is_main_region": true
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3807` <br> More than one matching region found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a region
- Method:
DELETE - Path:
/contact_center/regions/{regionId} - Tags: Regions
Delete a site and move its members to another region.
Scopes: contact_center_region:write:admin
Granular Scopes: contact_center:delete:region:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Region deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3802` <br> The main region cannot be deleted. <br> **Error Code:** `3803` <br> The `regionId` and `move_to_region_id` can't be the same. <br> **Error Code:** `3806` <br> The `move_to_region_id`'s region has a misconfigured SIP zone country. <br> **Error Code:** `3807` <br> More than one matching region found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3801` <br> Region does not exist: {regionId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a region
- Method:
PATCH - Path:
/contact_center/regions/{regionId} - Tags: Regions
Update information for a region.
Scopes: contact_center_region:write:admin
Granular Scopes: contact_center:udpate:region:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
region_namestring— The region's name. -
sip_zone_idstring— The region SIP zone's ID.
Example:
{
"region_name": "Customer region",
"sip_zone_id": "AfgzMEweSQ6tqzC8jhYJ2A"
}
Responses
Status: 204 **HTTP Status Code:** `204` Region updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3807` <br> More than one matching region found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List a region's users
- Method:
GET - Path:
/contact_center/regions/{regionId}/users - Tags: Regions
Retrieve the list of a region's assigned Contact Center users.
Scopes: contact_center_region:read:admin
Granular Scopes: contact_center:read:list_region_users:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` The region's Contact Center users.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all records available across pages. -
usersarray— Contact Center users assigned to the region.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `400` <br> Region is not enabled for this account: $accountId. <br> **Error Code:** `3807` <br> More than one matching region found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1017` <br> Region does not exist: $regionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign users to a region
- Method:
POST - Path:
/contact_center/regions/{regionId}/users - Tags: Regions
Assign users to a region.
Scopes: contact_center_region:write:admin
Granular Scopes: contact_center:write:region_user:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"IGTRVt3gQ2i-WjoUIjeZxw"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Users assigned.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `400` <br> Region is not enabled for this account: $accountId. <br> **Error Code:** `3807` <br> More than one matching region found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1017` <br> Region does not exist: $regionId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List agent leg reports
- Method:
GET - Path:
/contact_center/analytics/agents/leg_metrics - Tags: Reports V1 (Legacy)
Generate a list of agent's leg reports.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:agent_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Agent's leg reports list returned.
Content-Type: application/json
-
fromstring— The start time and date. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The call's [timezone ID](/docs/api/references/abbreviations/#timezones). The default is `UTC`. -
tostring— The end time and date. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided. -
total_recordsinteger— The total number of all the records available across pages. -
usersarray— Information about the agent's leg reports.Items:
-
display_namestring— The agent's name. -
leg_metricsarray— Details about the leg reports of the current agent.Items:
-
agent_end_timestring— The agent leg end time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided. -
agent_first_response_durationnumber— The amount of time it takes for an agent working a messaging channel to send the first message to a customer, in seconds. -
agent_offeredinteger— The number of calls are offered to current agent. -
agent_start_timestring— The agent leg start time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when a timezone offset was provided. -
cc_queue_idstring— The Contact Center queue's ID. -
channelstring, possible values:"voice", "video", "messaging", "email"— The task's channel. -
channel_sourcestring, possible values:"in_app_chat", "web_chat", "sms", "facebook_messenger", "whatsapp", "instagram"— The channel's source. -
conference_countinteger— The number of conferences the agent entered. -
conference_durationnumber— The amount of time spent on conferences, including multiple confernces, in seconds. -
conversation_durationnumber— The amount of time an agent spent in active conversation with an engagement for any channel, in seconds. -
direct_transferboolean— The indicator to determine if an agent initiated a direct transfer. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
engagement_idstring— The engagement's ID -
handle_durationnumber— The amount of time an agent spent actively working an engagement, in seconds. -
handled_engagementboolean— The indicator to determine if an agent handled an agent offer. -
hold_countinteger— The number of times that the agent places a consumer on hold. -
hold_durationnumber— The total amount of time that the agent placed a consumer on hold, in seconds. -
queue_namestring— The queue's name. -
refused_engagementboolean— The indicator to determine if an agent missed or declined an agent offer. -
ring_durationnumber— The amount of time it takes for an agent to answer the engagement, in seconds. -
transferred_completedinteger— The number of transfers an agent completed, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels with no distinction between warm and direct transfers. -
transferred_initiatedinteger— The number of transfers an agent initiated, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels with no distinction between warm and direct transfers. -
warm_conferenceinteger— The number of warm conferences triggered by the agent. -
warm_conference_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in seconds. -
warm_transfer_completedinteger— The number of engagements an agent answered and then warm transferred with another participant and then fully transferred the engagements. -
warm_transfer_durationnumber— The amount of time spent on warm transfers, in seconds. -
warm_transfer_initiatedinteger— The number of engagements an agent answered and then warm transferred with another participant with or without fully transferring the engagement. -
wrap_up_durationnumber— The amount of time agents spent completing engagement wrap-up, in seconds.
-
-
user_emailstring— The agent's email. -
user_idstring— The agent's ID.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"users": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "joe.chill",
"user_email": "joe.chill@example.com",
"leg_metrics": [
{
"channel": "messaging",
"channel_source": "in_app_chat",
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"cc_queue_id": "Ql3qxUWXSHes4PmcOmzyOg",
"queue_name": "agentQueue",
"agent_offered": 1,
"refused_engagement": false,
"handled_engagement": true,
"handle_duration": 90,
"agent_first_response_duration": 1,
"ring_duration": 8,
"conversation_duration": 80,
"hold_count": 0,
"hold_duration": 0,
"warm_conference": 1,
"warm_conference_duration": 10,
"conference_count": 1,
"conference_duration": 10,
"warm_transfer_initiated": 1,
"warm_transfer_completed": 1,
"warm_transfer_duration": 30,
"direct_transfer": false,
"transferred_initiated": 1,
"transferred_completed": 1,
"wrap_up_duration": 10,
"disposition_id": "TaAGy_e7QgyPPAyDwGkl3Q",
"disposition_name": "disposition1",
"agent_start_time": "2020-02-11T05:39:50Z",
"agent_end_time": "2020-02-11T05:39:56Z"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in `yyyy-mm-dd` format, or ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br> **Error Code:** `300` <br> Invalid field. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List agent's status history reports
- Method:
GET - Path:
/contact_center/analytics/agents/status_history - Tags: Reports V1 (Legacy)
Generate a list of an agent's status history reports.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:agent_status_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Agent's status history reports list returned.
Content-Type: application/json
-
fromstring, format:date-time— The start date and time of the returned data. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
statusesarray— Information about the agent's status history reports.Items:
-
display_namestring— The agent's name. -
durationinteger, format:int64— The agent's status-changed duration, in seconds. -
end_timestring— The date and time when the status ended. Format: `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm` (matching the input format when timezone offset was provided). -
occupied_engagement_idstring— The engagement's ID when the agent status is occupied. -
occupied_engagementsarray— The engagements that the agent has while in the occupied statusItems:
-
cc_queue_idstring— The queue's ID. -
engagement_idstring— The engagement's ID. -
queue_namestring— The queue's version.
-
-
occupied_queue_idstring— The queue's ID when the agent status is occupied. -
occupied_queue_namestring— The queue's name when the agent status is occupied. -
start_timestring— The date and time when the status started. Format: `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm` (matching the input format when timezone offset was provided). -
status_idstring— The status's ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied", "string"— The status's name. * Offline * Ready * Not Ready * Occupied * A custom user status, such as "Lunch" or "Out on Monday". -
sub_status_idstring— The sub status's ID. -
sub_status_namestring, possible values:"Inbound", "Transferring in", "Wrapping up", "Holding", "Transferring out", "Taking Over", "Monitoring", "Barging", "Whispering", "Outbound", "string"— The sub status's name. * Inbound * Transferring in * Wrapping up * Holding * Transferring out * Taking over * Monitoring * Barging * Whispering * Outbound * A custom sub status, such as "Break" or "Out on Monday". -
user_idstring— The agent's ID.
-
-
timezonestring— The timezone used for the query. When the request used `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format, this reflects the offset from the input. Otherwise, it reflects the `timezone` parameter value or the default `UTC`. -
tostring, format:date-time— The end date and time of the returned data. Format matches the `from` field. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"statuses": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"status_id": "1",
"occupied_engagements": [
{
"engagement_id": "zeYjXoDOS_eV1QmTpj63PQ",
"cc_queue_id": "beGjiO3_TK2rxi5fh2Zv7A",
"queue_name": "Demo"
}
],
"status_name": "Not Ready",
"sub_status_id": "101",
"sub_status_name": "Inbound",
"start_time": "2022-07-20T14:00:00-08:00",
"end_time": "2022-07-20T14:15:00-08:00",
"duration": 1
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in yyyy-mm-dd or ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'). <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br> **Error Code:** `1001` <br> User does not exist: $userId. <br> **Error Code:** `1101` <br> Status does not exist: $statusId. <br> **Error Code:** `1102` <br> Sub status does not exist: $subStatusId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List agent's time sheet reports
- Method:
GET - Path:
/contact_center/analytics/agents/time_sheets - Tags: Reports V1 (Legacy)
Generate a list of an agent's time sheet reports.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:agent_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Agent's time sheet reports list returned.
Content-Type: application/json
-
agentsarray— Information about the agent's time sheet reports.Items:
-
average_video_call_talking_durationinteger, format:int64— The average video call duration, in seconds. -
average_wrap_up_durationinteger, format:int64— The average wrap-up call duration, in seconds. -
display_namestring— The agent's name. -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
inbound_average_voice_call_talking_durationinteger, format:int64— The average voice call duration, in seconds. -
not_ready_durationinteger, format:int64— The total not-ready status time, in seconds. -
not_ready_percentageinteger, format:int32— The percentage of not ready status. -
occupied_durationinteger, format:int64— The total occupied-status time, in seconds. -
occupied_percentageinteger, format:int32— The occupied-status percentage. -
offline_durationinteger, format:int64— The total offline-status time, in seconds. -
online_durationinteger, format:int64— The total online-status time, in seconds. -
ready_durationinteger, format:int64— The total ready status time, in seconds. -
ready_percentageinteger, format:int32— The percentage of ready status. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
total_inbound_voice_callinteger, format:int64— The total number of inbound voice calls. -
total_inbound_voice_call_durationnumber, format:double— The total inbound voice calls duration, in seconds. -
total_outbound_voice_callinteger, format:int64— The total number of outbound voice calls. -
total_outbound_voice_call_durationnumber, format:double— The total outbound voice calls duration, in seconds. -
user_idstring— The agent's ID.
-
-
fromstring, format:date-time— The start time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, return data from the past 24 hours. -
next_page_tokenstring— Use the next-page token to paginate through large result sets. A next-page token returns whenever the set of available results exceeds the current page size. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The call's [timezone ID](https://developers.zoom.us/docs/api/rest/other-references/abbreviation-lists/#timezones). The default is **UTC**. -
tostring, format:date-time— **Required** only when the `from` parameter is specified. The end time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format, the same format as the `from` parameter. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "jA5csQv1W1oXuYZLspNIZzMOXqTD9r9Rje2",
"page_size": 1,
"total_records": 1,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"ready_duration": 3600,
"ready_percentage": 85,
"not_ready_duration": 3600,
"not_ready_percentage": 85,
"occupied_duration": 3600,
"occupied_percentage": 85,
"online_duration": 3600,
"offline_duration": 3600,
"inbound_average_voice_call_talking_duration": 3600,
"average_video_call_talking_duration": 3600,
"average_wrap_up_duration": 3600,
"start_time_interval": "2022-07-20T14:00:00-08:00",
"end_time_interval": "2022-07-20T14:15:00-08:00",
"total_outbound_voice_call": 3,
"total_outbound_voice_call_duration": 50,
"total_inbound_voice_call": 3,
"total_inbound_voice_call_duration": 78
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br> **Error Code:** `1001` <br> User does not exist: $userId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List historical detail reports
- Method:
GET - Path:
/contact_center/analytics/historical/details/metrics - Tags: Reports V1 (Legacy)
Retrieve historical engagement details.
The maximum lookback time is 6 months.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:engagement_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Historical detail reports list returned.
Content-Type: application/json
-
detailsarray— The information about the historical detail reports.Items:
-
agent_first_message_speedinteger, format:int64— The engagement's initial response time, in seconds. -
agent_skillsarray— The agent skill names. Applicable to voice channels.Items:
-
proficiency_levelinteger— The skill category's proficiency level. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name.
-
-
agentsarray— Information about the engagement's agents.Items:
-
display_namestring— The agent's name. -
user_idstring— The agent's ID.
-
-
callback_pending_durationinteger, format:int64— The callback pending duration, in seconds. Applicable to voice channels. -
callback_waiting_durationinteger, format:int64— The callback waiting duration, in seconds. Applicable to voice channels. -
channelsarray— The task's channelsItems:
-
channelstring, possible values:"voice", "video", "messaging", "email"— The task's channel. -
channel_sourcestring, possible values:"web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp", "email_address"— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel.
-
-
consumer_country_codestring— The consumer's number [country name](/docs/api/references/abbreviations/#countries), for voice and SMS. -
consumer_country_namestring— The consumer's number [country name](/docs/api/references/abbreviations/#countries), for voice and SMS. -
consumer_idstring— The consumer's ID, for video and chat and email. -
consumer_namestring— The consumer's name, for video and chat and email. -
consumer_numberstring— The consumer's phone number. -
dialed_numbersarray— The dialed numbers. Applicable to voice, video, and SMS channels.Items:
string -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. -
disposition_idstring— The disposition's ID. -
disposition_namestring— The disposition's name. -
engagement_idstring— The engagement's ID -
flowsarray— Information about the engagement's flows.Items:
-
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
flow_versionstring— The flow's version.
-
-
handling_durationinteger, format:int64— The handling duration, in seconds. Applicable to voice channels. -
hold_durationinteger, format:int64— The engagement's hold duration, in seconds. -
ivr_durationinteger, format:int64— The engagement's IVR duration, in seconds. -
last_widget_namestring— The last widget's name. -
optional_skillsarray— The optional skill names. Applicable to voice channels.Items:
-
matchedboolean— Whether the skill is matched. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name.
-
-
queue_wait_typestring, possible values:"live_waiting", "callback"— The queue's wait type. Applicable to voice channels. -
queuesarray— Information about the engagement's queues.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name.
-
-
required_skillsarray— The required skill names. Applicable to voice channels.Items:
-
minimum_proficiency_levelinteger— The skill category's minimum proficiency level. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name.
-
-
resultsstring, possible values:"completed", "contained", "short_abandoned", "long_abandoned", "hold_abandoned", "overflowed", "overflowed_to_inbox", "overflowed_to_disconnect", "long_calls", "short_calls", "hang_up_calls", "auto_closed", "abandon_quit", "callback_abandoned_by_consumer"— The engagement's result. -
ring_durationinteger, format:int64— The ring duration, in seconds. Applicable to voice and video channels. -
start_timestring, format:date-time— The engagement's starting date and time. Format is `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. -
talking_durationinteger, format:int64— The engagement's talking duration, in seconds. -
total_durationinteger, format:int64— The engagement's maximum agent duration, in seconds. -
total_flow_durationinteger, format:int64— The total time of engagement's flows, in seconds. -
waiting_durationinteger, format:int64— The engagement's waiting duration, in seconds. -
wrap_up_durationinteger, format:int64— The engagement's wrap-up duration, in seconds.
-
-
fromstring, format:date-time— The returned data's start date and time. Format: `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The timezone used for the query. When the request used `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format, this reflects the offset from the input. Otherwise, it reflects the `timezone` parameter value or the default `UTC`. -
tostring, format:date-time— The returned data's end date and time. Format matches the `from` field. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"details": [
{
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"channels": [
{
"channel": "messaging",
"channel_source": "in_app_chat"
}
],
"direction": "inbound",
"consumer_number": "+12059300920",
"consumer_id": "zeYjXoDOS_eV1QmTpj63PQ",
"consumer_name": "Tester",
"consumer_country_name": "United States of America",
"consumer_country_code": "US",
"start_time": "2020-02-11T05:39:50Z",
"results": "completed",
"total_duration": 10,
"ivr_duration": 5,
"waiting_duration": 10,
"talking_duration": 20,
"hold_duration": 20,
"wrap_up_duration": 10,
"disposition_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"disposition_name": "Inquiry",
"flows": [
{
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"flow_version": "5"
}
],
"queues": [
{
"cc_queue_id": "d95avl1eRJ-H162PZUJ-qg",
"queue_name": "agentQueue"
}
],
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly"
}
],
"total_flow_duration": 10,
"queue_wait_type": "live_waiting",
"last_widget_name": "PhoneEnQueue RouteTo",
"agent_first_message_speed": 0,
"dialed_numbers": [
"+12059300920"
],
"callback_waiting_duration": 0,
"callback_pending_duration": 0,
"handling_duration": 0,
"ring_duration": 0,
"required_skills": [
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"minimum_proficiency_level": 1
}
],
"optional_skills": [
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"matched": false
}
],
"agent_skills": [
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"proficiency_level": 1
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> `yyyy-mm-dd` or ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br> **Error Code:** `1001` <br> User does not exist: $userId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List historical agent reports by queue
- Method:
GET - Path:
/contact_center/analytics/historical/queues/agents/metrics - Tags: Reports V1 (Legacy)
Generate detailed historical reports of agents from a specific queue.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:agent_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 HTTP Status Code: 200 Historical queue's agents report list returned.
Content-Type: application/json
-
agentsarray— Information about the queue's agents.Items:
-
display_namestring— The agent's name. -
user_idstring— The agent's ID. -
voiceobject— Metrics for voice channel engagements. Includes offer counts, handling durations, ring durations, hold durations, wrap-up durations, and outbound call metrics.-
average_inbound_answer_durationnumber— The average time that consumers spent talking to an agent. Talking duration includes talking time and hold duration. -
average_inbound_handling_durationnumber— Average inbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration. -
average_inbound_hold_durationnumber— The average amount of time that a consumer was placed on hold during the inbound engagement. -
average_inbound_ring_durationnumber— The average amount of time it takes for an agent to answer the inbound engagement. It is from the system assigning the call to the agent and before the agent answers -
average_inbound_wrap_up_durationnumber— The average amount of time that an agent spent in the wrap-up period. -
average_outbound_answer_durationnumber— The average time that consumers spent talking to an agent. Talking duration includes talking time and hold duration. -
average_outbound_handling_durationnumber— Average outbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration. -
average_outbound_hold_durationnumber— The average amount of time that a consumer was placed on hold during the outbound engagement. -
average_outbound_ring_durationnumber— The average amount of time that agents wait for their outbound engagement to be answered. -
average_outbound_wrap_up_durationnumber— The average amount of time that an agent spent in the wrap-up period. -
hangup_outboundinteger— How many of the agent's outbound calls had a duration shorter than the hang-up threshold for the queue. -
hold_hang_upinteger— Hold Hang Up that are presented how many engagements were hanged up by the consumer while on hold with the agent. -
long_outboundinteger— How many of the agent's outbound calls had a duration longer than the long call threshold for the queue. -
longest_inbound_answer_durationnumber— The maximum amount of time it takes for an agent to answer the inbound engagement. It is from the system assigning the call to the agent and before the agent answers. -
longest_inbound_handling_durationnumber— Maximum inbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration. -
longest_inbound_hold_durationnumber— The maximum amount of time that a consumer was placed on hold during the inbound engagement. -
longest_inbound_ring_durationnumber— The maximum amount of time it takes for an agent to answer the inbound engagement. It is from the system assigning the call to the agent and before the agent answers. -
longest_inbound_wrap_up_durationnumber— The maximum amount of time that an agent spent in the wrap-up period. -
longest_outbound_answer_durationnumber— The maximum time that consumers spent talking to an agent. Talking duration includes talking time and hold duration. -
longest_outbound_handling_durationnumber— The maximum outbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration. -
longest_outbound_hold_durationnumber— The maximum amount of time that a consumer was placed on hold during the outbound engagement. -
longest_outbound_ring_durationnumber— The maximum amount of time that agents wait for their outbound engagement to be answered. -
longest_outbound_wrap_up_durationnumber— The maximum amount of time that an agent spent in the wrap-up period. -
offers_acdinteger— Offers ACD metric indicates presented to the agent via the queue distribution. -
offers_answeredinteger— The number of engagements assigned to the agent that were answered. -
offers_answered_acd_inboundinteger— The number of inbound engagements assigned to the agent that were answered. -
offers_declinedinteger— The number of inbound engagements declined by the associated member. In other words, they clicked the option to decline the engagement in the inbound call notification. -
offers_missedinteger— The number of engagements assigned to the agent that went unanswered, including cases where the agent timed out or the customer abandoned. -
offers_non_acdinteger— Offers Non-ACD that are presented to the agent bypassing the queue, or manually assign the engagement to a queue agent. -
offers_totalinteger— Offers happen every time an agent is presented with a call. An engagement can have multiple offers. -
short_outboundinteger— How many of the agent's outbound calls had a duration short than the long call threshold for the queue. -
total_inbound_answer_durationnumber— The total time that consumers spent talking to an agent. Talking duration includes talking time and hold duration. -
total_inbound_handling_durationnumber— Total inbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration -
total_inbound_hold_durationnumber— The total amount of time that a consumer was placed on hold during the inbound engagement. -
total_inbound_ring_durationnumber— The total amount of time it takes for an agent to answer the inbound engagement. It is from the system assigning the call to the agent and before the agent answers -
total_inbound_wrap_up_durationnumber— The total amount of time that an agent spent in the wrap-up period. -
total_outboundinteger— How many outbound calls did the agent participate in (callbacks are not considered outbound calls). -
total_outbound_answer_durationnumber— The total time that consumers spent talking to an agent. Talking duration includes talking time and hold duration. -
total_outbound_handling_durationnumber— The total outbound handling duration. Handling duration = talking duration (hold duration included) + wrap-up Duration. -
total_outbound_hold_durationnumber— The total amount of time that a consumer was placed on hold during the outbound engagement. -
total_outbound_ring_durationnumber— The total amount of time that agents wait for their outbound engagement to be answered. -
total_outbound_wrap_up_durationnumber— The total amount of time that an agent spent in the wrap-up period. -
total_transferred_ininteger— Transferred in metric indicates how many calls were routed to the queue because of the transfer. Transferred in = Transferred in to Queue + Transferred in to Agent. -
total_transferred_outinteger— How many of the calls answered by the agent were transferred out by the agent (instead of being completed by the agent or being abandoned while on hold). -
upgraded_to_video_callinteger— How many voice calls were upgraded to video by the agent.
-
-
-
fromstring— The returned data's start date and time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The timezone used for the query. When the request used `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format, this reflects the offset from the input. Otherwise, it reflects the `timezone` parameter value or the default `UTC`. -
tostring— The returned data's end date and time. Format matches the `from` field. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"voice": {
"offers_total": 5,
"offers_acd": 4,
"offers_non_acd": 1,
"offers_answered": 5,
"offers_answered_acd_inbound": 2,
"offers_missed": 0,
"offers_declined": 4,
"total_transferred_in": 1,
"total_transferred_out": 1,
"hold_hang_up": 1,
"upgraded_to_video_call": 2,
"total_inbound_handling_duration": 55,
"average_inbound_handling_duration": 21,
"longest_inbound_handling_duration": 25,
"average_inbound_answer_duration": 25,
"total_inbound_answer_duration": 45,
"longest_inbound_answer_duration": 25,
"total_inbound_ring_duration": 15,
"average_inbound_ring_duration": 20,
"longest_inbound_ring_duration": 35,
"total_inbound_hold_duration": 10,
"average_inbound_hold_duration": 11,
"longest_inbound_hold_duration": 12,
"total_inbound_wrap_up_duration": 16,
"average_inbound_wrap_up_duration": 12,
"longest_inbound_wrap_up_duration": 14,
"total_outbound": 2,
"short_outbound": 5,
"long_outbound": 6,
"hangup_outbound": 7,
"total_outbound_ring_duration": 32,
"average_outbound_ring_duration": 27,
"longest_outbound_ring_duration": 15,
"total_outbound_handling_duration": 23,
"average_outbound_handling_duration": 24,
"longest_outbound_handling_duration": 31,
"total_outbound_answer_duration": 23,
"average_outbound_answer_duration": 18,
"longest_outbound_answer_duration": 19,
"total_outbound_wrap_up_duration": 25,
"average_outbound_wrap_up_duration": 21,
"longest_outbound_wrap_up_duration": 34,
"total_outbound_hold_duration": 23,
"average_outbound_hold_duration": 27,
"longest_outbound_hold_duration": 13
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in `yyyy-mm-dd` format, or ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: {queueId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
List historical queue reports
- Method:
GET - Path:
/contact_center/analytics/historical/queues/metrics - Tags: Reports V1 (Legacy)
Generate a list of historical queue reports.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:queue_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Historical queue reports list returned.
Content-Type: application/json
-
fromstring, format:date-time— The returned data's start date and time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
queuesarray— Information about the queue reports.Items:
-
cc_queue_idstring— The Contact Center queue's ID. -
chatobject— Information about the chat metrics.-
average_agent_first_message_speednumber, format:double— The average agent first message speed, in seconds. -
average_messaging_durationnumber, format:double— The average chat duration, in seconds. -
average_sentnumber, format:double— The average sent chats. -
average_waiting_durationnumber, format:double— The average waiting video call or chat duration, in seconds. -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
longest_agent_first_message_speednumber, format:double— The longest agent first message speed, in seconds. -
longest_messaging_durationnumber, format:double— The longest chat duration, in seconds. -
longest_waiting_durationnumber, format:double— The longest waiting video call or chat duration, in seconds. -
service_levelnumber, format:double— The queue's service level. -
shortest_agent_first_message_speednumber, format:double— The shortest agent first message speed, in seconds. -
shortest_messaging_durationnumber, format:double— The shortest chat duration, in seconds. -
shortest_waiting_durationnumber, format:double— The shortest waiting video call or chat duration, in seconds. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
total_abandonedinteger, format:int64— The total number of abandoned chats. -
total_auto_closedinteger, format:int64— The total number of auto-closed chats. -
total_releasedinteger, format:int64— The total number of released chats. -
total_sentinteger, format:int64— The total number of sent chats. -
upgraded_to_video_callinteger, format:int64— The total number of upgrade-to-video chats. -
upgraded_to_voice_callinteger, format:int64— The total number of upgrade-to-voice chats.
-
-
emailobject— The information about the email (`email_address`) metrics.-
channel_sourcesarray— The channel's source. * `email_address` - Only applies to email channel.Items:
string, possible values:"email_address" -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
inbound_average_agent_first_reply_durationnumber, format:double— The average reply duration of the first agent in email (`email_address`) engagement, in seconds. -
inbound_average_agent_reply_durationnumber, format:double— The average reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_average_inactive_durationnumber, format:double— The average inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_average_messaging_durationnumber, format:double— The average email (`email_address`) engagement duration, in seconds. -
inbound_average_waiting_durationnumber, format:double— The average waiting email (`email_address`) engagement, in seconds. -
inbound_longest_agent_first_reply_durationnumber, format:double— The longest reply duration of the first agent in email (`email_address`) engagement, in seconds. -
inbound_longest_agent_reply_durationnumber, format:double— The longest reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_longest_inactive_durationnumber, format:double— The longest inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_longest_messaging_durationnumber, format:double— The longest email (`email_address`) engagement duration, in seconds. -
inbound_longest_waiting_durationnumber, format:double— The longest waiting email (`email_address`) engagement, in seconds. -
inbound_shortest_agent_first_reply_durationnumber, format:double— The shortest reply duration of the first agent in email (`email_address`) engagement, in seconds. -
inbound_shortest_agent_reply_durationnumber, format:double— The shortest reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_shortest_inactive_durationnumber, format:double— The shortest inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_shortest_messaging_durationnumber, format:double— The shortest email (`email_address`) engagement duration, in seconds. -
inbound_shortest_waiting_durationnumber, format:double— The shortest waiting email (`email_address`) engagement, in seconds. -
inbound_total_inactive_durationnumber, format:double— The total inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_total_messaging_durationnumber, format:double— The total email (`email_address`) engagement duration, in seconds. -
outbound_average_active_durationnumber, format:double— The average active duration in outbound email (`email_address`) engagement, in seconds. -
outbound_average_inactive_durationnumber, format:double— The average inactive duration in outbound email (`email_address`) engagement, in seconds. -
outbound_longest_active_durationnumber, format:double— The longest active duration in outbound email (`email_address`) engagement, in seconds. -
outbound_longest_inactive_durationnumber, format:double— The longest inactive duration in outbound email (`email_address`) engagement, in seconds. -
outbound_messages_sentinteger, format:int64— The total number of outbound emails sent by the agent during outbound email engagements. -
outbound_total_active_durationnumber, format:double— The total active duration in outbound email (`email_address`) engagement, in seconds. -
outbound_total_inactive_durationnumber, format:double— The total inactive duration in outbound email (`email_address`) engagement, in seconds. -
service_levelnumber, format:double— The queue's service level. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. -
total_auto_closedinteger, format:int64— The total number of auto-closed email (`email_address`) engagements. -
total_handledinteger, format:int64— The total number of handled email (`email_address`) engagements. -
total_offeredinteger, format:int64— The total number of offered email (`email_address`) engagements. -
total_offersinteger, format:int64— The total number of offers email (`email_address`) engagements. -
total_offers_acdinteger, format:int64— The total number of offers ACD email (`email_address`) engagements. -
total_offers_answeredinteger, format:int64— The total number of offers answered email (`email_address`) engagements. -
total_offers_declinedinteger, format:int64— The total number of offers declined email (`email_address`) engagements. -
total_offers_missedinteger, format:int64— The total number of offers missed email (`email_address`) engagements. -
total_offers_non_acdinteger, format:int64— The total number of offers non-ACD email (`email_address`) engagements. -
total_outboundinteger, format:int64— The total number of outbound email engagements. -
total_overflowedinteger, format:int64— The total number of overflowed email (`email_address`) engagements. -
total_releasedinteger, format:int64— The total number of released email (`email_address`) engagements. -
total_transferred_in_to_agentinteger, format:int64— The total number of transferred-in to agent email (`email_address`) engagements. -
total_transferred_in_to_queueinteger, format:int64— The total number of transferred-in to queue email (`email_address`) engagements. -
total_transferred_out_of_queueinteger, format:int64— The total number of transferred-out of queue email (`email_address`) engagements. -
total_transferred_out_within_queueinteger, format:int64— The total number of transferred-out within queue email (`email_address`) engagements.
-
-
messagingobject— The information about the messaging(web_chat/in_app_chat/sms) metrics.-
average_agent_first_message_speednumber, format:double— The average agent first message speed, in seconds. -
average_outbound_answer_durationnumber, format:double— The average messaging(sms) outbound duration, in seconds. -
average_outbound_wrap_up_durationnumber, format:double— The average messaging(sms) outbound wrap-up duration, in seconds. -
average_sentnumber, format:double— The average sent messaging(web_chat/in_app_chat/sms) messages. -
channel_sourcesarray— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel.Items:
string, possible values:"web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp" -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
inbound_average_messaging_durationnumber, format:double— The average messaging(web_chat/in_app_chat/sms) engagement duration, in seconds. -
inbound_average_waiting_durationnumber, format:double— The average waiting voice call or messaging(web_chat/in_app_chat/sms) engagement, in seconds. -
inbound_longest_messaging_durationnumber, format:double— The longest messaging(web_chat/in_app_chat/sms) engagement duration, in seconds. -
inbound_longest_waiting_durationnumber, format:double— The longest waiting voice call or messaging(web_chat/in_app_chat/sms) engagement, in seconds. -
inbound_shortest_messaging_durationnumber, format:double— The shortest messaging(web_chat/in_app_chat/sms) engagement duration, in seconds. -
inbound_shortest_waiting_durationnumber, format:double— The shortest waiting voice call or messaging(web_chat/in_app_chat/sms) engagement, in seconds. -
longest_agent_first_message_speednumber, format:double— The longest agent first message speed, in seconds. -
service_levelnumber, format:double— The queue's service level. -
shortest_agent_first_message_speednumber, format:double— The shortest agent first message speed, in seconds. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
total_abandonedinteger, format:int64— The total number of abandoned quit messaging(web_chat/in_app_chat/sms) engagements. -
total_auto_closedinteger, format:int64— The total number of auto-closed messaging(web_chat/in_app_chat/sms) engagements. -
total_outboundinteger, format:int64— The total number of outbound messaging(sms) engagements. -
total_outbound_answer_durationnumber, format:double— The total messaging(sms) outbound duration, in seconds. -
total_outbound_wrap_up_durationnumber, format:double— The total messaging(sms) outbound wrap-up duration, in seconds. -
total_overflowedinteger, format:int64— The total number of overflowed messaging(web_chat/in_app_chat/sms) engagements. -
total_releasedinteger, format:int64— The total number of released messaging(web_chat/in_app_chat/sms) engagements. -
total_sentinteger, format:int64— The total number of sent messages. -
upgraded_to_video_callinteger, format:int64— The total number of upgrade-to-video messaging(web_chat/in_app_chat/sms) engagements. -
upgraded_to_voice_callinteger, format:int64— The total number of upgrade-to-voice messaging(web_chat/in_app_chat/sms) engagements.
-
-
queue_idstring— The queue's ID. -
queue_namestring— The queue's name. -
smsobject— Information about the SMS metrics.-
average_agent_first_message_speednumber, format:double— The average agent first message speed, in seconds. -
average_outbound_answer_durationnumber, format:double— The average SMS outbound duration, in seconds. -
average_outbound_wrap_up_durationnumber, format:double— The average SMS outbound wrap-up duration, in seconds. -
average_sentnumber, format:double— The average sent SMS messages. -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
inbound_average_messaging_durationnumber, format:double— The average SMS engagement duration, in seconds. -
inbound_average_waiting_durationnumber, format:double— The average waiting voice call or SMS engagement, in seconds. -
inbound_longest_messaging_durationnumber, format:double— The longest SMS engagement duration, in seconds. -
inbound_longest_waiting_durationnumber, format:double— The longest waiting voice call or SMS engagement, in seconds. -
inbound_shortest_messaging_durationnumber, format:double— The shortest SMS engagement duration, in seconds. -
inbound_shortest_waiting_durationnumber, format:double— The shortest waiting voice call or SMS engagement, in seconds. -
longest_agent_first_message_speednumber, format:double— The longest agent first message speed, in seconds. -
shortest_agent_first_message_speednumber, format:double— The shortest agent first message speed, in seconds. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
total_abandonedinteger, format:int64— The total number of abandoned quit SMS engagements. -
total_auto_closedinteger, format:int64— The total number of auto-closed SMS engagements. -
total_outboundinteger, format:int64— The total number of outbound SMS engagements. -
total_outbound_answer_durationnumber, format:double— The total SMS outbound duration, in seconds. -
total_outbound_wrap_up_durationnumber, format:double— The total SMS outbound wrap-up duration, in seconds. -
total_overflowedinteger, format:int64— The total number of overflowed SMS engagements. -
total_releasedinteger, format:int64— The total number of released SMS engagements. -
total_sentinteger, format:int64— The total number of sent messages. -
upgraded_to_video_callinteger, format:int64— The total number of upgrade-to-video SMS engagements. -
upgraded_to_voice_callinteger, format:int64— The total number of upgrade-to-voice SMS engagements.
-
-
total_completedinteger, format:int64— The total number of completed voice or video calls, chats, or SMS engagements. -
total_inboundinteger, format:int64— The total number of incoming voice or video calls, chats, or SMS engagements. -
total_transferred_ininteger, format:int64— The total number of transferred-in calls. -
total_transferred_outinteger, format:int64— The total number of transferred-out calls. -
videoobject— Information about the video metrics.-
average_talking_durationnumber, format:double— The average video call duration, in seconds. -
average_waiting_durationnumber, format:double— The average waiting video call or chat duration, in seconds. -
average_wrap_up_durationnumber, format:double— The longest wrap-up video call, in seconds. -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
hold_abandonedinteger, format:int64— The total number of on-hold abandoned video calls, where the agent placed the call on hold and then the customer abandoned the call. -
long_abandonedinteger, format:int64— The total number of long-duration abandoned video calls, where the talking duration is greater than the user-specified threshold value. -
longest_talking_durationnumber, format:double— The longest video call duration, in seconds. -
longest_waiting_durationnumber, format:double— The longest waiting video call or chat duration, in seconds. -
longest_wrap_up_durationnumber, format:double— The longest wrap-up video call, in seconds. -
service_levelnumber, format:double— The queue's service level. -
short_abandonedinteger, format:int64— The total number of short-duration abandoned video calls, where the talking duration is less than the user-specified threshold value. -
shortest_talking_durationnumber, format:double— The shortest video call duration, in seconds. -
shortest_waiting_durationnumber, format:double— The shortest waiting video call or chat duration, in seconds. -
shortest_wrap_up_durationnumber, format:double— The shortest wrap-up video call, in seconds. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. -
total_missedinteger, format:int64— The total number of missed video calls. -
total_overflowedinteger, format:int64— The total number of overflowed video calls.
-
-
voiceobject— Information about the voice metrics.-
average_outbound_answer_durationnumber, format:double— The average outbound voice call duration, in seconds. It returns for voice channels with a provided interval. -
average_outbound_hold_durationnumber, format:double— The average outbound voice call hold duration, in seconds. It returns for voice channels with a provided interval. -
average_outbound_wrap_up_durationnumber, format:double— The average outbound wrap-up voice call duration, in seconds. It returns for voice channels with a provided interval. -
end_time_intervalstring— The current interval's end date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. Returned for voice channels with a provided interval. -
hangup_outboundinteger, format:int64— The total number of hang-up outbound calls, where the talking duration is less than the threshold value specified for hang-up calls. -
hold_abandonedinteger, format:int64— The total number of on-hold abandoned voice calls, where the agent placed the call on hold and then the customer abandoned the call. -
inbound_average_talking_durationnumber, format:double— The average voice call duration, in seconds. -
inbound_average_waiting_durationnumber, format:double— The average waiting voice call or SMS engagement, in seconds. -
inbound_average_wrap_up_durationnumber, format:double— The average wrap-up voice call, in seconds. -
inbound_longest_talking_durationnumber, format:double— The longest voice call duration, in seconds. -
inbound_longest_waiting_durationnumber, format:double— The longest waiting voice call or SMS engagement, in seconds. -
inbound_longest_wrap_up_durationnumber, format:double— The longest wrap-up voice call, in seconds. -
inbound_shortest_talking_durationnumber, format:double— The shortest voice call duration, in seconds. -
inbound_shortest_waiting_durationnumber, format:double— The shortest waiting voice call or SMS engagement, in seconds. -
inbound_shortest_wrap_up_durationnumber, format:double— The shortest wrap-up voice call, in seconds. -
long_abandonedinteger, format:int64— The total number of long-duration abandoned voice calls, where the talking duration is greater than the user-specified threshold value. -
long_outboundinteger, format:int64— The total number of long outbound calls, where the talking duration is greater than the threshold value specified for long outbound calls. -
service_levelnumber, format:double— The queue's service level. -
short_abandonedinteger, format:int64— The total number of short-duration abandoned voice calls, where the talking duration is less than the user-specified threshold value. -
short_outboundinteger, format:int64— The total number of short outbound calls, where the talking duration is between the threshold values specified for hang-up calls and long outbound calls. -
start_time_intervalstring— The current interval's start date and time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss`TZD`. Returned for voice channels with a provided interval. -
total_abandoned_durationnumber, format:double— The total duration of abandoned voice calls, in seconds. Returned for voice channels with a provided interval. -
total_answer_durationnumber, format:double— The total voice call duration, in seconds. Returned for voice channels with a provided interval. -
total_answered_usersinteger, format:int64— The total number of agent-answered voice calls. Returned for voice channels with a provided interval. -
total_hold_durationnumber, format:double— The total voice call hold duration, in seconds. Returned for voice channels with a provided interval. -
total_missedinteger, format:int64— The total number of missed voice calls. -
total_outboundinteger, format:int64— The total number of outbound voice calls. -
total_outbound_answer_durationnumber, format:double— The total outbound voice call duration, in seconds. It returns for voice channels with a provided interval. -
total_outbound_hold_durationnumber, format:double— The total outbound voice call hold duration, in seconds. It returns for voice channels with a provided interval. -
total_outbound_wrap_up_durationnumber, format:double— The total outbound wrap-up voice call duration, in seconds. It returns for voice channels with a provided interval. -
total_overflowedinteger, format:int64— The total number of overflowed voice calls. -
total_queue_wait_durationnumber, format:double— The total voice-call queue wait duration, in seconds. Returned for voice channels with a provided interval. -
total_wrap_up_durationnumber, format:double— The total wrap-up voice call duration, in seconds. Returned for voice channels with a provided interval. -
upgraded_to_video_callinteger, format:int64— The total number of upgrade-to-video voice calls.
-
-
-
timezonestring— The call's [timezone ID](/docs/api/references/abbreviations/#timezones). The default is **UTC**. -
tostring, format:date-time— The returned data's end date and time. Format matches the `from` field. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"queues": [
{
"cc_queue_id": "Ql3qxUWXSHes4PmcOmzyOg",
"queue_name": "agentQueue",
"total_inbound": 1,
"total_completed": 1,
"total_transferred_in": 1,
"total_transferred_out": 1,
"voice": {
"service_level": 0.85,
"short_abandoned": 1,
"long_abandoned": 1,
"hold_abandoned": 1,
"total_missed": 1,
"total_overflowed": 1,
"upgraded_to_video_call": 1,
"inbound_average_waiting_duration": 11.8,
"inbound_shortest_waiting_duration": 11.8,
"inbound_longest_waiting_duration": 11.8,
"inbound_average_talking_duration": 11.8,
"inbound_longest_talking_duration": 11.8,
"inbound_shortest_talking_duration": 11.8,
"inbound_average_wrap_up_duration": 11.8,
"inbound_longest_wrap_up_duration": 11.8,
"inbound_shortest_wrap_up_duration": 11.8,
"total_outbound": 1,
"hangup_outbound": 1,
"short_outbound": 1,
"long_outbound": 1,
"start_time_interval": "2022-07-20T14:00:00-08:00",
"end_time_interval": "2022-07-20T14:15:00-08:00",
"total_answered_users": 3,
"total_answer_duration": 50,
"total_hold_duration": 3,
"total_wrap_up_duration": 78,
"total_queue_wait_duration": 56,
"total_abandoned_duration": 8,
"total_outbound_answer_duration": 8,
"total_outbound_hold_duration": 8,
"total_outbound_wrap_up_duration": 78,
"average_outbound_answer_duration": 8,
"average_outbound_hold_duration": 8,
"average_outbound_wrap_up_duration": 78
},
"video": {
"start_time_interval": "2022-07-20T14:00:00-08:00",
"end_time_interval": "2022-07-20T14:15:00-08:00",
"service_level": 0.85,
"short_abandoned": 1,
"long_abandoned": 1,
"hold_abandoned": 1,
"total_missed": 1,
"total_overflowed": 1,
"average_waiting_duration": 11.8,
"shortest_waiting_duration": 11.8,
"longest_waiting_duration": 11.8,
"average_talking_duration": 11.8,
"longest_talking_duration": 11.8,
"shortest_talking_duration": 11.8,
"average_wrap_up_duration": 11.8,
"longest_wrap_up_duration": 11.8,
"shortest_wrap_up_duration": 11.8
},
"messaging": {
"channel_sources": [
"web_chat,in_app_chat"
],
"start_time_interval": "2022-07-20T14:00:00-08:00",
"end_time_interval": "2022-07-20T14:15:00-08:00",
"service_level": 0.85,
"total_sent": 1,
"average_sent": 0.85,
"total_auto_closed": 1,
"total_released": 1,
"total_abandoned": 1,
"total_overflowed": 1,
"upgraded_to_voice_call": 1,
"upgraded_to_video_call": 1,
"inbound_average_waiting_duration": 11.8,
"inbound_shortest_waiting_duration": 11.8,
"inbound_longest_waiting_duration": 11.8,
"inbound_average_messaging_duration": 11.8,
"inbound_longest_messaging_duration": 11.8,
"inbound_shortest_messaging_duration": 11.8,
"average_agent_first_message_speed": 11.8,
"shortest_agent_first_message_speed": 11.8,
"longest_agent_first_message_speed": 11.8,
"total_outbound": 1,
"total_outbound_answer_duration": 8,
"total_outbound_wrap_up_duration": 78,
"average_outbound_answer_duration": 8,
"average_outbound_wrap_up_duration": 78
},
"email": {
"channel_sources": [
"email_address"
],
"start_time_interval": "2022-07-20T14:00:00-08:00",
"end_time_interval": "2022-07-20T14:15:00-08:00",
"service_level": 0.85,
"total_overflowed": 1,
"total_auto_closed": 1,
"total_offered": 1,
"total_released": 1,
"total_offers": 1,
"total_offers_acd": 1,
"total_offers_non_acd": 1,
"total_offers_answered": 1,
"total_offers_missed": 1,
"total_offers_declined": 1,
"total_handled": 1,
"total_transferred_out_within_queue": 1,
"total_transferred_out_of_queue": 1,
"total_transferred_in_to_agent": 1,
"total_transferred_in_to_queue": 1,
"inbound_average_waiting_duration": 11.8,
"inbound_shortest_waiting_duration": 11.8,
"inbound_longest_waiting_duration": 11.8,
"inbound_average_messaging_duration": 11.8,
"inbound_longest_messaging_duration": 11.8,
"inbound_shortest_messaging_duration": 11.8,
"inbound_total_messaging_duration": 11.8,
"inbound_average_agent_first_reply_duration": 11.8,
"inbound_longest_agent_first_reply_duration": 11.8,
"inbound_shortest_agent_first_reply_duration": 11.8,
"inbound_average_agent_reply_duration": 11.8,
"inbound_longest_agent_reply_duration": 11.8,
"inbound_shortest_agent_reply_duration": 11.8,
"inbound_average_inactive_duration": 11.8,
"inbound_longest_inactive_duration": 11.8,
"inbound_shortest_inactive_duration": 11.8,
"inbound_total_inactive_duration": 11.8,
"total_outbound": 1,
"outbound_messages_sent": 1,
"outbound_average_active_duration": 11.8,
"outbound_longest_active_duration": 11.8,
"outbound_total_active_duration": 11.8,
"outbound_average_inactive_duration": 11.8,
"outbound_longest_inactive_duration": 11.8,
"outbound_total_inactive_duration": 11.8
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br> **Error Code:** `300` <br> The time and date must be in yyyy-mm-dd or ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'). <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List historical queue's agents reports
- Method:
GET - Path:
/contact_center/analytics/historical/queues/{queueId}/agents/metrics - Tags: Reports V1 (Legacy)
Generate a list of a historical queue's agent reports.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:agent_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Historical queue's agents report list returned.
Content-Type: application/json
-
agentsarray— Information about the queue's agents.Items:
-
chatobject— Metrics for chat channel engagements. Use the `messaging` channel with `channel_sources=web_chat,in_app_chat` instead.-
average_agent_first_message_speednumber, format:double— The shortest agent first chat message speed, in seconds. -
average_messaging_durationnumber, format:double— The average chat duration, in seconds. -
average_sentnumber, format:double— The average number of sent chat messages. -
average_waiting_durationnumber, format:double— The average chat waiting duration, in seconds. -
longest_agent_first_message_speednumber, format:double— The longest agent first chat message speed, in seconds. -
longest_messaging_durationnumber, format:double— The longest chat duration, in seconds. -
longest_waiting_durationnumber, format:double— The longest chat waiting duration, in seconds. -
shortest_agent_first_message_speednumber, format:double— The shortest agent first chat message speed, in seconds. -
shortest_messaging_durationnumber, format:double— The shortest chat duration, in seconds. -
shortest_waiting_durationnumber, format:double— The shortest chat waiting duration, in seconds. -
total_abandonedinteger, format:int64— The total number of abandoned chat messages. -
total_auto_closedinteger, format:int64— The total number of auto-closed chat messages. -
total_overflowedinteger, format:int64— The total number of overflowed chat messages. -
total_releasedinteger, format:int64— The total number of released chat messages. -
total_sentinteger, format:int64— The total number of sent chat messages. -
upgraded_to_video_callinteger, format:int64— The total number of chats that are upgraded to video calls. -
upgraded_to_voice_callinteger, format:int64— The total number of chats that are upgraded to voice calls.
-
-
display_namestring— The agent's name. -
emailobject— Metrics for email channel engagements. Includes offer counts, transfer counts, reply durations, inactive durations, and interval data when an interval parameter is provided.-
channel_sourcesarray— The channel's source. * `email_address` - Only applies to email channel.Items:
string, possible values:"email_address" -
inbound_average_agent_first_reply_durationnumber, format:double— The average reply duration of the first-agent-in email (`email_address`) engagement, in seconds. -
inbound_average_agent_reply_durationnumber, format:double— The average reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_average_inactive_durationnumber, format:double— The average inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_average_messaging_durationnumber, format:double— The average email (`email_address`) engagement duration, in seconds. -
inbound_longest_agent_first_reply_durationnumber, format:double— The longest reply duration of the first agent in email (`email_address`) engagement, in seconds. -
inbound_longest_agent_reply_durationnumber, format:double— The longest reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_longest_inactive_durationnumber, format:double— The longest inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_longest_messaging_durationnumber, format:double— The longest email (`email_address`) engagement duration, in seconds. -
inbound_shortest_agent_first_reply_durationnumber, format:double— The shortest reply duration of the first agent in email (`email_address`) engagement, in seconds. -
inbound_shortest_agent_reply_durationnumber, format:double— The shortest reply duration of email (`email_address`) engagement agents, excluding the response duration of the first agent, in seconds. -
inbound_shortest_inactive_durationnumber, format:double— The shortest inactive duration in email (`email_address`) engagement, excluding the response duration of the first agent, in seconds. -
inbound_shortest_messaging_durationnumber, format:double— The shortest email (`email_address`) engagement duration, in seconds. -
total_auto_closedinteger, format:int64— The total number of auto-closed email (`email_address`) engagements. -
total_offersinteger, format:int64— The total number of offers' email (`email_address`) engagements. -
total_offers_acdinteger, format:int64— The total number of offers ACD email (`email_address`) engagements. -
total_offers_answeredinteger, format:int64— The total number of offers-answered email (`email_address`) engagements. -
total_offers_declinedinteger, format:int64— The total number of offers-declined email (`email_address`) engagements. -
total_offers_missedinteger, format:int64— The total number of offers-missed email (`email_address`) engagements. -
total_offers_non_acdinteger, format:int64— The total number of offers non-ACD email (`email_address`) engagements. -
total_transferred_in_outside_queueinteger, format:int64— The total number of transferred-in-out-of-queue email (`email_address`) engagements. -
total_transferred_in_within_queueinteger, format:int64— The total number of transferred-in-within-queue email (`email_address`) engagements. -
total_transferred_out_of_queueinteger, format:int64— The total number of transferred-out-of-queue email (`email_address`) engagements. -
total_transferred_out_within_queueinteger, format:int64— The total number of transferred-out-within-queue email (`email_address`) engagements.
-
-
messagingobject— Metrics for messaging channel engagements, including web chat, in-app chat, SMS, Facebook Messenger, and WhatsApp. Includes message counts, durations, agent response times, and interval data when an interval parameter is provided.-
average_agent_first_message_speednumber, format:double— The shortest agent of the first messaging message's speed in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
average_outbound_answer_durationnumber, format:double— The average outbound SMS messaging duration, in seconds. -
average_outbound_wrap_up_durationnumber, format:double— The average outbound SMS messaging wrap-up duration, in seconds. -
average_sentnumber, format:double— The average number of sent messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
channel_sourcesarray— The channel's source. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel.Items:
string, possible values:"web_chat", "in_app_chat", "sms", "facebook_messenger", "whatsapp" -
inbound_average_messaging_durationnumber, format:double— The average messaging(web_chat/in_app_chat/sms) message duration, in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
inbound_average_waiting_durationnumber, format:double— The average messaging waiting duration in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
inbound_longest_messaging_durationnumber, format:double— The longest messaging(web_chat/in_app_chat/sms) message duration, in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
inbound_longest_waiting_durationnumber, format:double— The longest messaging waiting duration in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
inbound_shortest_messaging_durationnumber, format:double— The shortest messaging(web_chat/in_app_chat/sms) message duration, in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
inbound_shortest_waiting_durationnumber, format:double— The shortest messaging waiting duration in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
longest_agent_first_message_speednumber, format:double— The longest agent of the first messaging message's speed, in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
shortest_agent_first_message_speednumber, format:double— The shortest agent of the first messaging message's speed, in seconds, including `web_chat`, `in_app_chat`, and `sms` . -
total_abandonedinteger, format:int64— The total number of abandoned messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
total_auto_closedinteger, format:int64— The total number of auto-closed messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
total_outboundinteger, format:int64— The total number of outbound SMS messaging engagements. -
total_outbound_answer_durationnumber, format:double— The total outbound SMS messaging duration, in seconds. -
total_outbound_wrap_up_durationnumber, format:double— The total outbound SMS messaging wrap-up duration, in seconds. -
total_overflowedinteger, format:int64— The total number of overflowed messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
total_releasedinteger, format:int64— The total number of released messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
total_sentinteger, format:int64— The total number of sent messaging messages, including `web_chat`, `in_app_chat`, and `sms` . -
upgraded_to_video_callinteger, format:int64— The total number of messaging engagements that are upgraded to video calls, including `web_chat`, `in_app_chat`, and `sms` . -
upgraded_to_voice_callinteger, format:int64— The total number of messaging engagements that are upgraded to voice calls, including `web_chat`, `in_app_chat`, and `sms` .
-
-
smsobject— Metrics for SMS channel engagements. Use the `messaging` channel with `channel_sources=sms` instead.-
average_agent_first_message_speednumber, format:double— The shortest agent first sms message speed, in seconds. -
average_outbound_answer_durationnumber, format:double— The average SMS outbound duration, in seconds. -
average_outbound_wrap_up_durationnumber, format:double— The average SMS outbound wrap-up duration, in seconds. -
average_sentnumber, format:double— The average number of sent SMS messages. -
inbound_average_messaging_durationnumber, format:double— The average sms messaging duration, in seconds. -
inbound_average_waiting_durationnumber, format:double— The average sms waiting duration, in seconds. -
inbound_longest_messaging_durationnumber, format:double— The longest sms messaging duration, in seconds. -
inbound_longest_waiting_durationnumber, format:double— The longest sms waiting duration, in seconds. -
inbound_shortest_messaging_durationnumber, format:double— The shortest sms messaging duration, in seconds. -
inbound_shortest_waiting_durationnumber, format:double— The shortest sms waiting duration, in seconds. -
longest_agent_first_message_speednumber, format:double— The longest agent first sms message speed, in seconds. -
shortest_agent_first_message_speednumber, format:double— The shortest agent first sms message speed, in seconds. -
total_abandonedinteger, format:int64— The total number of abandoned SMS messages. -
total_auto_closedinteger, format:int64— The total number of auto-closed SMS messages. -
total_outboundinteger, format:int64— The total number of outbound sms engagements. -
total_outbound_answer_durationnumber, format:double— The total SMS outbound duration, in seconds. -
total_outbound_wrap_up_durationnumber, format:double— The total SMS outbound wrap-up duration, in seconds. -
total_overflowedinteger, format:int64— The total number of overflowed SMS messages. -
total_releasedinteger, format:int64— The total number of released SMS messages. -
total_sentinteger, format:int64— The total number of sent SMS messages. -
upgraded_to_video_callinteger, format:int64— The total number of SMS engagements that are upgraded to video calls. -
upgraded_to_voice_callinteger, format:int64— The total number of SMS engagements that are upgraded to voice calls.
-
-
total_completedinteger, format:int64— The total number of completed voice calls, video calls, chats, or SMS engagements. -
total_inboundinteger, format:int64— The total number of incoming voice calls, video calls, chats, or SMS engagements. -
total_transferred_ininteger, format:int64— The total number of transferred-in voice calls, video calls, chats, or SMS engagements. -
total_transferred_outinteger, format:int64— The total number of transferred-out voice calls, video calls, chats, or SMS engagements. -
user_idstring— The agent's ID. -
videoobject— Metrics for video channel engagements. Includes call durations, abandoned calls, service level, and interval data when an interval parameter is provided.-
average_talking_durationnumber, format:double— The average video call duration, in seconds. -
average_wrap_up_durationnumber, format:double— The average wrap-up video call, in seconds. -
longest_talking_durationnumber, format:double— The longest video call duration, in seconds. -
longest_wrap_up_durationnumber, format:double— The longest wrap-up video call, in seconds. -
shortest_talking_durationnumber, format:double— The shortest video call duration, in seconds. -
shortest_wrap_up_durationnumber, format:double— The shortest wrap-up video call, in seconds. -
total_declinedinteger, format:int64— The total number of declined video calls. -
total_missedinteger, format:int64— The total number of missed video calls.
-
-
voiceobject— Metrics for voice channel engagements. Includes call durations, abandoned calls, outbound calls, and interval data when an interval parameter is provided.-
average_outbound_answer_durationnumber, format:double— The average outbound voice call duration, in seconds. It returns for voice channels with a provided interval. -
average_outbound_hold_durationnumber, format:double— The average outbound voice call hold duration, in seconds. It returns for voice channels with a provided interval. -
average_outbound_wrap_up_durationnumber, format:double— The average outbound wrap-up voice call duration, in seconds. It returns for voice channels with a provided interval. -
end_time_intervalstring— The current interval's end date and time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. Returned for voice channels with a provided interval. -
hangup_outboundinteger, format:int64— The total number of hang-up outbound calls, where the talking duration is less than the threshold value specified for hang-up calls. -
inbound_average_talking_durationnumber, format:double— The average voice call duration, in seconds. -
inbound_average_wrap_up_durationnumber, format:double— The average wrap-up voice or video call, in seconds. -
inbound_longest_talking_durationnumber, format:double— The longest voice call duration, in seconds. -
inbound_longest_wrap_up_durationnumber, format:double— The longest wrap-up voice or video call, in seconds. -
inbound_shortest_talking_durationnumber, format:double— The shortest voice call duration, in seconds. -
inbound_shortest_wrap_up_durationnumber, format:double— The shortest wrap-up voice or video call, in seconds. -
long_outboundinteger, format:int64— The total number of long outbound calls, where the talking duration is greater than the threshold value specified for long outbound calls. -
short_outboundinteger, format:int64— The total number of short outbound calls, where the talking duration is between the threshold values specified for hang-up calls and long outbound calls. -
start_time_intervalstring— The current interval's start date and time. Format is either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when timezone offset was provided. Returned for voice channels with a provided interval. -
total_abandoned_durationnumber, format:double— The total duration of abandoned calls, in seconds. Returned for voice channels with a provided interval. -
total_answer_durationnumber, format:double— The total call duration, in seconds. Returned for voice channels with a provided interval. -
total_answered_usersinteger, format:int64— The total number of agent-answered calls. Returned for voice channels with a provided interval. -
total_declinedinteger, format:int64— The total number of declined voice calls. -
total_hold_durationnumber, format:double— The total call hold duration, in seconds. Returned for voice channels with a provided interval. -
total_missedinteger, format:int64— The total number of missed voice calls. -
total_outboundinteger, format:int64— The total number of outbound voice calls, video calls, chats, or SMS engagements. -
total_outbound_answer_durationnumber, format:double— The total outbound voice call duration, in seconds. It returns for voice channels with a provided interval. -
total_outbound_hold_durationnumber, format:double— The total outbound voice call hold duration, in seconds. It returns for voice channels with a provided interval. -
total_outbound_wrap_up_durationnumber, format:double— The total outbound wrap-up voice call duration, in seconds. It returns for voice channels with a provided interval. -
total_queue_wait_durationnumber, format:double— The total queue wait duration, in seconds. Returned for voice channels with a provided interval. -
total_wrap_up_durationnumber, format:double— The total wrap-up call duration, in seconds. Returned for voice channels with a provided interval. -
upgraded_to_video_callinteger, format:int64— The total number of voice calls, chats or SMS engagements that are upgraded to video calls.
-
-
-
fromstring, format:date-time— The start date and time of the returned data. Format: `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss±HH:mm`, matching the input format when the timezone offset was provided. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
timezonestring— The timezone used for the query. When the request uses `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format, this reflects the offset from the input. Otherwise, it reflects the `timezone` parameter value or the default `UTC`. -
tostring, format:date-time— The end date and time of the returned data. Format matches the `from` field. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:15:00Z",
"agents": [
{
"user_id": "ukAAkZKfROKMSw1bj_RDFQ",
"display_name": "Jilly",
"total_inbound": 1,
"total_completed": 1,
"total_transferred_in": 1,
"total_transferred_out": 1,
"video": {
"total_declined": 1,
"total_missed": 1,
"average_talking_duration": 11.8,
"longest_talking_duration": 11.8,
"shortest_talking_duration": 11.8,
"average_wrap_up_duration": 11.8,
"longest_wrap_up_duration": 11.8,
"shortest_wrap_up_duration": 11.8
},
"messaging": {
"channel_sources": [
"web_chat,in_app_chat"
],
"total_sent": 1,
"average_sent": 11.8,
"total_abandoned": 1,
"total_auto_closed": 1,
"total_released": 1,
"total_overflowed": 1,
"upgraded_to_voice_call": 1,
"upgraded_to_video_call": 1,
"inbound_average_messaging_duration": 11.8,
"inbound_longest_messaging_duration": 11.8,
"inbound_shortest_messaging_duration": 11.8,
"inbound_average_waiting_duration": 11.8,
"inbound_shortest_waiting_duration": 11.8,
"inbound_longest_waiting_duration": 11.8,
"average_agent_first_message_speed": 11.8,
"shortest_agent_first_message_speed": 11.8,
"longest_agent_first_message_speed": 11.8,
"total_outbound": 1,
"total_outbound_answer_duration": 8,
"total_outbound_wrap_up_duration": 78,
"average_outbound_answer_duration": 8,
"average_outbound_wrap_up_duration": 78
},
"email": {
"channel_sources": [
"email_address"
],
"total_offers": 1,
"total_offers_acd": 1,
"total_offers_non_acd": 1,
"total_offers_answered": 1,
"total_offers_missed": 1,
"total_offers_declined": 1,
"total_auto_closed": 1,
"total_transferred_out_within_queue": 1,
"total_transferred_out_of_queue": 1,
"total_transferred_in_within_queue": 1,
"total_transferred_in_outside_queue": 1,
"inbound_average_messaging_duration": 11.8,
"inbound_longest_messaging_duration": 11.8,
"inbound_shortest_messaging_duration": 11.8,
"inbound_average_agent_first_reply_duration": 11.8,
"inbound_longest_agent_first_reply_duration": 11.8,
"inbound_shortest_agent_first_reply_duration": 11.8,
"inbound_average_agent_reply_duration": 11.8,
"inbound_longest_agent_reply_duration": 11.8,
"inbound_shortest_agent_reply_duration": 11.8,
"inbound_average_inactive_duration": 11.8,
"inbound_longest_inactive_duration": 11.8,
"inbound_shortest_inactive_duration": 11.8
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in yyyy-mm-dd. or ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'). <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Only provide report in recent 6 months. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1201` <br> Queue does not exist: $queueId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List historical agent performance dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/agent_performance - Tags: Reports V2 (CX Analytics)
Generate a list of agent performance dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_agent_performance:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Agent performance dataset raw data response.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull all agents that ended after this date and time. The response only includes one month's worth of data. If there is no specified end date, the API returns data from the past 24 hours. -
end_time_tostring— Required only when specifying the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `end_time_from` parameter. Pulls all agents that ended in the given `end_time_from` and `end_time_to` time periods. -
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull all agents that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull all agents that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
start_time_tostring— Required only when specifying the `start_time_from` parameter. The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. Pulls all agents that started in the given `start_time_from` and `start_time_to` time periods. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to query the start time and end time in the query. . The default is `UTC`. -
tostring— Required only when specifying the `from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `from` parameter. Pulls all agents that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all records available across pages. -
usersarrayItems:
-
agent_declined_countinteger— The total number of agent refused engagements that the agent declined. -
agent_first_response_durationnumber— The amount of time it takes for an agent working a messaging channel to send the first message to a customer, in milliseconds. -
agent_leg_idstring— The unique identifier generated for each agent leg. -
agent_message_sent_countinteger— A count of all messages sent by an agent for a unique engagement ID. -
agent_missed_countinteger— The total number of agent refused engagements the agent missed. -
agent_offered_countinteger— The total number of engagements offered to an agent. -
agent_refused_countinteger— A number of times an agent missed or declined an engagement. -
ani_fromstring— The phone number that an engagement originated from. -
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the engagement contains. -
channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain", "api"— The source that the engagement contains. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `in_video_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `whats_app` - Only applies to messaging channel. * `email_domain` - Only applies to email channel. * `api` - Only applies to work_item channel. -
channel_switch_countnumber— The number of channel switches successfully completed by an agent. -
conference_countinteger— The number of conferences that occured. -
conference_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in milliseconds. -
conversation_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in milliseconds. -
dial_durationnumber— The amount of time spent dialing the customer, in milliseconds. -
direct_transfer_countinteger— The number of direct transfers initiated. -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. -
dnis_tostring— The original number that was dialed for an engagement. -
end_timestring— The agent date and time when the engagement ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `end_time` will be in UTC. -
engagement_idstring— The engagement's ID. -
handle_durationnumber— The amount of time agents spent handling engagements, in milliseconds. -
handled_countinteger— The number of inbound - including callback - and outbound engagements handled by the queue. -
hold_countinteger— The number of times that a consumer was placed on hold. -
hold_durationnumber— The amount of time that a consumer was placed on hold, in milliseconds. NOTE: A call may have multiple hold times. -
inbound_conversation_durationnumber— The amount of time that an agent spent on an inbound engagement in communication with the consumer, in milliseconds. -
inbound_handle_durationnumber— The amount of time an agent spent handling an inbound engagement, in milliseconds. -
inbound_handled_countinteger— The number of inbound engagements offered to and answered by an agent. -
origin_methodstring, possible values:"outbound", "callback", "scheduled_callback", "callback_retry", "conference", "transfer_to_agent", "transfer_to_queue", "warm_transfer_to_agent", "warm_transfer_to_queue", "direct_transfer_to_agent", "direct_transfer_to_queue", "route_to_queue", "route_to_agents", "switch_to_voice", "switch_to_video", "invite_agent", "takeover", "outbound_progressive_dial", "outbound_preview_dial", "outbound_third_party_dial"— How an engagement was assigned to the agent. -
outbound_conversation_durationnumber— The amount of time that an agent spent on an outbound engagement communicating with a consumer, in milliseconds. -
outbound_handle_durationnumber— The amount of time an agent spent handling an outbound engagement, in milliseconds. -
outbound_handled_countinteger— The number of outbound engagements offered to and answered by an agent. -
parked_countinteger— The number of times that an engagement was parked. -
perview_durationnumber— The amount of time an agent spent previewing an engagement, in milliseconds. -
queue_idstring— The queue's specific ID. -
queue_namestring— The queue's specific name. -
ring_disconnect_countinteger— The count of all engagements that have been routed to a rung an agent, but the connection to this specific agent is not completed. -
ring_durationnumber— The amount of time between when an engagement is assigned to an agent and the agent answered, missed, or declined the engagement, in milliseconds. -
start_timestring— The agent date and time when the engagement started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
switch_methodstring, possible values:"switch_messaging_to_voice", "switch_messaging_to_video", "switch_voice_to_video", "switch_work_item_to_voice", "switch_work_item_to_video"— What an agent uses to perform a channel switch, including the origin and destination channels. -
team_idstring— The team's specific ID. -
team_namestring— The team's specific name. -
third_party_dialer_wait_durationnumber— The amount of time an agent waited after being connected before the consumer joined the call. This metric only applies to third-party dialer scenarios. -
transfer_completed_countinteger— The number of transfers an agent completed, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels with no distinction between warm and direct. -
transfer_initiated_countinteger— The number of transfers an agent initiated, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels with no distinction between warm and direct. -
user_idstring— The ID of the agent who is set up on the agent profile. -
user_namestring— The name of the agent who is set up on the agent profile. -
warm_conference_countinteger— The number of warm conferences initiated. -
warm_conference_duratonnumber— The amount of time spent on warm conferences, in milliseconds. -
warm_transfer_completed_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant and then fully transferred the engagements. -
warm_transfer_durationnumber— The amount of time spent on warm transfers, in milliseconds. -
warm_transfer_initiated_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant with or without fully transferring the engagement. -
wrap_up_durationnumber— The amount of time agents spent completing engagement wrap-up, in milliseconds.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"users": [
{
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"direction": "inbound",
"user_id": "reRAiabVQSqpXxJVDbsy2Q",
"user_name": "user_name_example",
"channel": "voice",
"channel_source": "voice",
"queue_id": "FRDFsxkcQeCnhR5eMBdOHw",
"queue_name": "jack_queue",
"team_id": "FRDFsxkcQeCnhR5eMBdOHw",
"team_name": "jack_team",
"handled_count": 1,
"handle_duration": 123,
"direct_transfer_count": 1,
"warm_transfer_initiated_count": 1,
"warm_transfer_completed_count": 1,
"transfer_initiated_count": 1,
"transfer_completed_count": 1,
"warm_conference_count": 1,
"agent_offered_count": 1,
"agent_refused_count": 2,
"agent_missed_count": 3,
"ring_disconnect_count": 1,
"agent_declined_count": 1,
"agent_message_sent_count": 1,
"hold_count": 1,
"conversation_duration": 123,
"perview_duration": 123,
"conference_duration": 123,
"conference_count": 1,
"hold_duration": 123,
"wrap_up_duration": 123,
"inbound_handled_count": 1,
"outbound_handle_duration": 123,
"warm_conference_duraton": 123,
"warm_transfer_duration": 123,
"ring_duration": 123,
"agent_first_response_duration": 123,
"dial_duration": 123,
"inbound_conversation_duration": 123,
"inbound_handle_duration": 123,
"outbound_handled_count": 1,
"outbound_conversation_duration": 123,
"third_party_dialer_wait_duration": 123,
"channel_switch_count": 1,
"dnis_to": "+12095551212",
"origin_method": "outbound",
"agent_leg_id": "ZWR01A4AF5E1ED183F1BEE02C2F29EE723F",
"parked_count": 1,
"switch_method": "switch_voice_to_video",
"ani_from": "+19135551212"
}
],
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:00:00Z",
"end_time_from": "2021-12-10T00:00:00Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical agent timecard dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/agent_timecard - Tags: Reports V2 (CX Analytics)
Generate a list of agent timecard dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_agent_timecard:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Agent timecard dataset raw data response.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the agent status for all agents that ended after this date and time. The response only includes one month's worth of data. If there is no specified end date, the API returns data from the past 24 hours. -
end_time_tostring— Required only when specifying the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, the same format as the `end_time_from` parameter. Pulls the agent status for all agents that ended in the given `end_time_from` and `end_time_to` time periods. -
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the agent status for all agents that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the agent status for all agents that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
start_time_tostring— Required only when specifying the `start_time_from` parameter. The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. Pulls the agent status for all agents that started in the given `start_time_from` and `start_time_to` time periods. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is `UTC`. -
tostring— Required only when specifying the `from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `from` parameter. Pulls the agent status for all agents that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all the records available across pages. -
usersarrayItems:
-
agent_countrystring— Two-letter country [ID](/docs/api/references/abbreviations/#countries). -
client_typestring, possible values:"client", "pwa", "crm", "web", "mobile"— The type of client application. -
end_timestring— The end timestamp of an agent's work session. -
ip_addressstring— The agent's IP address. -
not_ready_durationnumber— The time an agent spent in **Not Ready** status during an agent work session, in milliseconds. -
occupied_durationnumber— The time an agent spent in **Occupied** status during an agent work session, in milliseconds. -
ready_durationnumber— The time an agent spent in **Ready** status during an agent work session, in milliseconds. -
start_timestring— The start timestamp of an agent's work session. -
teamobject— All teams related during the work session.-
team_idstring— The team's specific ID on the Zoom platform that allows for viewing reports as a group of agents. -
team_namestring— The specific name of a team on the Zoom platform that allows for viewing reports as a group of agents.
-
-
user_idstring— The ID of the agent set up on the agent profile. -
user_namestring— The first and last name of the agent set up on the agent profile. -
user_statusstring— The status of an agent during a work session. -
user_sub_statusstring— The sub status of the agent who was in **Ready**, **Not Ready**, or **Occupied** status. -
work_session_durationnumber— The time between the start and end of an agents unique work session, in milliseconds. -
work_session_end_timestring— The work session's end time. -
work_session_idstring— The unique identifier of an agent's work session. -
work_session_start_timestring— The work session's start time.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"users": [
{
"work_session_id": "reRAiabVQSqpXxJVDbsy2Q",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"user_id": "reRAiabVQSqpXxJVDbsy2Q",
"user_name": "agent_name_example",
"user_status": "not_ready",
"user_sub_status": "launch time",
"team": {
"team_id": "team_id_example",
"team_name": "team_name_example"
},
"ready_duration": 123,
"occupied_duration": 234,
"not_ready_duration": 123,
"work_session_duration": 123,
"work_session_start_time": "2025-12-10T00:00:00Z",
"work_session_end_time": "2025-12-12T00:00:00Z",
"client_type": "client",
"agent_country": "US",
"ip_address": "192.168.3.4"
}
],
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:00:00Z",
"end_time_from": "2021-12-10T00:00:00Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List historical custom report tabular data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/custom_reports/{reportId}/widgets/{widgetId} - Tags: Reports V2 (CX Analytics)
Generate a list of tabular data based on the custom report after enabling the API in the CX Analytics.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:custom_report:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Historical custom report tabular data list returned.
Content-Type: application/json
-
dataarray— The data in the tabular widget format configured on the CX Analytics historical report.Items:
-
field_namestring— The field names are dynamic, and could be `user`, `queue`, `team`, or others, depending on the current historical report format. Enable the API access on the tabular widget. The field names are specified on the API response preview page.
-
-
fromstring, format:date-time— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format. **Note** The overall time range needs to be less than 6 months. -
pageinteger— The page number. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
report_idstring— The CX Analytics report ID. -
timezonestring— The call's timezone. -
tostring, format:date-time— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format. **Note** The overall time range needs to be less than 6 months. -
total_recordsinteger— The total number of all records available across pages. -
widget_idstring— The tabular widget ID of the CX Analytics report.
Example:
{
"widget_id": "AtkB6sHxSjyslNMWL0-8IA",
"report_id": "GcyNb1T9Tq6lyo4b-ebCNg",
"timezone": "Asia/Shanghai",
"from": "2025-12-10T00:00:00Z",
"to": "2025-12-10T00:00:00Z",
"page": 1,
"page_size": 30,
"total_records": 10,
"data": [
{
"field_name": "dynamic value"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Input parameter format validation failed.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found The specified widget is not found.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get historical custom report tabular schema
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/custom_reports/{reportId}/widgets/{widgetId}/schema - Tags: Reports V2 (CX Analytics)
Generate the schema information for a tabular based on the custom report after enabling API in the CX Analytics.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:custom_report:admin
Rate Limit Label: LIGHT
Responses
Status: 200 Historical custom report tabular schema returned.
Content-Type: application/json
-
report_id(required)string— The CX Analytics report ID. -
schema(required)array— The schema for the tabular widget format configured on the CX Analytics historical report.Items:
-
field_name(required)string— Field name generated by the platform based on report configuration. -
field_type(required)string, possible values:"string", "array", "object", "number", "integer", "id_name"— Field type. The 'id_name' is an object type, which contains two string fields `id` and `name`. -
descriptionstring— A brief description of the field.
-
-
widget_id(required)string— The CX Analytics report's tabular widget ID.
Example:
{
"widget_id": "AtkB6sHxSjyslNMWL0-8IA",
"report_id": "GcyNb1T9Tq6lyo4b-ebCNg",
"schema": [
{
"field_name": "queue",
"field_type": "id_name",
"description": "The specific name of a queue on the Zoom platform."
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Input parameter format validation failed.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found The specified widget was not found.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical disposition dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/disposition - Tags: Reports V2 (CX Analytics)
View the historical disposition data for finished engagements in the Contact Center to conduct disposal data analysis, such as displaying the disposition data through dashboards or reports. Filter the results with the provided input parameters. The input filters are conjunctive.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_disposition:admin
Rate Limit Label: HEAVY
Responses
Status: 200 View the historical disposition data that is finished engament in Contact Center response.
Content-Type: application/json
-
fromstring, format:date-time— Filter results to dispositions that started after this date and time. The expected format is `yyyy-MM-dd'T'HH:mm:ss'Z'`.The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
historical_dispositionsarray— dispositionsItems:
-
account_idstring— The account's ID. -
channelstring, possible values:"voice", "video", "messaging", "email"— The names of the channels on the Contact Center. - `voice` - `video` - `messaging` - `email` -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email"— The channel's source. - `voice` - `web_video` - `in_app_video` - `kiosk_video` - `web_chat` - `in_app_chat` - `in_dideo_chat` - `sms` - `facebook_messenger` - `instagram` - `team_chat` - `whatsapp` - `email_address` - `email_web_form` -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. - `inbound` - `outbound` -
disposition_namestring— The disposition's name. -
disposition_sourcestring, possible values:"default", "agent"— The disposition's source. - `default` - `agent` -
disposition_typestring, possible values:"single", "multi_level"— The disposition's type. - `single` - `multi-level` -
engagement_idstring— The disposition's engagement ID. -
parent_account_idstring— The parent account's ID. -
queue_idstring— The queue's ID. -
queue_namestring— The queue's name. -
team_idstring— The team's ID. -
team_namestring— The team's name. -
tier1_disposition_namestring— The disposition's tier1 name. -
tier2_disposition_namestring— The disposition's tier2 name. -
tier3_disposition_namestring— The disposition's tier3 name. -
tier4_disposition_namestring— The disposition's tier4 name. -
user_idstring— The agent's ID. -
user_namestring— The agent's name.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is `UTC`. -
tostring, format:date-time— Required only when the `from` parameter is specified. Filter results to dispositions that started in the given `from` and `to` time periods. The expected format is `yyyy-MM-dd'T'HH:mm:ss'Z'`. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "UTC",
"from": "2025-05-26T16:30:08Z",
"to": "2025-07-26T16:30:08Z",
"historical_dispositions": [
{
"disposition_name": "My Disposition",
"tier1_disposition_name": "Disposition tier1 name",
"tier2_disposition_name": "Disposition tier2 name",
"tier3_disposition_name": "Disposition tier3 name",
"tier4_disposition_name": "Disposition tier4 name",
"account_id": "QxgttRd_QearwLDiZBcnAw",
"parent_account_id": "0csc9RR7TR-k-bByzRGoyg",
"user_id": "SVoAlV1URdOVhEZrodKHQw",
"user_name": "Jane Smith",
"disposition_type": "single",
"disposition_source": "agent",
"channel": "voice",
"channel_source": "voice",
"team_id": "MhHgsufKS5axWxVWHbghmQ",
"team_name": "My Team",
"queue_id": "3e8E2PnWTcC9FrKNaDuOeA",
"queue_name": "My Queue",
"engagement_id": "XYV29VsfROOGUS_BbSXFpQ",
"direction": "inbound"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List historical engagement dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/engagement - Tags: Reports V2 (CX Analytics)
Generate a list of engagement dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_engagement:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Engagement dataset raw data response.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that ended after this date and time. The response only includes one month's worth of data. If there is no specified end date, the API returns data from the past 24 hours. -
end_time_tostring— Required only when the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `end_time_from` parameter. Pulls the engagements that ended in the given `end_time_from` and `end_time_to` time periods. -
engagementsarray— Information about the engagement.Items:
-
abandoned_countinteger— The number of times an end user abandoned an engagement before connecting with an agent. -
aiea_usagestring, possible values:"used", "not_used"— Whether Agentic AI Expert Assist was involved in the engagement. This only applies to Agentic AI Expert Assist. **Note** Data is available only when the feature is enabled and properly licensed. -
anistring— The phone number that an engagement originated from. -
caller_idstring— The caller's phone number. -
channelsarray— The all engagement related channel.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the engagement contains. -
channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain", "api"— The source that the engagement contains. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `in_video_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `whats_app` - Only applies to messaging channel. * `email_domain` - Only applies to email channel. * `api` - Only applies to work_item channel.
-
-
conference_countinteger— The number of conferences that occurred. -
conference_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in milliseconds. -
consumerobject— The consumer information.-
consumer_emailstring— The consumer's email address. -
consumer_namestring— The consumer's name.
-
-
conversation_durationnumber— The amount of time that agents spent on engagements communicating with a consumer, in milliseconds. -
direct_transfer_countinteger— The number of direct transfers initiated. -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. -
dnisstring— The original number dialed for an engagement. -
durationnumber— The engagement's duration, in milliseconds. -
end_timestring— The date and time when the engagement ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
engagement_idstring— The engagement's ID. -
enter_channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the engagement was in when it entered the Zoom Contact Center. -
enter_channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain", "api"— The source that the engagement was in when it entered entered the Contact Center. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `in_video_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `whats_app` - Only applies to messaging channel. * `email_domain` - Only applies to email channel. * `api` - Only applies to work_item channel. -
handle_durationnumber— The amount of time agents spent handling engagements, in milliseconds. -
hold_countinteger— The number of times that a consumer was placed on hold. -
hold_durationnumber— The amount of time that a consumer was placed on hold. **NOTE:** A call may have multiple hold times. -
queuesarray— All queues related to the engagement.Items:
-
queue_idstring— A queue's specific ID. -
queue_namestring— A queue's specific name.
-
-
start_timestring— The date and time when the engagement started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
teamsarray— All teams related to the engagement.Items:
-
team_idstring— A team's specific ID. -
team_namestring— A team's specific name.
-
-
transfer_completed_countinteger— The number of transfers an agent completed, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels, with no distinction between warm and direct. -
transfer_initiated_countinteger— The number of transfers an agent initiated, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channel, withno distinction between warm and direct. -
usersarray— All agents related to the engagement.Items:
-
user_idstring— The ID of the agent who is set up on the agent profile. -
user_namestring— The first and last name of the agent who is set up on the agent profile.
-
-
warm_conference_countinteger— The number of warm conferences initiated. -
warm_conference_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in milliseconds. -
warm_transfer_completed_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant and then fully transferred the engagements. -
warm_transfer_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in milliseconds. -
warm_transfer_initiated_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant with or without fully transferring the engagement. -
wrap_up_durationnumber— The amount of time agents spent completing engagement wrap-up, in milliseconds.
-
-
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
start_time_tostring— Required only when the `start_time_from` parameter. The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. Pulls the engagements that started in the given `start_time_from` and `start_time_to` time periods. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. . The default is `UTC`. -
tostring— Required only when specifying the `from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `from` parameter. Pulls the engagements that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:00:00Z",
"end_time_from": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:00:00Z",
"engagements": [
{
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"direction": "inbound",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"enter_channel": "messaging",
"enter_channel_source": "in_app_chat",
"channels": [
{
"channel": "voice",
"channel_source": "voice"
}
],
"caller_id": "+12765551212",
"dnis": "+12765551212",
"ani": "+12055551212",
"consumer": {
"consumer_email": "jack@example.com",
"consumer_name": "jack"
},
"queues": [
{
"queue_id": "FRDFsxkcQeCnhR5eMBdOHw",
"queue_name": "jack_queue"
}
],
"users": [
{
"user_id": "FRDFsxkcQeCnhR5eMBdOHw",
"user_name": "jack_agent"
}
],
"teams": [
{
"team_id": "FRDFsxkcQeCnhR5eMBdOHw",
"team_name": "jack_team"
}
],
"duration": 35678,
"handle_duration": 17922,
"conversation_duration": 16901,
"hold_count": 3,
"hold_duration": 169,
"warm_transfer_initiated_count": 1,
"warm_transfer_completed_count": 1,
"warm_transfer_duration": 1453,
"direct_transfer_count": 2,
"transfer_initiated_count": 1,
"transfer_completed_count": 1,
"warm_conference_count": 1,
"warm_conference_duration": 283764,
"conference_count": 1,
"conference_duration": 283764,
"wrap_up_duration": 143561,
"abandoned_count": 0,
"aiea_usage": "used"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical engagement timelines
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/engagement_timelines - Tags: Reports V2 (CX Analytics)
Retrieve engagement timelines, including entities and segments, for engagements in a time range. Data is available after engagements have completed processing, not immediately after the engagements end. This API may return an empty or partial response while the data is persisting.
Retry this request for up to 1 minute to get timeline details, if querying shortly after an engagement_ended webhook event. Consider using a backoff between retries to avoid rate limiting.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:engagement_timeline:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Timeline information returned.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull all engagements that ended after this date and time. -
end_time_tostring— Required only when specifying the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `end_time_from` parameter. -
engagement_timelinesarray— List of engagement timeline objects. One item per engagement. Each includes `engagement_id` and its entity timelines.Items:
-
engagement_id(required)string— The engagement's ID. -
channelsarray— The channels that the engagement contains. such as voice, video, digital, and messaging. Each item pairs one channel with its source.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channels that the engagement contains. -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email_address", "api"— The sources that the engagement contains. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel. * `api` - Only applies to work_item channel.
-
-
disconnect_infostring | null, possible values:"agent", "customer", "system"— The party that initiated the end of this engagement. Omitted when the disconnect party cannot be determined. * `agent` — The agent ended the engagement. * `customer` — The customer ended the engagement. * `system` — The system ended the engagement (for example, inactivity timeout, queue overflow, or SLA breach). -
entity_timelinesarray— One entry per entity, each containing the entity information and its ordered timeline segments. Empty when no data.Items:
-
entityobject— Information about the entity.-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the task contains. -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email_address", "api"— The source that the task contains. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel. * `api` - Only applies to work_item channel. -
entity_descriptive_namestring— The entity's human-readable name. -
entity_idstring— The entity's unique identifier. -
entity_typestring, possible values:"Queue", "Consumer", "Agent", "Supervisor", "Flow", "Campaign", "Virtual Agent"— The entity type. -
matched_skills_and_intentsarray— Agent only. Skills and intents that led to matching this agent. Each item has type 'skill' or 'intent' with its category and name. Omitted or empty for non-agent entities.Items:
-
category(required)string— The category name (skill category when type is skill, intent category when type is intent). -
name(required)string— The skill name or intent name. -
type(required)string, possible values:"skill", "intent"— Whether this criterion is a skill or an intent. -
min_proficiencyinteger | null— The minimum proficiency level required for the skill to match this agent. Only present when `type` is `skill`. A value between 1 and 10. Omitted when the routing record does not carry a proficiency threshold (for example, older engagements or intent-based routing).
-
-
-
segmentsarray— This entity's ordered list of time segments.Items:
-
end_reasonstring— Event name that ended the segment. -
end_timestring— The date and time when the segment ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The time is according to the timezone indicated by the request. If no timezone is provided, `end_time` will be in UTC. -
segment_typestring, possible values:"customer_interact_segment", "customer_ring_segment", "in_flow_segment", "queue_waiting_segment", "queue_park_segment", "queue_callback_waiting_segment", "agent_ring_segment", "dial_customer_segment", "agent_outbound_preview_dial_segment", "agent_hold_segment", "agent_conversation_segment", "agent_warm_transfer_segment", "agent_warm_conference_segment", "agent_conference_segment", "agent_wrap_up_segment", "supervisor_listen_segment", "supervisor_whisper_segment", "supervisor_view_segment", "supervisor_barge_segment", "supervisor_monitor_segment", "campaign_dial_segment", "zva_virtual_agent_conversation_segment", "zva_consumer_interact_segment"— Segment type code in `snake_case`. -
start_timestring— The date and time when the segment started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The time is according to the timezone indicated by the request. If no timezone is provided, `start_time` will be in UTC.
-
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull all engagements that started after this date and time. -
start_time_tostring— Required only when specifying the `start_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) used for the request. The default is UTC. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:15:00Z",
"end_time_from": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:15:00Z",
"engagement_timelines": [
{
"engagement_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"channels": [
{
"channel": "video",
"channel_source": "web_video"
}
],
"disconnect_info": "agent",
"entity_timelines": [
{
"entity": {
"entity_id": "agent-leg-abc123",
"entity_type": "Agent",
"entity_descriptive_name": "John Doe",
"channel": "voice",
"channel_source": "in_app_chat",
"matched_skills_and_intents": [
{
"type": "skill",
"category": "Language",
"name": "Billing",
"min_proficiency": 5
}
]
},
"segments": [
{
"segment_type": "agent_conversation_segment",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"end_reason": "agent.hangup"
}
]
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical expert assist dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/expert_assist - Tags: Reports V2 (CX Analytics)
Display expert assist dataset key metrics on the adoption of AI expert assist and its impact on key engagement measures. This data is available only after an engagement has ended and includes only those engagements where AI expert assist data is present.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_expert_assist:admin
Rate Limit Label: HEAVY
Responses
Status: 200 The expert assist dataset raw data response.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that ended after this date and time. The response only includes one month's worth of data. If there is no specified end date, the API returns data from the past 24 hours. -
end_time_tostring— Required only when specifying the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `end_time_from` parameter. Pulls the engagements that ended in the given `end_time_from` and `end_time_to` time periods. -
engagementsarray— The information about the engagement.Items:
-
channelsarray— The all engagement related channel.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email"— The channel contained in the engagement. -
channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain"— The source contained in the engagement. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `in_video_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `whats_app` - Only applies to messaging channel. * `email_domain` - Only applies to email channel.
-
-
directionstring, possible values:"inbound", "outbound"— The engagement's direction. -
end_timestring— The date and time when the engagement ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
engagement_idstring— The engagement's ID. -
expert_assist_featurearray— The expert assist functions used by engagement.Items:
string, possible values:"Unknown", "ea_info_retrieval", "ea_knowledge_base", "ea_next_best_action"— The expert assist function used by engagement. -
expert_assist_instancearray— All expert assist instances related to the engagement.Items:
-
expert_assist_instance_idstring— An expert assist instance's specific ID. -
expert_assist_instance_namestring— An expert assist instance's name.
-
-
expert_assist_statusstring, possible values:"Unknown", "initiated", "available", "no_available"— The engagement status of using the expert assist function. -
handle_durationnumber— The amount of time agents spent handling engagements, in milliseconds. -
info_retrieval_grouparray— All expert assist information retrievals related to the engagement.Items:
-
info_retrieval_group_idstring— An expert assist information retrieval's specific ID. -
info_retrieval_group_namestring— An expert assist information retrieval's name.
-
-
knowledge_basearray— All expert assist knowledge bases related to the engagement.Items:
-
knowledge_base_idstring— An expert assist knowledge base's specific ID. -
knowledge_base_namestring— An expert assist knowledge base's name.
-
-
next_best_actionarray— All expert assist next best actions related to the engagement.Items:
-
next_best_action_idstring— An expert assist next best action's specific ID. -
next_best_action_namestring— An expert assist next best action's name.
-
-
queuesarray— All queues related to the engagement.Items:
-
queue_idstring— A queue's specific ID. -
queue_namestring— A queue's specific name.
-
-
start_timestring— The date and time when the engagement started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
teamsarray— All teams related to the engagement.Items:
-
team_idstring— A team's specific ID. -
team_namestring— A team's specific name.
-
-
usersarray— All agents related to the engagement.Items:
-
user_idstring— The ID of the agent on the agent profile. -
user_namestring— The first and last name of the agent on the agent profile.
-
-
wrap_up_durationnumber— The amount of time agents spent completing engagement wrap-up, in milliseconds.
-
-
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
start_time_tostring— Required only when specifying the `start_time_from` parameter. The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. Pulls the engagements that started in the given `start_time_from` and `start_time_to` time periods. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. . The default is `UTC`. -
tostring— Required only when specifying the `from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `from` parameter. Pulls the engagements that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:00:00Z",
"end_time_from": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:00:00Z",
"engagements": [
{
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"direction": "inbound",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"channels": [
{
"channel": "voice",
"channel_source": "voice"
}
],
"queues": [
{
"queue_id": "FRDFsxkcQeCnhR5eMBdOHw",
"queue_name": "jack_queue"
}
],
"users": [
{
"user_id": "FRDFsxkcQeCnhR5eMBdOHw",
"user_name": "jack_agent"
}
],
"teams": [
{
"team_id": "FRDFsxkcQeCnhR5eMBdOHw",
"team_name": "jack_team"
}
],
"handle_duration": 17922,
"wrap_up_duration": 143561,
"expert_assist_status": "initiated",
"expert_assist_instance": [
{
"expert_assist_instance_id": "Y548oThR-GCyKeYeNg6TA\n",
"expert_assist_instance_name": "order_list"
}
],
"info_retrieval_group": [
{
"info_retrieval_group_id": "Uu9pM0LRRl24RM3aNxDScA",
"info_retrieval_group_name": "order_groups"
}
],
"knowledge_base": [
{
"knowledge_base_id": "1d4HuAFFSkGz7vmhU1wVGA",
"knowledge_base_name": "know_base"
}
],
"next_best_action": [
{
"next_best_action_id": "04vm4K5zR_qnXeXhdvfcCA",
"next_best_action_name": "recommend"
}
],
"expert_assist_feature": [
"ea_info_retrieval"
]
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List historical flow performance dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/flow_performance - Tags: Reports V2 (CX Analytics)
Generate a list of flow performance dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_flow_performance:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Flow performance dataset raw data response.
Content-Type: application/json
-
enter_time_fromstring— The enter time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the flows that entered after this date and time. The response only includes one month's worth of data. If there is no specified enter date, the API returns data from the past 24 hours. -
enter_time_tostring— Required only when specifying the `enter_time_from` parameter. The enter time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `enter_time_from` parameter. Pulls the flows that entered in the given `enter_time_from` and `enter_time_to` time periods. -
exit_time_fromstring— The exit time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the engagements that exited after this date and time. The response only includes one month's worth of data. If there is no specified exit date, the API returns data from the past 24 hours. -
exit_time_tostring— The exit time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the flows that exited after this date and time. The response only includes one month's worth of data. If there is no specified exit date, the API returns data from the past 24 hours. -
flowsarrayItems:
-
ani_fromstring— The phone number that an engagement originated from. -
destinationstring— The name of the last widget the engagement reached before exiting the flow. -
dnis_tostring— The original number that was dialed for an engagement. -
duration_to_first_handled_agentnumber— The amount of time from when engagements entered the flow until they were handled by the first assigned agent, in milliseconds. -
duration_to_first_handled_queuenumber— The amount of time from when engagements entered the flow until they were handled by the first assigned queue, in milliseconds. -
duration_to_first_offered_agentnumber— The amount of time from when engagements entered the flow until they were assigned with an agent, in milliseconds. -
engagement_idstring— The engagement's unique identifier. -
enter_channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that an engagement was in when it entered the flow. -
enter_channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain", "api"— The source that an engagement was in when it entered the flow. * `voice` - Only applies to the voice channel. * `in_app_video` - Only applies to the video channel. * `kiosk_video` - Only applies to the video channel. * `web_video` - Only applies to the video channel. * `in_app_chat` - Only applies to the messaging channel. * `in_video_chat` - Only applies to the messaging channel. * `web_chat` - Only applies to the messaging channel. * `sms` - Only applies to the messaging channel. * `facebook_messenger` - Only applies to the messaging channel. * `instagram` - Only applies to the messaging channel. * `team_chat` - Only applies to the messaging channel. * `whats_app` - Only applies to the messaging channel. * `email_domain` - Only applies to the email channel. * `api` - Only applies to the work_item channel. -
entry_pointstring— The entry point where the engagement entered the flow. -
first_offered_queue_durationnumber— The amount of time an engagement took from entering the Contact Center until it was assigned to the first queue. -
first_widget_durationnumber— The amount of time an engagement took from entering the Contact Center until it reached the first widget in the flow, in milliseconds. -
flow_durationnumber— The amount of time an engagement took from entering the Contact Center until it reached the first widget in the flow, in milliseconds. -
flow_enter_timestring— The timestamp when an engagement entered the flow. -
flow_exit_timestring— The timestamp when an engagement exited the flow. -
flow_idstring— The specific ID of a flow on the Zoom platform. -
flow_namestring— The specific name of a flow on the Zoom platform. -
flow_offered_countinteger— The total number of engagements that were offered to a flow. -
flow_upgraded_countinteger— The number of times an engagement was upgraded within the flow, such as voice upgraded to video. -
flow_versionstring— The flow version that was used when an engagement entered it. -
handled_by_agent_countinteger— Whether the engagement was handled by an agent within the flow. -
handled_by_first_offered_agent_countinteger— The number of engagements that entered the flow and were handled by the first assigned agent. -
handled_by_first_offered_queue_countinteger— The number of engagements that entered the flow and were handled by the first assigned queue. -
handled_by_queue_countinteger— Whether the engagement was handled by a queue within the flow. -
offered_to_agent_countinteger— Whether the engagement was assigned to an agent within the flow. -
offerred_to_queue_countinteger— Whether the engagement was assigned to a queue within the flow.
-
-
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the flows that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is `UTC`. -
tostring— Required only when the `from` parameter is specified. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, the same format as the `from` parameter. Pulls the flows that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"enter_time_from": "2021-12-10T00:00:00Z",
"enter_time_to": "2021-12-10T00:00:00Z",
"exit_time_from": "2021-12-10T00:00:00Z",
"exit_time_to": "2021-12-10T00:00:00Z",
"timezone": "America/Los_Angeles",
"flows": [
{
"flow_id": "reRAiabVQSqpXxJVDbsy2Q",
"flow_name": "flow_example_name",
"flow_version": "2",
"flow_enter_time": "2021-12-10T00:15:00Z",
"flow_exit_time": "2021-12-10T00:15:00Z",
"enter_channel": "messaging",
"enter_channel_source": "in_app_chat",
"entry_point": "+12345678",
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"flow_offered_count": 1,
"flow_upgraded_count": 1,
"offerred_to_queue_count": 1,
"handled_by_queue_count": 1,
"handled_by_first_offered_queue_count": 1,
"offered_to_agent_count": 2,
"handled_by_agent_count": 1,
"handled_by_first_offered_agent_count": 3,
"flow_duration": 123,
"first_widget_duration": 123,
"first_offered_queue_duration": 123,
"duration_to_first_handled_queue": 213,
"duration_to_first_offered_agent": 123,
"duration_to_first_handled_agent": 123,
"destination": "Route to Sales Queue",
"dnis_to": "+12095551212",
"ani_from": "+19135551212"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical outbound dialer performance dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/outbound_dialer_performance - Tags: Reports V2 (CX Analytics)
Generate a list of outbound dialer performance dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_outbound_dialer_performance:admin
Rate Limit Label: HEAVY
Responses
Status: 200 The outbound dialer performance dataset raw data response.
Content-Type: application/json
-
end_time_fromstring— The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the outbound dialer engagements that ended after this date and time. The response only includes one month's worth of data. If there is no specified end date, the API returns data from the past 24 hours. -
end_time_tostring— Required only when specifying the `end_time_from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `end_time_from` parameter. Pulls the outbound dialer engagements that ended in the given `end_time_from` and `end_time_to` time periods. -
engagementsarray— Information about the engagement.Items:
-
caller_id_numberstring— The caller ID number that is displayed when engagements are attempted from. -
calls_answered_countinteger— The number of engagements answered. -
calls_blocked_countinteger— The number of engagements blocked. -
calls_failed_countinteger— The number of engagements failed. -
calls_skipped_countinteger— The number of engagements skipped due to being outside callable hours. -
calls_with_amd_countinteger— The number of engagements with AMD. -
campaignobject— All campaignd created on the Zoom platform.-
campaign_idstring— The ID of a campaign created on the Zoom platform. -
campaign_namestring— The name of a campaign created on the Zoom platform.
-
-
consumer_numberstring— The customer phone number that was attempted. -
contactobject— All contact that the engagements are linked to.-
contact_idstring— The ID of the contact that the engagements are linked to. -
contact_namestring— The name of the contact that the engagements are linked to.
-
-
contact_listobject— All contact list that the engagements have been loaded into.-
contact_list_idstring— The ID of the contact list that the engagements have been loaded into. -
contact_list_namestring— The name of the contact list that the engagements have been loaded into.
-
-
contacts_connected_countinteger— The number of engagements connected to the consumer. -
dialer_methodstring, possible values:"progressive", "preview"— The method used, such as `preview` or `progressive`. -
dnc_countinteger— The number of phone numbers that appear on the do not call list. -
dnc_flagboolean— Whether the prospective engagement has been flagged for a DNC list. This would be `true` or `false`. -
end_timestring— The date and time when the engagement ended, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC. -
engagement_durationnumber— The total duration of the engagement. From when the engagement starts ringing until it is hung up, in milliseconds. -
engagement_idstring— The engagement's ID. -
response_durationnumber— The amount of time the dialer takes to connect an agent to a live call after the customer answers the phone, in milliseconds. -
start_timestring— The engagement date and time when the engagement started, in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. `start_time` will be the time according to the timezone indicated by the user. If no timezone is provided, `start_time` will be in UTC.
-
-
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the outbound dialer engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
start_time_fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the outbound dialer engagements that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
start_time_tostring— Required only when specifying the `start_time_from` parameter. The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `start_time_from` parameter. Pulls the outbound dialer engagements that started in the given `start_time_from` and `start_time_to` time periods. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. . The default is `UTC`. -
tostring— Required only when specifying the `from` parameter. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, the same format as the `from` parameter. Pulls the outbound dialer engagements that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"engagements": [
{
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"start_time": "2021-12-10T00:00:00Z",
"end_time": "2021-12-10T00:00:00Z",
"campaign": {
"campaign_id": "reRAiabVQSqpXxJVDbsy2Q",
"campaign_name": "campaign_example"
},
"contact_list": {
"contact_list_id": "reRAiabVQSqpXxJVDbsy2Q",
"contact_list_name": "John's Contacts"
},
"contact": {
"contact_id": "reRAiabVQSqpXxJVDbsy2Q",
"contact_name": "Jane Doe"
},
"dialer_method": "progressive",
"dnc_flag": true,
"caller_id_number": "+1234567890",
"consumer_number": "+1234567890",
"calls_answered_count": 1,
"calls_failed_count": 0,
"calls_with_amd_count": 0,
"calls_blocked_count": 0,
"contacts_connected_count": 1,
"dnc_count": 0,
"engagement_duration": 10000,
"response_duration": 1000,
"calls_skipped_count": 0
}
],
"start_time_from": "2021-12-10T00:00:00Z",
"start_time_to": "2021-12-10T00:00:00Z",
"end_time_to": "2021-12-10T00:00:00Z",
"end_time_from": "2021-12-10T00:00:00Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List historical queue performance dataset data
- Method:
GET - Path:
/contact_center/analytics/dataset/historical/queue_performance - Tags: Reports V2 (CX Analytics)
Generate a list of queue performance dataset raw data.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:dataset_queue_performance:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Queue performance dataset raw data response.
Content-Type: application/json
-
enter_time_fromstring— The enter time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the queues that entered after this date and time. The response only includes one month's worth of data. If there is no specified enter date, the API returns data from the past 24 hours. -
enter_time_tostring— Required only when specifying the `enter_time_from` parameter. The enter time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, the same format as the `enter_time_from` parameter. Pulls the queues that entered in the given `enter_time_from` and `enter_time_to` time periods. -
exit_time_fromstring— The exit time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the queues that exited after this date and time. The response only includes one month's worth of data. If there is no specified exit date, the API returns data from the past 24 hours. -
exit_time_tostring— Required only when specifying the `exit_time_from` parameter. The exit time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, the same format as the `exit_time_from` parameter. Pulls the queues that exited in the given `exit_time_from` and `exit_time_to` time periods. -
fromstring— The start time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format to pull the queues that started after this date and time. The response only includes one month's worth of data. If there is no specified start date, the API returns data from the past 24 hours. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
queuesarrayItems:
-
abandon_durationnumber— The amount of time a customer waited in a specific queue before abandoning the engagement. Only applies to the queue where the abandonment actually occurred, in milliseconds. -
abandoned_countinteger— The number of times an end user abandoned an engagement before connecting with an agent. Also the sum of Short Abandons and Long Abandons. -
ani_fromstring— The phone number that an engagement originated from. -
auto_close_disconnect_countinteger— The count of messaging and email engagements that are auto closed by the system after not receiving a response from the consumer after a defined period of time. -
callback_abandoned_countinteger— The number of callbacks where an agent was already connected, but not successfully connected to the consumer. -
callback_canceled_countinteger— The number of callbacks which consumers choose to cancel and instead wait in the queue. -
callback_conversation_durationnumber— The amount of time that an agent spent on an engagement communicating with a consumer, in milliseconds. -
callback_handle_durationnumber— The amount of time agents spent handling callbacks, in milliseconds. -
callback_handled_countinteger— The number of callbacks accepted by available agents. -
callback_pending_durationnumber— The amount of time from when the agent called back until the customer answered the call, customer did not answer or the agent hung up, in milliseconds. -
callback_registered_countinteger— The number of engagements that entered the queue and requested a callback, or scheduled a callback via the dedicated web page. -
callback_timeout_countinteger— The number of callbacks placed but did not speak to an agent before the callback expired. -
callback_wait_durationnumber— The amount of time from a callback being registered until either the agent calls back, the callback expires, or the callback is canceled, in milliseconds. -
callback_wrap_up_durationnumber— The amount of time agents spent completing after call work, in milliseconds. -
conference_countinteger— The number of conferences that occurred. -
conference_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in milliseconds. -
conversation_durationnumber— The amount of time that agents spent on engagements communicating with a consumer, in milliseconds. -
direct_transfer_countinteger— The number of direct transfers initiated. -
directionstring, possible values:"inbound", "outbound"— The queue task direction. -
dnis_tostring— The original number that was dialed for an engagement. -
engagement_idstring— The engagement's ID. -
enter_channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the queue task enters. -
enter_channel_sourcestring, possible values:"voice", "in_app_video", "kiosk_video", "web_video", "in_app_chat", "in_video_chat", "web_chat", "sms", "facebook_messenger", "instagram", "team_chat", "whats_app", "email_domain", "api"— The source that the queue task enters. * `voice` - Only applies to the voice channel. * `in_app_video` - Only applies to the video channel. * `kiosk_video` - Only applies to the video channel. * `web_video` - Only applies to the video channel. * `in_app_chat` - Only applies to the messaging channel. * `in_video_chat` - Only applies to the messaging channel. * `web_chat` - Only applies to the messaging channel. * `sms` - Only applies to the messaging channel. * `facebook_messenger` - Only applies to the messaging channel. * `instagram` - Only applies to the messaging channel. * `team_chat` - Only applies to the messaging channel. * `whats_app` - Only applies to the messaging channel. * `email_domain` - Only applies to the email channel. * `api` - Only applies to the work_item channel. -
enter_queue_idstring— The unique identifier generated for each queue entry record of an engagement. -
enter_timestring— The timestamp when an engagement entered the queue. -
exit_timestring— The timestamp when an engagement exited the queue. -
handle_countinteger— The number of inbound (including callback) and outbound engagements handled by the queue. -
handle_durationnumber— The amount of time agents spent handling engagements, in milliseconds. -
hold_countinteger— The number of times that a consumer was placed on hold. -
hold_durationnumber— The amount of time that a consumer was placed on hold, in milliseconds. **NOTE** A call may have multiple hold times. -
in_queue_wait_durationnumber— The amount of time the consumer spent waiting live - not in callback - in the queue before the engagement was answered, overflowed, or abandoned, in milliseconds. -
inbound_conversation_durationnumber— The amount of time that an agent spent on an inbound engagement in communication with the consumer, in milliseconds. -
inbound_handle_durationnumber— The amount of time agents spent handling inbound engagements, in milliseconds. -
inbound_handled_countinteger— The number of inbound engagements offered to and answered by an agent. -
inbound_wrap_up_durationnumber— The amount of time an agent spent completing inbound engagement wrap-up, in milliseconds. -
long_abandons_countinteger— The number of engagements that were abandoned after the threshold defined for the queue. -
origin_methodstring, possible values:"take_over", "hand_over", "callback", "scheduled_callback", "callback_retry", "outbound", "conference", "release", "warm_transfer_to_agent", "warm_transfer_to_queue", "direct_transfer_to_agent", "direct_transfer_to_queue", "transfer_to_agent", "transfer_to_queue", "route_to_queue", "route_to_agent", "outbound_progressive_dial", "outbound_preview_dial", "outbound_third_party_dial", "park"— How the engagement was routed to the queue. -
outbound_connected_countinteger— The number of outbound engagements that resulted in a successful connection between a customer and an agent. -
outbound_conversation_durationnumber— The amount of time that an agent spent on an outbound engagement communicating with a consumer, in milliseconds. -
outbound_countinteger— The number of outbound engagements that entered a queue, regardless of a successful connection. -
outbound_dial_durationnumber— The amount of time spent dialing the customer, in milliseconds. -
outbound_handle_durationnumber— The amount of time agents spent handling outbound engagements. This also includes the time dialing a customer, in milliseconds. -
outbound_handled_countinteger— The number of outbound engagements handled by agents, regardless of successful connection or not. -
outbound_wrap_up_durationnumber— The amount of time an agent spent completing outbound engagement wrap-up, in milliseconds. -
overflow_countinteger— The number of engagements that entered and left a queue without being answered. This occurs because the capacity of available agent resources in queue was exceeded. -
parked_countinteger— The number of times that an engagement was parked. -
parked_durationnumber— The amount of time that an engagement is in parked status, in milliseconds. -
queue_idstring— A queue's specific ID. -
queue_namestring— A queue's specific name. -
queue_offered_countinteger— The number of engagements routed into the queue for agents to answer. -
short_abandons_countinteger— The number of engagements that were abandoned before the threshold defined for the queue. -
speed_of_answer_durationnumber— The amount of time an engagement waited in the queue before an agent answered, in milliseconds. **NOTE** This metric does not include engagements that agents did not answer. -
transfer_completed_countinteger— The number of transfers an agent completed, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels (no distinction between warm and direct). -
transfer_initiated_countinteger— The number of transfers an agent initiated, including warm and direct transfers for voice and video channels, and all transfers for messaging and email channels (no distinction between warm and direct). -
warm_conference_countinteger— The number of warm conferences initiated. -
warm_conference_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in milliseconds. -
warm_transfer_completed_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant and then fully transferred the engagements. -
warm_transfer_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in milliseconds. -
warm_transfer_initiated_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant with or without fully transferring the engagement. -
wrap_up_durationnumber— The amount of time agents spent completing engagement wrap-up, in milliseconds.
-
-
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is `UTC`. -
tostring— Required only when the `from` parameter is specified. The end time and date in `yyyy-MM-dd'T'HH:mm:ss'Z'` format, same as the `from` parameter. Pulls the queues that started in the given `from` and `to` time periods. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"timezone": "America/Los_Angeles",
"from": "2021-12-10T00:00:00Z",
"to": "2021-12-10T00:00:00Z",
"enter_time_from": "2021-12-10T00:00:00Z",
"enter_time_to": "2021-12-10T00:00:00Z",
"exit_time_from": "2021-12-10T00:00:00Z",
"exit_time_to": "2021-12-10T00:00:00Z",
"queues": [
{
"engagement_id": "reRAiabVQSqpXxJVDbsy2Q",
"enter_time": "2021-12-10T00:00:00Z",
"exit_time": "2021-12-10T10:30:00Z",
"queue_id": "reRAiabVQSqpXxJVDbsy2Q",
"queue_name": "queue_example_name",
"enter_channel": "messaging",
"enter_channel_source": "in_app_chat",
"origin_method": "take_over",
"direction": "inbound",
"queue_offered_count": 1,
"abandoned_count": 1,
"short_abandons_count": 0,
"long_abandons_count": 1,
"overflow_count": 1,
"inbound_handled_count": 2,
"in_queue_wait_duration": 123,
"abandon_duration": 123,
"speed_of_answer_duration": 123,
"inbound_handle_duration": 123,
"inbound_conversation_duration": 123,
"inbound_wrap_up_duration": 123,
"outbound_count": 1,
"outbound_handled_count": 1,
"outbound_connected_count": 1,
"outbound_dial_duration": 123,
"outbound_handle_duration": 123,
"outbound_conversation_duration": 123,
"outbound_wrap_up_duration": 123,
"callback_registered_count": 1,
"callback_abandoned_count": 1,
"callback_canceled_count": 1,
"callback_timeout_count": 1,
"callback_handled_count": 1,
"callback_wait_duration": 123,
"callback_pending_duration": 123,
"callback_handle_duration": 123,
"callback_conversation_duration": 123,
"callback_wrap_up_duration": 123,
"handle_count": 1,
"hold_count": 1,
"warm_transfer_initiated_count": 1,
"warm_transfer_completed_count": 1,
"direct_transfer_count": 2,
"transfer_initiated_count": 1,
"transfer_completed_count": 1,
"warm_conference_count": 1,
"conference_count": 1,
"auto_close_disconnect_count": 1,
"handle_duration": 17922,
"conversation_duration": 16901,
"wrap_up_duration": 143561,
"hold_duration": 169,
"conference_duration": 283764,
"warm_transfer_duration": 1453,
"warm_conference_duration": 283764,
"dnis_to": "+12095551212",
"ani_from": "+19135551212",
"parked_count": 1,
"parked_duration": 123,
"enter_queue_id": "ZWT70A1CE9D236F8E85DF9F80726A8DCEC5"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical engagement log data
- Method:
GET - Path:
/contact_center/analytics/log/historical/engagement - Tags: Reports V2 (CX Analytics)
Retrieve a list of all historical engagement log data. The log captures all details of closed engagements, including a timeline and key events, providing a clear record for tracking and analysis.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:engagement_log:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Generate a list of historical engagement logs data.
Content-Type: application/json
-
engagement_logsarray— The engagement log list.Items:
-
aiea_usedstring, possible values:"used", "not_used"— Whether Agentic AI Expert Assist was involved in the engagement. This only applies to Agentic AI Expert Assist. **NOTE** Data is available only when the feature is enabled and properly licensed. -
ani_fromstring— The phone number that an engagement originated from. -
blockedboolean— Is blocked. -
caller_idstring— The caller's phone number. -
channelsarray— The channels on the Zoom platform such as voice, video, digital, and messaging.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The name of the channels on the Zoom platform. -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email_address", "api"— The name of sources on the Zoom platform that specifically relate to a channel. * `voice` - Only applies to voice channel. * `in_app_video` - Only applies to video channel. * `kiosk_video` - Only applies to video channel. * `web_video` - Only applies to video channel. * `in_app_chat` - Only applies to messaging channel. * `in_video_chat` - Only applies to messaging channel. * `web_chat` - Only applies to messaging channel. * `sms` - Only applies to messaging channel. * `facebook_messenger` - Only applies to messaging channel. * `instagram` - Only applies to messaging channel. * `team_chat` - Only applies to messaging channel. * `whatsapp` - Only applies to messaging channel. * `email_address` - Only applies to email channel. * `api` - Only applies to work_item channel.
-
-
conference_countinteger— The number of conferences that occurred. -
conference_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in milliseconds. -
consumerobject— The consumer's information.-
consumer_emailstring— The consumer email. -
consumer_namestring— The consumer name. -
consumer_numberstring— The consumer number.
-
-
direct_transfer_countinteger— The number of direct transfers. -
directionstring, possible values:"inbound", "outbound"— The engagement's direction. * inbound * outbound -
dispositionsarray— The dispositions.Items:
-
disposition_idstring— A disposition's specific ID. -
disposition_namestring— A disposition's name.
-
-
dnis_tostring— The original number that was dialed for an engagement. -
durationnumber— The engagement's duration, in milliseconds. -
end_timestring, format:date-time— The engagement end time. -
engagement_idstring— The engagement's specific ID. -
enter_channelobject— The channel that the engagement was in when it entered the Contact Center.-
channelstring, possible values:"voice", "video", "messaging", "email", "work_item"— The channel that the engagement was in when it entered the Zoom Contact Center. -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email_address", "api"— The name of enter sources on the Zoom platform that specifically relate to a channel. * `voice` - voice * `web_video` - web video * `in_app_video` - in-app video * `kiosk_video` - kiosk video * `web_chat` - web chat * `in_app_chat` - in-app chat * `team_chat` - Zoom team chat * `sms` - SMS * `facebook_messenger` - Facebook messenger * `instagram` - Instagram * `whatsapp` - Whatsapp * `email_address` - email * `api` - Work Item API
-
-
eventsarray— All events related to the engagementItems:
-
event_idstring— A event's specific ID. -
event_namestring— A event's name.
-
-
flowsarray— All flows related to the engagement.Items:
-
flow_idstring— A flow's specific ID. -
flow_namestring— A flow's name.
-
-
hold_countinteger— The number of times that a consumer was placed on hold. -
hold_durationnumber— The amount of time that a consumer was placed on hold, in milliseconds. **NOTE** A call may have multiple hold times. -
notesarray— The notes.Items:
-
note_contentstring— This note's content. -
note_idstring— A note's specific ID. -
user_idstring— An agent's specific ID.
-
-
queuesarray— All queues related to the engagement.Items:
-
queue_idstring— A queue's specific ID. -
queue_namestring— A queue's specific name.
-
-
start_timestring, format:date-time— The engagement start time. -
survey_idstring— The survey specfic ID. -
teamsarray— All teams related to the engagement.Items:
-
team_idstring— A team's specific ID. -
team_namestring— A team's name.
-
-
transcript_urlstring— The transcript URL, in `/v2/contact_center/engagements/transcripts/download/{engagementId}` format. -
transfer_completed_countinteger— The number of direct transfers completed. -
transfer_initiated_countinteger— The number of direct transfers initiated. -
usersarray— All agents related to the engagement.Items:
-
user_idstring— The ID of the agent who is set up on the agent profile. -
user_namestring— The first and last name of the agent who is set up on the agent profile.
-
-
voicemail_countinteger— The number of voicemail. -
warm_conference_countinteger— The number of warm conferences initiated. -
warm_conference_durationnumber— The amount of time an agent spent in conversation with an engagement and at least one additional agent, in **milliseconds**. -
warm_transfer_completed_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant and then fully transferred the engagements. -
warm_transfer_durationnumber— The amount of time an agent spent in conversation with another agent while the engagement was on hold, in **milliseconds**. -
warm_transfer_initiated_countinteger— The number of voice or video engagements an agent answered and then warm transferred with another participant with or without fully transferring the engagement.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is **UTC**. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"timezone": "UTC",
"engagement_logs": [
{
"engagement_id": "t0VAFD7FDkdfwHxlN40_w",
"direction": "inbound",
"channels": [
{
"channel": "video",
"channel_source": "web_video"
}
],
"enter_channel": {
"channel": "voice",
"channel_source": "voice"
},
"start_time": "2025-05-26T16:30:08Z",
"end_time": "2025-05-26T16:32:18Z",
"consumer": {
"consumer_name": "Jill Chill",
"consumer_email": "jchill@example.com",
"consumer_number": "+12095551212"
},
"queues": [
{
"queue_id": "_dkUfugn8eDFkRohArKqQ",
"queue_name": "my_queue"
}
],
"users": [
{
"user_id": "i5iDfUroHKU&*FH",
"user_name": "kevin_agent"
}
],
"teams": [
{
"team_id": "wdhgyuYD74wUF",
"team_name": "agent team1"
}
],
"flows": [
{
"flow_id": "CBDH87436Hdjse",
"flow_name": "flow1"
}
],
"events": [
{
"event_id": "rF61SnVrQjyLE2Je7a40uw",
"event_name": "engagement.start"
}
],
"caller_id": "+19135551212",
"ani_from": "+19135551212",
"dnis_to": "+12095551212",
"duration": 38000,
"hold_count": 3,
"hold_duration": 10000,
"warm_transfer_initiated_count": 1,
"warm_transfer_completed_count": 1,
"warm_transfer_duration": 147000,
"direct_transfer_count": 0,
"transfer_initiated_count": 0,
"transfer_completed_count": 0,
"warm_conference_count": 0,
"warm_conference_duration": 10000,
"conference_count": 3,
"blocked": false,
"conference_duration": 54000,
"voicemail_count": 3,
"dispositions": [
{
"disposition_id": "sUEMfweg34GFE",
"disposition_name": "kv"
}
],
"notes": [
{
"note_id": "sdfwe67gaDDG",
"note_content": "content info",
"user_id": "CBVD4fwdfw3DF"
}
],
"transcript_url": "/v2/contact_center/engagements/transcripts/download/t0VAFD7FDkdfwHxlN40_w",
"survey_id": "sghewyDF73FDE",
"aiea_used": "notUsed"
}
],
"page_size": 30,
"total_records": 10,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List historical Zoom Phone to Contact Center call journey data
- Method:
GET - Path:
/contact_center/analytics/log/historical/journey - Tags: Reports V2 (CX Analytics)
View the complete customer journey of a call across both Contact Center and Zoom Phone.
Scopes: contact_center_report:read:admin
Granular Scopes: contact_center:read:call_journey_log:admin
Rate Limit Label: HEAVY
Responses
Status: 200 Generate a list of historical Zoom Phone to Contact Center call journey data.
Content-Type: application/json
-
journeysarray— All Zoom Phone and Contact Center call journeys.Items:
-
ani_fromstring— The phone number that an engagement originated from. -
auto_receptionistsarray— A list of **Auto Receptionist** information. It answers incoming calls with a greeting or IVR menu and routes them to destinations such as phone users, call queues, common areas, voicemail, or an IVR system. With Contact Center integration, auto receptionists often serve as entry points into Contact Center voice flows, directing callers into Contact Center handling.Items:
-
extension_namestring— The Zoom Phone auto receptionist. -
extension_numberstring— The Zoom Phone extension number. -
phone_numberstring— The Zoom Phone number.
-
-
call_queuesarray— A list of **Call Queue** information. In Zoom Phone, this represents a group of phone users or common-area phones configured to handle incoming calls using defined distribution strategies such as simultaneous or round robin. When integrated with Contact Center, a call queue can be designated as a routing target for Contact Center voice flows, enabling Contact Center interactions to be processed through your Phone call queue infrastructure.Items:
-
extension_namestring— The Zoom Phone call queue name. -
extension_numberstring— The Zoom Phone extension number, such as 32784. -
phone_numberstring— The Zoom Phone number.
-
-
channelsarray— All channels on the Zoom platform such as voice, video, or digital.Items:
-
channelstring, possible values:"voice", "video", "messaging", "email"— The name of the channels on the Zoom platform. * voice * video * messaging * email -
channel_sourcestring, possible values:"voice", "web_video", "in_app_video", "kiosk_video", "web_chat", "in_app_chat", "team_chat", "sms", "facebook_messenger", "instagram", "whatsapp", "email_address"— The name of sources on the Zoom platform that specifically relate to a channel. - `voice` - Only applies to voice channel. - `in_app_video` - Only applies to video channel. - `kiosk_video` - Only applies to video channel. - `web_video` - Only applies to video channel. - `in_app_chat` - Only applies to messaging channel. - `in_video_chat` - Only applies to messaging channel. - `web_chat` - Only applies to messaging channel. - `sms` - Only applies to messaging channel. - `facebook_messenger` - Only applies to messaging channel. - `instagram` - Only applies to messaging channel. - `team_chat` - Only applies to messaging channel. - `whatsapp` - Only applies to messaging channel. - `email_address` - Only applies to email channel.
-
-
common_areasarray— A list of **Common Areas** information, it typically deployed in shared office spaces like lobbies or conference rooms. These devices can be members of call queues, shared line groups, or receive calls via auto receptionist. In Zoom Contact Center enabled environments, common-area extensions may also serve as caller IDs or routing targets within Contact Center flows.Items:
-
extension_namestring— The common area name. -
extension_numberstring— The Zoom Phone extension number. -
phone_numberstring— The Zoom Phone number.
-
-
consumerobject— The consumer's information.-
consumer_numberstring— The consumer's number.
-
-
directionstring, possible values:"inbound", "outbound", "internal"— The engagement's direction. * `inbound` * `outbound` * `internal` -
dnis_tostring— The original number that was dialed for an engagement. -
global_engagement_idstring— The global engagement ID. -
inter_opsarray— A list of **Interoperability Operation** information, representing standards-based SIP/H.323 room systems (e.g., Cisco Room, Polycom Room) integrated with Zoom through the Conference Room Connector. These devices are equipped with Zoom Phone calling capabilities, allowing them to make and receive phone calls. In Contact Center scenarios, interop rooms may serve as voice-flow targets or conferencing endpoints, enabling seamless integration of third-party hardware into Contact Center workflows.Items:
-
extension_namestring— The Cisco/Polycom room name. -
extension_numberstring— The Zoom Phone extension number. -
phone_numberstring— The Zoom Phone number.
-
-
queuesarray— All queues related to the engagement.Items:
-
queue_idstring— A queue's specific ID. -
queue_namestring— A queue's specific name.
-
-
shared_line_groupsarray— A list of **Shared Line Group** information. This allows multiple phone users or common-area phones to share a phone number and voicemail inbox. Zoom Phone admins can apply business hours and routing rules to these groups. When used with Zoom Contact Center, shared line groups can be selected as voice-flow targets—calls reaching the shared number are processed by any group member.Items:
-
extension_namestring— The Zoom Phone share line group name. -
extension_numberstring— The Zoom Phone extension number. -
phone_numberstring— The Zoom Phone number.
-
-
start_timestring, format:date-time— The engagement's start time. -
teamsarray— All teams related to the engagement.Items:
-
team_idstring— A team's specific ID. -
team_namestring— A team's name.
-
-
usersarray— All agents related to the engagement.Items:
-
user_idstring— The ID of the agent who is set up on the agent profile. -
user_namestring— The first and last name of the agent who is set up on the agent profile.
-
-
zoom_phone_usersarray— A list of **Zoom Phone User** information, representing an individual extension-enabled user. In integrated Zoom Contact Center scenarios, phone users can act as contact-center agents or recipients—either receiving calls directly transferred from Zoom Contact Center or functioning as members of call queues or auto receptionist routes.Items:
-
extension_namestring— The Zoom Phone user name. -
extension_numberstring— The Zoom Phone short number. -
phone_numberstring— The Zoom Phone number.
-
-
zoom_roomsarray— A list of **Zoom Room** information. Each represents a Zoom Room or standards-based SIP/H.323 room, like Cisco/Polycom, licensed for Zoom Phone. These rooms can make and receive phone calls using Zoom Phone services. When integrated with Contact Center, Zoom Rooms can be used as call destinations, entry points, or agent endpoints within Contact Center voice flows.Items:
-
extension_namestring— The Zoom Room name. -
extension_numberstring— The Zoom Phone extension number. -
phone_numberstring— The Zoom Phone number.
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
timezonestring— The [timezone ID](/docs/api/references/abbreviations/#timezones) to use for the start time and end time in the query. The default is UTC. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"journeys": [
{
"global_engagement_id": "7512200802025393153",
"direction": "inbound",
"channels": [
"voice"
],
"ani_from": "+19135551212",
"dnis_to": "+12095551212",
"start_time": "2025-05-26T16:32:18Z",
"consumer": {
"consumer_number": "+19135551212"
},
"queues": [
{
"queue_id": "sfgwHE&gEFHE",
"queue_name": "callen-voice-queue"
}
],
"users": [
{
"user_id": "sdFHEYF&G*E",
"user_name": "callen huang-agent"
}
],
"teams": [
{
"team_id": "sdFHEYF&G*E",
"team_name": "finlay-child"
}
],
"call_queues": [
{
"extension_name": "test call queue",
"phone_number": "+12097481234",
"extension_number": "7623"
}
],
"zoom_phone_users": [
{
"extension_name": "testSite",
"phone_number": "+12095551212",
"extension_number": "7623"
}
],
"shared_line_groups": [
{
"extension_name": "test slg",
"phone_number": "+12095551212",
"extension_number": "7623"
}
],
"auto_receptionists": [
{
"extension_name": "test-ar",
"phone_number": "+12095551212",
"extension_number": "7623"
}
],
"common_areas": [
{
"extension_name": "test common area",
"phone_number": "+12095551212",
"extension_number": "7623"
}
],
"zoom_rooms": [
{
"extension_name": "my room",
"phone_number": "+12095551212",
"extension_number": "7623"
}
],
"inter_ops": [
{
"extension_name": "Cisco room0101",
"phone_number": "+12097481234",
"extension_number": "26701"
}
]
}
],
"timezone": "UTC",
"page_size": 30,
"total_records": 10,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List operation logs
- Method:
GET - Path:
/contact_center/reports/operation_logs - Tags: Reports V2 (CX Analytics)
Retrieve the Zoom Contact Center management system operation logs report.
The Zoom Contact Center management system operation logs report lets account owners and admins view monthly Zoom Contact Center related admin operation details.
Scopes: contact_center_operation_logs:read:admin
Granular Scopes: contact_center:read:operation_logs:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Inbox messages returned.
Content-Type: application/json
-
highest_watermarkstring, format:date-time— The latest time among the returned records within the query window. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
operation_logsarray— The array of operation log objects.Items:
-
actionstring— The operation's action type. -
agent_region_idstring— Region ID of the Agent. -
agent_region_namestring— Region name of the Agent. -
categorystring— The operation's category type. -
object_idstring— The operation's object ID. -
object_namestring— The operation's object name. -
operation_detailstring— The operation details. -
operation_log_idstring— The operation's unique identifier. -
operatorstring— The user who performed the operation. -
team_idstring— Unique identifier for the agent's team. -
team_namestring— Name of the agent's team. -
timestring, format:date-time— The time when the operation was performed.
-
-
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"operation_logs": [
{
"time": "2024-04-25T07:51:30Z",
"operator": "test@zoomtest.us",
"category": "Account",
"object_name": "test user",
"operation_log_id": "VD8z8Q4UT4yGWhpiGdk5bw",
"action": "Create",
"operation_detail": "Add Flows: [inbox-voicemail]",
"agent_region_id": "test_region_id",
"agent_region_name": "test_region_name",
"team_id": "test_team_id",
"team_name": "test_team_name",
"object_id": "rMTX7iq2RGy6ELcm91bcLA"
}
],
"highest_watermark": "2024-04-25T07:51:30Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br> **Error Code:** `6002` <br> The query time from cannot be greater than to. <br> **Error Code:** `6003` <br> The time range of the query from and to exceeds one month. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List roles
- Method:
GET - Path:
/contact_center/roles - Tags: Roles
Use this API to return a list of roles.
Scopes: contact_center_role:read:admin
Granular Scopes: contact_center:read:list_roles:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Role list returned.
Content-Type: application/json
-
next_page_tokenstring— The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
rolesarray— Information about user roles.Items:
-
last_modified_timestring, format:date-time— The date and time at which the role was last modified. -
modified_bystring— The ID of the user who last modified the role. -
role_descriptionstring— The role's description. -
role_idstring— The role's ID. -
role_namestring— The role's name. -
total_usersinteger— Number of users with the role.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"roles": [
{
"role_id": "-7uu_aUQRL-zXybozrSBWw",
"role_name": "Agent",
"role_description": "Agent role.",
"total_users": 3,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-03-03T05:07:46Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a role
- Method:
POST - Path:
/contact_center/roles - Tags: Roles
Create a new role. Admins can use the role management feature to control access to features and settings in the Zoom web portal.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:write:role:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
privilegesarray— Any one or more of [these privileges](/docs/api/references/contact-center-privileges/) assigned to the role.Items:
string -
role_descriptionstring— The role's description. -
role_namestring— The user role's name.
Example:
{
"role_name": "Agent",
"role_description": "Agent role.",
"privileges": [
"UserManagement:Read"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Role created.
Content-Type: application/json
-
privilegesobject— Any one or more of [these privileges](/docs/api/references/contact-center-privileges/) assigned to the role.-
administration_settingsarrayItems:
string -
analytics_settingsarrayItems:
string -
general_settingsarrayItems:
string
-
-
role_descriptionstring— The role's description. -
role_idstring— The role's ID. -
role_namestring— The role's name.
Example:
{
"role_id": "zeYjXoDOS_eV1QmTpj63PQ",
"role_name": "Agent",
"role_description": "Agent role.",
"privileges": {
"analytics_settings": [
"RptWallboard:Read"
],
"administration_settings": [
"UserManagement:Read"
],
"general_settings": [
"OutboundVoiceCall"
]
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2203` <br> The role name already exists. Please change to a new one. <br> **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `2207` <br> Invalid role privileges: $privileges. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Duplicate a role
- Method:
POST - Path:
/contact_center/roles/duplicate - Tags: Roles
Duplicate the role specified by the original role name and assign it a new name. All settings, permissions, and configurations of the original role will be copied to the new role.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:write:role:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
new_role_namestring— The new, duplicated role's name. -
original_role_namestring— The name of the role to duplicate.
Example:
{
"original_role_name": "Agent",
"new_role_name": "Agent_Copy"
}
Responses
Status: 201 **HTTP Status Code:** `201` Role created.
Content-Type: application/json
-
role_descriptionstring— The role's description. -
role_idstring— The role's ID. -
role_namestring— The role's name.
Example:
{
"role_id": "zeYjXoDOS_eV1QmTpj63PQ",
"role_name": "Agent_Copy",
"role_description": "Agent role copy."
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2203` <br> The role name already exists. Please change to a new one. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a role
- Method:
GET - Path:
/contact_center/roles/{roleId} - Tags: Roles
Get information about a role.
Scopes: contact_center_role:read:admin
Granular Scopes: contact_center:read:role:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Role returned.
Content-Type: application/json
-
last_modified_timestring, format:date-time— The date and time when the role was last modified. -
modified_bystring— The ID of the user who last modified the role. -
privilegesobject— Privileges assigned to the role. Can be one or more of [these permissions](/docs/api/references/contact-center-privileges/).-
administration_settingsarrayItems:
string— [These permissions](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061941#h_01GMEG7MDSBBXS4NSBME5617YX) control access to user and team management, as well as queue management, log management, etc. | Permission Name | Description | | --- | --- | | UserManagement:Read, UserManagement:Edit | Allow user to view and manage users. | | TeamManagement:Read, TeamManagement:Edit | Allow user to view and manage teams. | | RoleManagement:Read, RoleManagement:Edit | Allow user to view and manage roles. | | SkillManagement:Read, SkillManagement:Edit | Allow user to view and manage skills. | | InboxManagement:Read, InboxManagement:Edit | Allow user to view and manage inboxes. | | QueueManagement:Read, QueueManagement:Edit | Allow user to view and manage queues. | | NumberManagement:Read, NumberManagement:Edit | Allow user to view and manage numbers. | | RoutingProfileManagement:Read, RoutingProfileManagement:Edit | Allow user to view and manage routing profiles. | | DispositionManagement:Read, DispositionManagement:Edit | Allow user to view and manage dispositions. | | WaitingRoomManagement:Read, WaitingRoomManagement:Edit | Allow user to view and manage waiting rooms. | | FlowManagement:Read, FlowManagement:Edit | Allow user to view and manage flows in flow editor. | | PreferenceManagement:Read, PreferenceManagement:Edit | Allow user to view and manage account preferences. | | AddressBookManagement:Read, AddressBookManagement:Edit | Allow user to view and manage address books. | | AddressCustomFieldManagement:Read, AddressCustomFieldManagement:Edit | Allow user to view and manage address book custom fields. | | CampaignManagement:Read, CampaignManagement:Edit | Allow user to view and manage web campaigns. | | IntegrationManagement:Read, IntegrationManagement:Edit | Allow user to view and manage integrations. | | RoutingEngineManagement:Read, RoutingEngineManagement:Edit | Allow user to view Routing Engine console. | | LogManagement:Read | Allow user to view and manage logs. | | EngagementLogManagement:Read | Allow user to view the engagement log. | | EngagementLogExport:Edit | Allow user to export engagement log data. | | EngagementLogErasePII:Edit | Allow user to erase personal information in the engagement log. | | VoiceCallLogManagement:Read | Allow user to view the voice calls log. | | VoiceCallLogExport:Edit | Allow user to export voice calls log data. | | SMSLogManagement:Read | Allow user to view the SMS log. | | SMSLogExport:Edit | Allow user to export SMS log data. | | RecordingsLogManagement:Read | Allow user to view the recordings log. | | RecordingsLogExport:Edit | Allow user to export recordings log data. | | VariablesLogManagement:Read | Allow user to view the variables log. | | VariablesLogExport:Edit | Allow user to export variables log data. | | VariablesLogDelete:Edit | Allow user to permanently delete engagement variables. | | VoiceRecordingAccess:Read | Allow user to view list of Cobrowse recordings. | | RecordingPlay:Edit | Allow user to play voice, video and messaging Cobrowse recordings. | | VoiceRecordingDownload:Edit | Allow user to download voice, video and messaging Cobrowse recordings. | | VoiceRecordingDelete:Edit | Allow user to delete voice, video and messaging Cobrowse recordings. | | VoiceDataRetentionExemption:Edit | Allow user to manage data retention exemption for recordings. | -
analytics_settingsarrayItems:
string— [These permissions](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061941#h_01FWHA20K7CF310WJB29QXMNKC) control access to various analytics and reporting features, including real-time analytics, historical reports, and user activity tracking. | Privileges | Description | | :------ | :------ | | `RptMyAgents:Read` | Allow user to view the status of agents. | | `RptQueueAnalytics:Read` | Allow user to view real-time charts. | | `RptQueueAnalyticsOverview:Read` | Allow user to view overview data for all channels. | | `RptActiveChannelEngagements:Read` | Allow user to view active engagements for each channel. | | `RptWallboard:Read` | Allow user to view wallboards. | | `RptWallboard:Edit` | Allow user to add new wallboard views, duplicate existing ones and edit them. | | `RptWallboardShare:Edit` | Allow user to share the wallboard views they create. | | `RptAgentReport:Read` | Allow user to view agent’s timesheets. | | `RptAgentReportOverview:Read` | Allow user to view overview data for all channels. | | `RptAgentReportExport:Edit` | Allow user to export agent time sheet data. | | `RptQueueChartReport:Read` | Allow user to view historical queue charts. | | `RptQueueChartReportOverView:Read` | Allow user to view overview data for all channels. | | `RptQueueChartReportExport:Edit` | Allow user to export queue chart data. | | `RptQueueDetailReport:Read` | Allow user to view historical queue details. | | `RptQueueDetailReportExport:Edit` | Allow user to export queue detail data. | | `RptQueueIntervalReport:Read` | Allow user to view the interval report. | | `RptQueueIntervalReportExport:Edit` | Allow user to export interval report data | | `RptFlowChartReport:Read` | Allow user to view the flow chart report. | | `RptFlowChartReportExport:Edit` | Allow user to export flow chart data. | | `RptFlowDetailReport:Read` | Allow user to view the flow detail report. | | `RptFlowDetailReportExport:Edit` | Allow user to export flow detail data. | | `RptSurvey:Read` | Allow user to view the consumer engagement surveys report. | | `RptSurveyExport:Edit` | Allow user to export engagement survey results. | | `RptSubscriptions:Read` | Allow user to create or view subscriptions. | | `RptCustomReports:Read` | Allow user to view existing reports (including default reports). | | `RptCustomReports:Edit` | Allow user to create and duplicate reports. | | `RptCustomReportsShare:Edit` | Allow user to share default and custom reports with your organization. | | `RptCustomReportsExport:Edit` | Allow user to export default and custom reports. | | `RptCustomReportsSchedule:Edit` | Allow user to schedule default and custom reports. | | `RptLogs:Read` | Allow user to view the logs. | | `RptLogsExport:Edit` | Allow user to export logs. | | `RptLogsErasePII:Edit` | Allow user to erase personal information in the engagement log. | | `RptDashboards:Read` | Allow user to view existing dashboards (including default dashboards). | | `RptDashboards:Edit` | Allow user to create and duplicate dashboards. | | `RptDashboardsShare:Edit` | Allow user to share custom dashboards. | | `RptContactCenter:Read` | Allow user to view the contact center usage report. | | `RptContactCenterExport:Edit` | Allow user to export contact center usage report data. | | `RptContactCenterOperationLog:Read` | Allow user to view the contact center operation log. | | `RptContactCenterOperationLogExport:Edit` | Allow user to export operation log data. | -
general_settingsarrayItems:
string— [These permissions](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061941#h_01FWHA20K7CF310WJB29QXMNKC) control access to start various types of outbound engagements, engagement features, client customization features, etc. | Permission Name | Description | | --- | --- | | OutboundVoiceCall | Allow user to start a new outbound voice engagement to consumer(s). | | OutboundVideoCall | Allow user to start a new outbound video engagement to consumer(s). | | OutboundSMS | Allow user to start a new outbound messaging engagement to consumer(s). | | OutboundEmail | Allow user to start a new outbound email engagement to consumer(s). | | QueueOptInOut | Allow user to opt in or out of their assigned queues. | | OtherUserQueueOpt | Allow user to opt other users in or out of their assigned queues. | | ChangeUserStatus | Allow user to change the Ready/Not Ready status of other users. | | ContactManagement | Allow user to add or edit contacts information in the client. | | VoicemailManagement | Allow user to view and manage the voicemails. | | VoicemailPlay | Allow user to play voicemails. | | VoicemailDownload | Allow user to download voicemails. | | VoicemailAssign | Allow user to assign voicemail to others. | | VoicemailDelete | Allow user to delete voicemails. | | OwnCallRecordingView | Allow user to view and play their own voice, video and messaging Cobrowse recordings. | | MessagingTranscript | Allow user to access the list of messaging transcript. | | MessagingTranscriptDelete | Allow user to delete messaging transcript. | | MessagingTranscriptDownload | Allow user to download messaging transcript. | | EmailTranscript | Allow user to access the list of email transcript. | | EmailTranscriptDelete | Allow user to delete email transcript. | | EmailTranscriptDownload | Allow user to download email transcript. | | ConsumerHistory | Allow user to view consumer history under profile in the client. | | EngagementNote | Allow user to add or edit notes while in an engagement. | | FileShare | Allow user to send and receive files in messaging and email engagements. | | EngagementUpgrade | Allow user to upgrade engagements to voice or video calls. | | ChatToVoiceUpgrade | Allow user to upgrade engagements to voice from Chat(web). | | FacebookToVoiceUpgrade | Allow user to upgrade engagements to voice from Facebook Messenger. | | SMSToVoiceUpgrade | Allow user to upgrade engagements to voice from SMS. | | WhatsAppToVoiceUpgrade | Allow user to upgrade engagements to voice from WhatsApp. | | InstagramToVoiceUpgrade | Allow user to upgrade engagements to voice from Instagram. | | TeamChatToVoiceUpgrade | Allow user to upgrade engagements to voice from Zoom Team Chat. | | ChatToVideoUpgrade | Allow user to upgrade engagements to video from Chat(web). | | FacebookToVideoUpgrade | Allow user to upgrade engagements to video from Facebook Messenger. | | SMSToVideoUpgrade | Allow user to upgrade engagements to video from SMS. | | VoiceToVideoUpgrade | Allow user to upgrade engagements to video from Voice. | | WhatsAppToVideoUpgrade | Allow user to upgrade engagements to video from WhatsApp. | | InstagramToVideoUpgrade | Allow user to upgrade engagements to video from Instagram. | | TeamChatToVideoUpgrade | Allow user to upgrade engagements to video from Zoom Team Chat. | | VideoOnHold | Allow user to put video on hold. | | EngagementTransfer | Allow user to transfer engagements to queues, flows and/or agents. | | CobrowseSession | Allow user to start Cobrowse sessions during voice and web chat engagements. | | WaitingRoomVideoDropIn | Allow user to talk with consumers on video while they’re in the waiting room. | | WaitingRoomVideoChat | Allow user to chat with consumers on engagements while they wait. | | EngagementListen | Allow user to listen in on engagements assigned to other agents. | | EngagementWhisper | Allow user to whisper into engagements assigned to other agents. | | EngagementBarge | Allow user to barge in on engagements assigned to other agents. | | EngagementTakeover | Allow user to take over engagements assigned to other agents. | | ActiveEngagements | Allow user to view and use Open engagements in the client. | | ScheduledEngagements | Allow user to view and use Scheduled engagements in the client. | | CompletedEngagements | Allow user to view and use Closed engagements in the client. | | TeamTab | Allow user to view and use the Teams tab in the client. | | AddressBookTab | Allow user to view and use the Address book tab in the client. | | InboxTab | Allow user to view and use the Inbox tab in the client. | | AnalyticsTab | Allow user to view and use the Analytics tab in the client. |
-
-
role_descriptionstring— The role's description. -
role_idstring— The role's ID. -
role_namestring— The role's name. -
total_usersinteger— The number of users with the role.
Example:
{
"role_id": "zeYjXoDOS_eV1QmTpj63PQ",
"role_name": "Agent",
"role_description": "Agent role.",
"total_users": 3,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-03-03T05:07:46Z",
"privileges": {
"analytics_settings": [
"RptWallboard:Read"
],
"administration_settings": [
"VecUser:Read"
],
"general_settings": [
"outbound-voice-call"
]
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2210` <br> More than one matching role found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a role
- Method:
DELETE - Path:
/contact_center/roles/{roleId} - Tags: Roles
Delete a role.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:delete:role:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Role deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2102` <br> Transfer role ID cannot be empty. <br> **Error Code:** `2210` <br> More than one matching role found. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update a role
- Method:
PATCH - Path:
/contact_center/roles/{roleId} - Tags: Roles
Update a role.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:update:role:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
privilegesarray— One or more of [these privileges](/docs/api/references/contact-center-privileges/) assigned to the role.Items:
string -
role_descriptionstring— The role's description. **Note:** The Admin, Agent, and Supervisor roles do not support modification. -
role_namestring— The role's name.
Example:
{
"role_name": "Agent",
"role_description": "Agent role.",
"privileges": [
"UserManagement:Read"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Role updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2203` <br> The role name already exists. Please change to a new one. <br> **Error Code:** `2204` <br> Administrator|Supervisor|Agent role name cannot be updated. <br> **Error Code:** `2207` <br> Invalid role privileges: $privileges. <br> **Error Code:** `2210` <br> More than one matching role found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete role privileges
- Method:
DELETE - Path:
/contact_center/roles/{roleId}/privileges - Tags: Roles
Removes the specified privileges from a role when given a valid role ID and privilege list.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:delete:role:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
privilegesarray— Privileges assigned to the role. Can be one or more of [these privileges](https://developers.zoom.us/docs/api/references/contact-center-privileges/).Items:
string
Example:
{
"privileges": [
"UserManagement:Read"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Role privileges deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2207` <br> Invalid role privileges: $privileges. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List users of a role
- Method:
GET - Path:
/contact_center/roles/{roleId}/users - Tags: Roles
Retrieve a list of users assigned to a Contact Center role.
Scopes: contact_center_role:read:admin
Granular Scopes: contact_center:read:list_role_users:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Role users list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages. -
usersarray— Information about the role's assigned users.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2210` <br> More than one matching role found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist: {roleId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign a role
- Method:
POST - Path:
/contact_center/roles/{roleId}/users - Tags: Roles
Use this API to assign users to a role. Roles have unique privileges that assigned users have access to. For example, an Administrator or Agent role.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:write:role_user:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Role assigned to user.
Content-Type: application/json
-
usersarray— Information about the users.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist: {roleId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign a user from a role
- Method:
DELETE - Path:
/contact_center/roles/{roleId}/users/{userId} - Tags: Roles
Remove a specific user from a Contact Center role. This operation removes the role-user assignment, meaning the user will no longer have the permissions and privileges associated with this role. The user must currently be assigned to the specified role. Both the role and user must exist in the account.
Scopes: contact_center_role:write:admin
Granular Scopes: contact_center:delete:role_user:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` The user was successfully removed from the role.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The request is invalid or malformed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist: {roleId}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List agent routing profiles
- Method:
GET - Path:
/contact_center/agent_routing_profiles - Tags: Routing Profiles
Returns a list of agent routing profiles.
Scopes: contact_center_routing_profile:read:admin
Granular Scopes: contact_center:read:agent_routing_profile:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Agent routing profile list returned.
Content-Type: application/json
-
agent_routing_profilesarray— Information about the agent routing profiles.Items:
-
agent_routing_profile_descriptionstring— The agent routing profile's decription. -
agent_routing_profile_idstring— The agent routing profile's ID. -
agent_routing_profile_namestring— The agent routing profile's name. -
ignore_transferring_skillsboolean, default:false— When transferred or in overflow, the routing system decides whether to ignore the skills in this routing profile. -
prioritiesarray— The proficiency priority. The higher priority skill category - with proficiency based skills - takes precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment.Items:
-
category_type(required)string, possible values:"skill", "intent"— The category's type. * `skill` - Skill category * `intent` - Intent group -
backup_skillsarray— If customer's input skill or default skill doesn't match, agents with backup skills will be assigned to the engagement. It's only applied to accounts that have the **Agent Routing Profile Enhancement** feature enabled.Items:
-
backup_skill_id(required)string— The backup skill's ID -
backup_skill_namestring— The backup skill's name -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`.
-
-
default_skill_idstring— The default skill's ID. If customer doesn't input any skill, agents must have the default skill. -
default_skill_namestring— The default skill's name. If customer doesn't input any skill, agents must have the default skill. -
intent_group_idstring— The intent group's ID. -
intent_group_namestring— The intent group's name. -
intent_group_requiredboolean— If an intent group is required, agents must have the corresponding intent or they will not be considered for assignment. -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. -
priority_idstring— The priority's ID. -
priority_orderinteger— **Note** This field's values are ordered and unique. This is the proficiency priority. The higher priority skill category - proficiency based skills - will take precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_category_requiredboolean— If a skill category is required, agents must have the corresponding skill or they will not be considered for assignment. -
skill_typestring, possible values:"text", "proficiency"— The skill's type. Only applied when `category_type` is `skill`. * `text` - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * `proficiency` - A proficiency-based skill, such as a second language. Skills in this category have assigned proficiency levels. -
time_stepinteger— The time steps are using to divide queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If there are two time steps, such as `10`, `-1`, it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.
-
-
time_stepsarray— Divide the queue wait time into intervals, in seconds. Each interval starst from last time step to current `time_step`. `-1` means the interval after the last time step. If the `time_step`s are [10, -1], it divides the queue wait time into two intervals: 0-10 seconds, after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.Items:
integer— The time step, in seconds. -
wait_time_agent_in_secondsinteger— Wait time for matched agent availability, in seconds. Set the minimum time before making an agent who matches the profile available for the queue.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"agent_routing_profiles": [
{
"agent_routing_profile_id": "pkOWR9aiR1WLvyDJCBi06A",
"agent_routing_profile_name": "My agent routing profile",
"agent_routing_profile_description": "This is the agent routing profile's description.",
"wait_time_agent_in_seconds": 10,
"priorities": [
{
"priority_id": "jyuhjknkjgfkjhh9453fjdlg",
"priority_order": 1,
"category_type": "skill",
"skill_category_id": "skill_category_id",
"intent_group_id": "intent_group_id",
"skill_category_name": "skill_category_name",
"intent_group_name": "intent_group_name",
"skill_type": "proficiency",
"minimum_proficiency_level": 2,
"skill_category_required": true,
"intent_group_required": false,
"default_skill_id": "sRrl8f3IKQp_LByU08Ibi6g",
"default_skill_name": "default_skill__name",
"time_step": 10,
"backup_skills": [
{
"backup_skill_id": "sk_OpAInMSpGwbwzkbGz6sQ",
"backup_skill_name": "backup_skill_name",
"minimum_proficiency_level": 3
}
]
}
],
"time_steps": [
10
],
"ignore_transferring_skills": false
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create an agent routing profile
- Method:
POST - Path:
/contact_center/agent_routing_profiles - Tags: Routing Profiles
Create an agent routing profile.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:write:agent_routing_profile:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
agent_routing_profile_name(required)string— The agent routing profile's name. -
agent_routing_profile_descriptionstring— The agent routing profile's description. -
ignore_transferring_skillsboolean, default:false— When transferred or in overflow, the routing system decides whether to ignore the skills in this routing profile. -
prioritiesarray— The proficiency priority. The higher priority skill category - with proficiency based skills - takes precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment.Items:
-
category_type(required)string, possible values:"skill", "intent"— The category's type. * `skill` - Skill category * `intent` - Intent group -
backup_skillsarray— If customer's input skill or default skill doesn't match, agents with backup skills will be assigned to the engagement. Only applied to accounts that have the **Agent Routing Profile Enhancement** feature enabled.Items:
-
backup_skill_id(required)string— The backup skill's ID -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`.
-
-
default_skill_idstring— If customer doesn't input any skill, agents must have the default skill. -
intent_group_idstring— The intent group's ID. Required when `category_type` is `intent`. -
intent_group_requiredboolean— If an intent group is required, agents must have the corresponding intent or they will not be considered for assignment. Required when `category_type` is `intent`. -
minimum_proficiency_levelinteger, default:0— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`. -
skill_category_idstring— The skill category's ID. Required when `category_type` is `skill`. -
skill_category_requiredboolean— If a category is required, agents must have the corresponding skill or they will not be considered for assignment. Required when `category_type` is `skill`. -
time_stepinteger— Divides the queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If there are two time steps `10`, `-1`, it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.
-
-
time_stepsarray— The time steps are using to divide queue wait time into intervals, in seconds. Each interval will start from last time step to current `time_step`. `-1` means the interval after the last time step. If the `time_steps` are [10, -1], it will divide queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to account with the `Progressive Relaxation Routing Profile` feature enabled.Items:
integer— The time step, in seconds. -
wait_time_agent_in_secondsinteger, default:3— Wait time for matched agent availability, in seconds. Set the minimum time before making an agent who matches the profile available for the queue.
Example:
{
"agent_routing_profile_name": "My agent routing profile",
"agent_routing_profile_description": "This is the agent routing profile's description.",
"wait_time_agent_in_seconds": 10,
"priorities": [
{
"category_type": "skill",
"skill_category_id": "skill_category_id",
"intent_group_id": "intent_group_id",
"minimum_proficiency_level": 2,
"skill_category_required": true,
"intent_group_required": false,
"default_skill_id": "sRrl8f3IKQp_LByU08Ibi6g",
"time_step": 10,
"backup_skills": [
{
"backup_skill_id": "sk_OpAInMSpGwbwzkbGz6sQ",
"minimum_proficiency_level": 3
}
]
}
],
"time_steps": [
10
],
"ignore_transferring_skills": false
}
Responses
Status: 201 **HTTP Status Code:** `201` Agent routing profile created.
Content-Type: application/json
-
agent_routing_profile_descriptionstring— The agent routing profile's decription. -
agent_routing_profile_idstring— The agent routing profile's ID. -
agent_routing_profile_namestring— The agent routing profile's name. -
ignore_transferring_skillsboolean, default:false— When transferred or in overflow, the routing system decides whether to ignore the skills in this routing profile. -
prioritiesarray— The proficiency priority. The higher priority skill category - with proficiency based skills - takes precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment.Items:
-
category_type(required)string, possible values:"skill", "intent"— The category's type. * `skill` - Skill category * `intent` - Intent group -
backup_skillsarray— If customer's input skill or default skill doesn't match, agents with backup skills will be assigned to the engagement. It's only applied to accounts that have the **Agent Routing Profile Enhancement** feature enabled.Items:
-
backup_skill_id(required)string— The backup skill's ID -
backup_skill_namestring— The backup skill's name -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`.
-
-
default_skill_idstring— The default skill's ID. If customer doesn't input any skill, agents must have the default skill. -
default_skill_namestring— The default skill's name. If customer doesn't input any skill, agents must have the default skill. -
intent_group_idstring— The intent group's ID. -
intent_group_namestring— The intent group's name. -
intent_group_requiredboolean— If an intent group is required, agents must have the corresponding intent or they will not be considered for assignment. -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. -
priority_idstring— The priority's ID. -
priority_orderinteger— **Note** This field's values are ordered and unique. This is the proficiency priority. The higher priority skill category - proficiency based skills - will take precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_category_requiredboolean— If a skill category is required, agents must have the corresponding skill or they will not be considered for assignment. -
skill_typestring, possible values:"text", "proficiency"— The skill's type. Only applied when `category_type` is `skill`. * `text` - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * `proficiency` - A proficiency-based skill, such as a second language. Skills in this category have assigned proficiency levels. -
time_stepinteger— The time steps are using to divide queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If there are two time steps, such as `10`, `-1`, it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.
-
-
time_stepsarray— The time steps are using to divide queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If the `time_steps` are [10, -1], it divides the queue wait time into two intervals: 0-10 seconds, after 10 seconds. It's only applied to account with the `Progressive Relaxation Routing Profile` feature enabled.Items:
integer— The time step, time unit: seconds. -
wait_time_agent_in_secondsinteger— Wait time for matched agent availability, in seconds. Set the minimum time before making an agent who matches the profile available for the queue.
Example:
{
"agent_routing_profile_id": "pkOWR9aiR1WLvyDJCBi06A",
"agent_routing_profile_name": "My agent routing profile",
"agent_routing_profile_description": "This is the agent routing profile's description.",
"wait_time_agent_in_seconds": 10,
"priorities": [
{
"priority_id": "jyuhjknkjgfkjhh9453fjdlg",
"priority_order": 1,
"category_type": "skill",
"skill_category_id": "skill_category_id",
"intent_group_id": "intent_group_id",
"skill_category_name": "skill_category_name",
"intent_group_name": "intent_group_name",
"skill_type": "proficiency",
"minimum_proficiency_level": 2,
"skill_category_required": true,
"intent_group_required": false,
"default_skill_id": "sRrl8f3IKQp_LByU08Ibi6g",
"default_skill_name": "default_skill__name",
"time_step": 10,
"backup_skills": [
{
"backup_skill_id": "sk_OpAInMSpGwbwzkbGz6sQ",
"backup_skill_name": "backup_skill_name",
"minimum_proficiency_level": 3
}
]
}
],
"time_steps": [
10
],
"ignore_transferring_skills": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4004` <br> Category doesn't exist. <br> **Error Code:** `4005` <br> Number of priorities exceeds the maximum limit. <br> **Error Code:** `4006` <br> Category is duplicated in priorities. <br> **Error Code:** `300` <br> Missing required parameter. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict Agent routing profile's name already exists.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get an agent routing profile
- Method:
GET - Path:
/contact_center/agent_routing_profiles/{agentRoutingProfileId} - Tags: Routing Profiles
Retrieve the agent routing profile.
Scopes: contact_center_routing_profile:read:admin
Granular Scopes: contact_center:read:agent_routing_profile:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Agent routing profile returned.
Content-Type: application/json
-
agent_routing_profile_descriptionstring— The agent routing profile's description. -
agent_routing_profile_idstring— The agent routing profile's ID. -
agent_routing_profile_namestring— The agent routing profile's name. -
ignore_transferring_skillsboolean, default:false— When transferred or in overflow, the routing system decides whether to ignore the skills in this routing profile. -
prioritiesarray— The proficiency priority. The higher priority skill category - with proficiency based skills - takes precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment.Items:
-
category_type(required)string, possible values:"skill", "intent"— The category's type. * `skill` - Skill category * `intent` - Intent group -
backup_skillsarray— If customer's input skill or default skill doesn't match, agents with backup skills will be assigned to the engagement. It's only applied to accounts that have the **Agent Routing Profile Enhancement** feature enabled.Items:
-
backup_skill_id(required)string— The backup skill's ID -
backup_skill_namestring— The backup skill's name -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`.
-
-
default_skill_idstring— The default skill's ID. If customer doesn't input any skill, agents must have the default skill. -
default_skill_namestring— The default skill's name. If customer doesn't input any skill, agents must have the default skill. -
intent_group_idstring— The intent group's ID. -
intent_group_namestring— The intent group's name. -
intent_group_requiredboolean— If an intent group is required, agents must have the corresponding intent or they will not be considered for assignment. -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. -
priority_idstring— The priority's ID. -
priority_orderinteger— **Note** This field's values are ordered and unique. This is the proficiency priority. The higher priority skill category - proficiency based skills - will take precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_category_requiredboolean— If a skill category is required, agents must have the corresponding skill or they will not be considered for assignment. -
skill_typestring, possible values:"text", "proficiency"— The skill's type. Only applied when `category_type` is `skill`. * `text` - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * `proficiency` - A proficiency-based skill, such as a second language. Skills in this category have assigned proficiency levels. -
time_stepinteger— The time steps are using to divide queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If there are two time steps, such as `10`, `-1`, it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.
-
-
time_stepsarray— The time steps used to divide queue wait time into intervals, in seconds. Each interval starts from the last time step to current `time_step`. `-1` means the interval after the last time step. If the `time_step`s are [10, -1], it divides the queue wait time into two intervals: 0-10 seconds, after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.Items:
integer— The time step, in seconds. -
wait_time_agent_in_secondsinteger— Wait time for matched agent availability, in seconds. Set the minimum time before making an agent who matches the profile available for the queue.
Example:
{
"agent_routing_profile_id": "fgjdkhgfieryt7465435kjhdkhg",
"agent_routing_profile_name": "My agent routing profile",
"agent_routing_profile_description": "Example routing profile description.",
"wait_time_agent_in_seconds": 10,
"priorities": [
{
"priority_id": "jyuhjknkjgfkjhh9453fjdlg",
"priority_order": 1,
"category_type": "skill",
"skill_category_id": "skill_category_id",
"intent_group_id": "intent_group_id",
"skill_category_name": "skill_category_name",
"intent_group_name": "intent_group_name",
"skill_type": "proficiency",
"minimum_proficiency_level": 2,
"skill_category_required": true,
"intent_group_required": false,
"default_skill_id": "sRrl8f3IKQp_LByU08Ibi6g",
"default_skill_name": "default_skill__name",
"time_step": 10,
"backup_skills": [
{
"backup_skill_id": "sk_OpAInMSpGwbwzkbGz6sQ",
"backup_skill_name": "backup_skill_name",
"minimum_proficiency_level": 3
}
]
}
],
"time_steps": [
10
],
"ignore_transferring_skills": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4007` <br> More than one matching agent routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Agent routing profile does not exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete an agent routing profile
- Method:
DELETE - Path:
/contact_center/agent_routing_profiles/{agentRoutingProfileId} - Tags: Routing Profiles
Delete an agent routing profile.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:delete:agent_routing_profile:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Agent routing profile deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4007` <br> More than one matching agent routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Agent routing profileId doesn't exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update an agent routing profile's details
- Method:
PATCH - Path:
/contact_center/agent_routing_profiles/{agentRoutingProfileId} - Tags: Routing Profiles
Update an agent routing profile details.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:update:agent_routing_profile:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
agent_routing_profile_descriptionstring— The agent routing profile's description. -
agent_routing_profile_namestring— The agent routing profile's name. -
ignore_transferring_skillsboolean, default:false— When transferred or in overflow, the routing system decides whether to ignore the skills in this routing profile. -
prioritiesarray— The proficiency priority. The higher priority skill category - with proficiency based skills - takes precedence over those with lower priority. When comparing agents and all else is equal, the agents with the higher proficiency in the higher prioritized skill category should be considered for assignment.Items:
-
category_type(required)string, possible values:"skill", "intent"— The category's type. * `skill` - Skill category * `intent` - Intent group -
backup_skillsarray— If customer's input skill or default skill doesn't match, agents with backup skills will be assigned to the engagement. Only applied to accounts that have the **Agent Routing Profile Enhancement** feature enabled.Items:
-
backup_skill_id(required)string— The backup skill's ID -
minimum_proficiency_levelinteger— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`.
-
-
default_skill_idstring— If customer doesn't input any skill, agents must have the default skill. -
intent_group_idstring— The intent group's ID. Required when `category_type` is `intent`. -
intent_group_requiredboolean— If an intent group is required, agents must have the corresponding intent or they will not be considered for assignment. Required when `category_type` is `intent`. -
minimum_proficiency_levelinteger, default:0— The skill's minimum proficiency level. **Note** Only applies to skill proficiency based skill categories. If minimum proficiency is set, agents must have a proficiency equal to or greater than the minimum proficiency value set. Only used when `category_type` is `skill`. -
skill_category_idstring— The skill category's ID. Required when `category_type` is `skill`. -
skill_category_requiredboolean— If a category is required, agents must have the corresponding skill or they will not be considered for assignment. Required when `category_type` is `skill`. -
time_stepinteger— Divides the queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If there are two time steps `10`, `-1`, it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.
-
-
time_stepsarray— Divides the queue wait time into intervals, in seconds. Each interval starts from the last time step to the current `time_step`. `-1` means the interval after the last time step. If the `time_step`s are [10, -1], it divides the queue wait time into two intervals: 0-10 seconds, and after 10 seconds. It's only applied to accounts that have the **Progressive Relaxation Routing Profile** feature enabled.Items:
integer— The time step, in seconds. -
wait_time_agent_in_secondsinteger— Wait time for matched agent availability, in seconds. Set the minimum time before making an agent who matches the profile available for the queue.
Example:
{
"agent_routing_profile_name": "My agent routing profile",
"agent_routing_profile_description": "This is the agent routing profile's description.",
"wait_time_agent_in_seconds": 10,
"priorities": [
{
"category_type": "skill",
"skill_category_id": "skill_category_id",
"intent_group_id": "intent_group_id",
"minimum_proficiency_level": 2,
"skill_category_required": true,
"intent_group_required": false,
"default_skill_id": "sRrl8f3IKQp_LByU08Ibi6g",
"time_step": 10,
"backup_skills": [
{
"backup_skill_id": "sk_OpAInMSpGwbwzkbGz6sQ",
"minimum_proficiency_level": 3
}
]
}
],
"time_steps": [
10
],
"ignore_transferring_skills": false
}
Responses
Status: 204 **HTTP Status Code:** `204` Agent routing profile's details updated
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4004` <br> Category doesn't exist. <br> **Error Code:** `4005` <br> Number of priorities exceeds maximum limit. <br> **Error Code:** `4006` <br> Category is duplicated in priorities. <br> **Error Code:** `300` <br> Missing required parameter. <br> **Error Code:** `4007` <br> More than one matching agent routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Agent routing profile doesn't exist.
Status: 409 **HTTP Status Code:** `409` <br> Conflict Agent routing profile's name already exists.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List consumer routing profiles
- Method:
GET - Path:
/contact_center/consumer_routing_profiles - Tags: Routing Profiles
Return a list of consumer routing profiles.
Scopes: contact_center_routing_profile:read:admin
Granular Scopes: contact_center:read:consumer_routing_profile:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Consumer routing profile list returned.
Content-Type: application/json
-
consumer_routing_profilesarray— Information about the consumer routing profiles.Items:
-
accumulated_prioritiesarray— The consumers' accumulated priority. Use ratings to serve consumers from the highest to lowest value, from 100 to 1, based on a consumer attribute. Consumers accumulate priority while waiting in the queue, after top priority consumers.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
incremental_rate(required)integer— The rate that consumers accumulate priority while waiting in line. For example, consumer A and consumer B have the same top priority. If consumer A.wait_time \* consumer A.`incremental_rate` > consumer B.wait_time \* consumer B.`incremental_rate`, consumer A will be first serviced. -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
consumer_routing_profile_descriptionstring— The consumer routing profile's description. -
consumer_routing_profile_idstring— The consumer routing profile's ID. -
consumer_routing_profile_namestring— The consumer routing profile's name. -
top_prioritiesarray— The consumers' top priority. Decide the consumer's position in the queue. The higher the consumer's priority, the earlier the consumer will be served.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"consumer_routing_profiles": [
{
"consumer_routing_profile_id": "-6JPFRKERXymVrf_h2EISQ",
"consumer_routing_profile_name": "My consumer routing profile",
"consumer_routing_profile_description": "This is the consumer routing profile's description.",
"top_priorities": [
{
"attribute_type": "global_variable",
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
],
"accumulated_priorities": [
{
"attribute_type": "global_variable",
"incremental_rate": 10,
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
]
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Create a consumer routing profile
- Method:
POST - Path:
/contact_center/consumer_routing_profiles - Tags: Routing Profiles
Create a consumer routing profile.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:write:consumer_routing_profile:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
consumer_routing_profile_name(required)string— The consumer routing profile's name. -
accumulated_prioritiesarray— The consumers' accumulated priority. Use ratings to serve consumers from the highest to lowest value, from 100 to 1, based on a consumer attribute. Consumers accumulate priority while waiting in the queue, after top priority consumers.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
incremental_rate(required)integer— The rate that consumers accumulate priority while waiting in line. For example, consumer A and consumer B have the same top priority. If consumer A.wait_time \* consumer A.`incremental_rate` > consumer B.wait_time \* consumer B.`incremental_rate`, consumer A will be first serviced. -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
consumer_routing_profile_descriptionstring— The consumer routing profile's description. -
top_prioritiesarray— The consumers' top priority. Decide the consumer's position in the queue. The higher the consumer's priority, the earlier the consumer will be served.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
Example:
{
"consumer_routing_profile_name": "My consumer routing profile",
"consumer_routing_profile_description": "This is the consumer routing profile's description.",
"top_priorities": [
{
"attribute_type": "global_variable",
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
],
"accumulated_priorities": [
{
"attribute_type": "global_variable",
"incremental_rate": 10,
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Consumer routing profile created.
Content-Type: application/json
-
accumulated_prioritiesarray— The consumers' accumulated priority. Use ratings to serve consumers from the highest to lowest value, from 100 to 1, based on a consumer attribute. Consumers accumulate priority while waiting in the queue, after top priority consumers.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
incremental_rate(required)integer— The rate that consumers accumulate priority while waiting in line. For example, consumer A and consumer B have the same top priority. If consumer A.wait_time \* consumer A.`incremental_rate` > consumer B.wait_time \* consumer B.`incremental_rate`, consumer A will be first serviced. -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
consumer_routing_profile_descriptionstring— The consumer routing profile's description. -
consumer_routing_profile_idstring— The consumer routing profile's ID. -
consumer_routing_profile_namestring— The consumer routing profile's name. -
top_prioritiesarray— The consumers' top priority. Decide the consumer's position in the queue. The higher the consumer's priority, the earlier the consumer will be served.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
Example:
{
"consumer_routing_profile_id": "-6JPFRKERXymVrf_h2EISQ",
"consumer_routing_profile_name": "My consumer routing profile",
"consumer_routing_profile_description": "This is the consumer routing profile's description.",
"top_priorities": [
{
"attribute_type": "global_variable",
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
],
"accumulated_priorities": [
{
"attribute_type": "global_variable",
"incremental_rate": 10,
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4010` <br> Number of priorities exceeds the maximum limit. <br> **Error Code:** `4011` <br> Consumer routing profile has duplicated priority attributes. <br> **Error Code:** `4012` <br> Consumer routing profile's related resource not found. <br> **Error Code:** `4013` <br> Invalid `compared_value` or operator in the consumer routing profile. <br> **Error Code:** `4014` <br> Duplicate variables in the consumer routing profile. <br> **Error Code:** `300` <br> Missing required parameter. <br> **Error Code:** `303` <br> Invalid parameter. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict Consumer routing profile's name already exists.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a consumer routing profile
- Method:
GET - Path:
/contact_center/consumer_routing_profiles/{consumerRoutingProfileId} - Tags: Routing Profiles
Retrieve the consumer routing profile.
Scopes: contact_center_routing_profile:read:admin
Granular Scopes: contact_center:read:consumer_routing_profile:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Consumer routing profile returned.
Content-Type: application/json
-
accumulated_prioritiesarray— The consumers' accumulated priority. Use ratings to serve consumers from the highest to lowest value, from 100 to 1, based on a consumer attribute. Consumers accumulate priority while waiting in the queue, after top priority consumers.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
incremental_rate(required)integer— The rate that consumers accumulate priority while waiting in line. For example, consumer A and consumer B have the same top priority. If consumer A.wait_time \* consumer A.`incremental_rate` > consumer B.wait_time \* consumer B.`incremental_rate`, consumer A will be first serviced. -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
consumer_routing_profile_descriptionstring— The consumer routing profile's description. -
consumer_routing_profile_idstring— The consumer routing profile's ID. -
consumer_routing_profile_namestring— The consumer routing profile's name. -
top_prioritiesarray— The consumers' top priority. Decide the consumer's position in the queue. The higher the consumer's priority, the earlier the consumer will be served.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
Example:
{
"consumer_routing_profile_id": "-6JPFRKERXymVrf_h2EISQ",
"consumer_routing_profile_name": "My consumer routing profile",
"consumer_routing_profile_description": "This is the consumer routing profile's description.",
"top_priorities": [
{
"attribute_type": "global_variable",
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
],
"accumulated_priorities": [
{
"attribute_type": "global_variable",
"incremental_rate": 10,
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4015` <br> More than one matching consumer routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Consumer routing profile does not exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a consumer routing profile
- Method:
DELETE - Path:
/contact_center/consumer_routing_profiles/{consumerRoutingProfileId} - Tags: Routing Profiles
Delete a consumer routing profile.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:delete:consumer_routing_profile:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Consumer routing profile deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4015` <br> More than one matching consumer routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Consumer routing profileId doesn't exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a consumer routing profile's details
- Method:
PATCH - Path:
/contact_center/consumer_routing_profiles/{consumerRoutingProfileId} - Tags: Routing Profiles
Update a consumer routing profile details.
Scopes: contact_center_routing_profile:write:admin
Granular Scopes: contact_center:update:consumer_routing_profile:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
accumulated_prioritiesarray— The consumers' accumulated priority. Use ratings to serve consumers from the highest to lowest value, from 100 to 1, based on a consumer attribute. Consumers accumulate priority while waiting in the queue, after top priority consumers.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
incremental_rate(required)integer— The rate that consumers accumulate priority while waiting in line. For example, consumer A and consumer B have the same top priority. If consumer A.wait_time \* consumer A.`incremental_rate` > consumer B.wait_time \* consumer B.`incremental_rate`, consumer A will be first serviced. -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
-
consumer_routing_profile_descriptionstring— The consumer routing profile's description. -
consumer_routing_profile_namestring— The consumer routing profile's name. -
top_prioritiesarray— The consumers' top priority. Decide the consumer's position in the queue. The higher the consumer's priority, the earlier the consumer will be served.Items:
-
attribute_type(required)string, possible values:"address_book_contacts", "entrance_to_queue", "new_customer", "returning_customer", "release_to_queue", "skills", "address_book_variable", "global_variable"— The attribute's type. * `address_book_contacts` - Address book contacts * `entrance_to_queue` - Entrance to queue * `new_customer` - New customer * `returning_customer` - Returning customer * `release_to_queue` - Release to queue * `skills` - Skills * `address_book_variable` - Address book variable * `global_variable` - Global variable -
parameterobject— The parameter for priority's attribute. Parameter is different for each `attribute_type`: 1. `address_book_contacts` `parameter` = { `ids`: [`contanct1_id`, `contact2_id`] // address book contact ID list } 2. `entrance_to_queue` `parameter` = { `enter_queue_start_time`: `09:00 AM`, `enter_queue_end_time`: `11:00 PM`, `enter_queue_timezone`: `America/New_York` } 3. `new_customer` `parameter` = `null` 4. `returning_customer` `parameter` = { `max_returning_minutes`: `60` } 5. `release_to_queue` `parameter` = { `ids`: [`queue1_id`, `queue2_id`] // queue ID list } 6. `skills` `parameter` = { `ids`: [`skill1_id`, `skill2_id`] // skill ID list } 7. `address_book_variable` `parameter` = { `variable_id` = `address_book_variable_id`, `ids` = [`address_book_id1`, `address_book_id2`] // address book ID list `variable_values` = [`value1`, `value2`] } 8. `global_variable` `parameter` = { `variable_id` = `global_variable_id`, `operator` = `equal_to`, `compared_value` = `value` }-
compared_valuestring— Compare the specified value to the variable's value. Only used when `attribute_type` is `global_variable`. -
enter_queue_end_timestring— The end time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_start_timestring— The start time when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
enter_queue_timezonestring— The timezone when the consumer enters the queue. Only used when `attribute_type` is `entrance_to_queue`. -
idsarray— The related entity ID list for priority's attribute. `address_book_contacts` IDs - Address book contact ID list `release_to_queue` IDs - Queue ID list `skills` IDs - Skill ID list. Should under the same skill category. `address_book_variable` IDs - Address book ID listItems:
string -
max_returning_minutesinteger— Maximum number of minutes from last participation to now. Only used when `attribute_type` is `returning_customer`. -
operatorstring, possible values:"equal_to", "greater_than", "less_than", "contains"— The operator between global variable and `compared_value`. Only used when `attribute_type` is `global_variable`. -
variable_idstring— The variable's ID. Only used when `attribute_type` is `global_variable` or `address_book_variable`. -
variable_valuesarray— The optional variable's values. If variable matches any of them, it will match the priority. Only used when `attribute_type` is `address_book_variable`.Items:
string
-
-
Example:
{
"consumer_routing_profile_name": "My consumer routing profile",
"consumer_routing_profile_description": "This is the consumer routing profile's description.",
"top_priorities": [
{
"attribute_type": "global_variable",
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
],
"accumulated_priorities": [
{
"attribute_type": "global_variable",
"incremental_rate": 10,
"parameter": {
"ids": [
"mF8W-YRDRHCWyGMl4UNHWA"
],
"enter_queue_start_time": "09:00 AM",
"enter_queue_end_time": "11:00 PM",
"enter_queue_timezone": "America/New_York",
"max_returning_minutes": 60,
"variable_id": "--FBpU8hSGqIPNUv4lXR4A",
"variable_values": [
"vip"
],
"operator": "equal_to",
"compared_value": "1"
}
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Consumer routing profile's details updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4010` <br> Number of priorities exceeds the maximum limit. <br> **Error Code:** `4011` <br> The consumer routing profile has duplicated priority attributes. <br> **Error Code:** `4012` <br> The consumer routing profile's related resource not found. <br> **Error Code:** `4013` <br> Invalid `compared_value` or operator in the consumer routing profile. <br> **Error Code:** `4014` <br> Duplicate variables in the consumer routing profile. <br> **Error Code:** `300` <br> Missing required parameter. <br> **Error Code:** `303` <br> Invalid parameter. <br> **Error Code:** `4015` <br> More than one matching consumer routing profile found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Consumer routing profile doesn't exist.
Status: 409 **HTTP Status Code:** `409` <br> Conflict Consumer routing profile's name already exists.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List skills
- Method:
GET - Path:
/contact_center/skills - Tags: Skills
Return a list of a skills or a skill category's assigned skills.
Scopes: contact_center_skill:read:admin
Granular Scopes: contact_center:read:list_skills:admin
Rate Limit Label: Medium
Responses
Status: 200 **HTTP Status Code:** `200` Skills list returned.
Content-Type: application/json
-
next_page_tokenstring— The next page token is used to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
skillsarray— Information about the skills.Items:
-
last_modified_timestring, format:date-time— The date and time when the skill was last modified. -
max_proficiency_levelinteger, possible values:1, 2, 3, 4, 5— The skill category's maximum proficiency level, between `1` (low) and `5` (high). Use this value if the skill category's `type` value is `1` (a proficiency-based skill). -
modified_bystring— The ID of the user who last modified the skill. -
skill_category_idstring— The skill's category ID. -
skill_category_namestring— The skill category's name. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type: * 'text' — A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' — A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels. -
total_usersinteger— The total users of the skill
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "jA5csQv1W1oXuYZLspNIZzMOXqTD9r9Rje2",
"page_size": 1,
"total_records": 1,
"skills": [
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"skill_type": "text",
"max_proficiency_level": 5,
"skill_category_name": "Languages",
"skill_category_id": "rvYVEioQQduHb5iHCj7-kg",
"total_users": 5,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a skill
- Method:
POST - Path:
/contact_center/skills - Tags: Skills
Create a skill for skill-based routing. Skills are agent traits that ensure they are the right person to handle a customer interaction.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:write:skill:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
skill_category_idstring— The skill category ID to assign the skill to. -
skill_namestring— The skill's name.
Example:
{
"skill_category_id": "OyQQjWiZQTaBX7RwSK6iRw",
"skill_name": "French"
}
Responses
Status: 201 **HTTP Status Code:** `201` Skills created.
Content-Type: application/json
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
max_proficiency_levelinteger, possible values:1, 2, 3, 4, 5— The skill category's maximum proficiency level, between `1` (low) and `5` (high). Use this value if the skill category's `type` value is `1` (a proficiency-based skill). -
modified_bystring— The ID of the user that last modified this data. -
skill_category_idstring— The skill's category ID. -
skill_category_namestring— The skill category's name. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type: * 'text' — A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' — A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels. -
total_usersinteger— The total number of users of the skill.
Example:
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"skill_type": "text",
"max_proficiency_level": 5,
"skill_category_name": "Languages",
"skill_category_id": "rvYVEioQQduHb5iHCj7-kg",
"total_users": 5,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1502` <br> Skill name already exists. You must select a different name. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1501` <br> Skill category does not exist: $skillCategoryId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List skill categories
- Method:
GET - Path:
/contact_center/skills/categories - Tags: Skills
List all available skill categories and their information.
Scopes: contact_center_skill:read:admin
Granular Scopes: contact_center:read:list_skill_categories:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Skill categories list returned.
Content-Type: application/json
-
next_page_tokenstring— The next page token is used to paginate through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
skill_categoriesarray— Information about the skill categories.Items:
-
last_modified_timestring, format:date-time— The date and time when the skill category was last modified. -
max_proficiency_levelinteger— The skill category's maximum proficiency level, between `1` (low) and system configured highest level (high). This value only returns if the skill category's `type` value is `1`, a proficiency-based skill. -
modified_bystring— The ID of the user who last modified the skill category. -
skill_category_descriptionstring— The skill category's description. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type: * 'text' — A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' — A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels. -
total_agent_routing_profilesinteger— The total agent routing profiles.
-
Example:
{
"next_page_token": "H13iGyIFKCICxrYDlrppjJcDvN2jcBnRzD2",
"page_size": 1,
"skill_categories": [
{
"skill_category_id": "Mu_IEZZHQZGMY9avK74kwA",
"skill_category_name": "Languages",
"skill_category_description": "Medium proficiency.",
"max_proficiency_level": 25,
"total_agent_routing_profiles": 5,
"skill_type": "text",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create a skill category
- Method:
POST - Path:
/contact_center/skills/categories - Tags: Skills
Create a new skill category. Skill categories let you assign several similar skills to a category, such as language skills. You can then route French-speaking callers to contact center agents that have the highest proficiency with French.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:write:skill_category:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
max_proficiency_levelinteger— The skill category's maximum proficiency level, between `1` (low) and system configured highest level (high). Use this value if the skill category's `type` value is `1` (a proficiency-based skill). -
skill_category_descriptionstring— The skill category's description. -
skill_category_namestring— The skill category's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type. * 'text' - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' - A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels.
Example:
{
"max_proficiency_level": 25,
"skill_category_name": "Languages",
"skill_category_description": "Medium proficiency.",
"skill_type": "text"
}
Responses
Status: 201 **HTTP Status Code:** `201` Skill category created.
Content-Type: application/json
-
last_modified_timestring, format:date-time— The date and time when the skill category was last modified. -
max_proficiency_levelinteger— The skill category's maximum proficiency level, between `1` (low) and system configured highest level (high). Use this value if the skill category's `type` value is `1`, for a proficiency-based skill. -
modified_bystring— The ID of the user who last modified the skill category. -
skill_category_descriptionstring— The skill category's description. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type. * 'text' - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' - A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels.
Example:
{
"skill_category_id": "Mu_IEZZHQZGMY9avK74kwA",
"skill_category_name": "Languages",
"skill_category_description": "Medium proficiency.",
"skill_type": "text",
"max_proficiency_level": 25,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1502` <br> The skill category highest proficiency level is `5`, and the lowest level is `1`. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get a skill category
- Method:
GET - Path:
/contact_center/skills/categories/{skillCategoryId} - Tags: Skills
Return information about a specific skill category.
Scopes: contact_center_skill:read:admin
Granular Scopes: contact_center:read:skill_category:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Skill category returned.
Content-Type: application/json
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
max_proficiency_levelinteger— The skill category's maximum proficiency level, between `1` (low) and system configured highest level (high). This value only returns if the skill category's `type` value is `1`, a proficiency-based skill. -
modified_bystring— The ID of the user that last modified this data. -
skill_category_descriptionstring— The skill category's description. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type. * 'text' - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' - A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels.
Example:
{
"skill_category_id": "Mu_IEZZHQZGMY9avK74kwA",
"skill_category_name": "Languages",
"skill_category_description": "Medium proficiency.",
"max_proficiency_level": 25,
"skill_type": "text",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1501` <br> Skill category does not exist: $skillCategoryId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a skill category
- Method:
DELETE - Path:
/contact_center/skills/categories/{skillCategoryId} - Tags: Skills
Delete an existing skill category.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:delete:skill_category:admin
Rate Limit Label: Light
Responses
Status: 204 **HTTP Status Code:** `204` Skill category deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1501` <br> Skill category does not exist: $skillCategoryId.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a skill category
- Method:
PATCH - Path:
/contact_center/skills/categories/{skillCategoryId} - Tags: Skills
Update a skill category.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:update:skill_category:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
max_proficiency_levelinteger— The skill category's maximum proficiency level, between `1` (low) and system configured highest level (high). Use this value if the skill category's `type` value is `1`, a proficiency-based skill. -
skill_category_descriptionstring— The skill category's description. -
skill_category_namestring— The skill category's name.
Example:
{
"max_proficiency_level": 25,
"skill_category_name": "Languages",
"skill_category_description": "Medium proficiency."
}
Responses
Status: 204 **HTTP Status Code:** `204` Skill category updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1502` <br> The skill category highest proficiency level is `5`, and the lowest level is `1`. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1501` <br> Skill category does not exist: $skillCategoryId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get a skill
- Method:
GET - Path:
/contact_center/skills/{skillId} - Tags: Skills
Return a skill's information and its usage.
Scopes: contact_center_skill:read:admin
Granular Scopes: contact_center:read:skill:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Skill usage information returned.
Content-Type: application/json
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
max_proficiency_levelinteger, possible values:1, 2, 3, 4, 5— The skill category's maximum proficiency level, between `1`, lowest, and `5`, highest. Use this value if the skill category's `type` value is `1`, a proficiency-based skill. -
modified_bystring— The ID of the user that last modified this data. -
skill_category_idstring— The skill's category ID. -
skill_category_namestring— The skill category's name. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name. -
skill_typestring, possible values:"text", "proficiency"— The skill category's type. * 'text' - A text-based skill, such as a geographic location. Skills in this category do not have assigned skill levels. * 'proficiency' - A proficiency-based skill, such as a second language. Skills in this type of category have assigned proficiency levels. -
total_usersinteger— The total users of the skill
Example:
{
"skill_id": "saaHWgVMGQU69soco456oNA",
"skill_name": "French",
"skill_type": "text",
"max_proficiency_level": 5,
"skill_category_name": "Languages",
"skill_category_id": "rvYVEioQQduHb5iHCj7-kg",
"total_users": 5,
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1408` <br> More than one matching skill found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> Skill does not exist: $skillId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a skill
- Method:
DELETE - Path:
/contact_center/skills/{skillId} - Tags: Skills
Delete a skill.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:delete:skill:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204 ` Skill deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1408` <br> More than one matching skill found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> Skill does not exist: $skillId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a skill
- Method:
PATCH - Path:
/contact_center/skills/{skillId} - Tags: Skills
Use this API to update a skill's name.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:update:skill:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
skill_namestring— The skill's new name.
Example:
{
"skill_name": "this is a skill name"
}
Responses
Status: 204 **HTTP Status Code:** `204` Skill updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1408` <br> More than one matching skill found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> Skill does not exist: $skillId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List skill users
- Method:
GET - Path:
/contact_center/skills/{skillId}/users - Tags: Skills
Retrieve a list of users assigned to a skill.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:list_skill_users:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Returns a list of users assigned to a skill.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
usersarray— Information about the skill users.Items:
-
cc_user_idstring— The Contact Center user identifier. -
display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1408` <br> More than one matching skill found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> Skill does not exist: {skillId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List teams
- Method:
GET - Path:
/contact_center/teams - Tags: Teams
Retrieve a list of all teams with details, including supervisors and agents.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Team list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
teamsarray— Information about the teams.Items:
-
created_timestring, format:date-time— The team's creation date and time. -
modify_timestring, format:date-time— The team's last modified date and time. -
parent_team_idstring— The team's parent team ID. -
parent_team_namestring— The team's parent team name. -
team_descriptionstring— The team's description. -
team_idstring— The team's ID. -
team_namestring— The team's name.
-
-
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"teams": [
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Sales Team",
"team_description": "This is online team",
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF",
"parent_team_name": "Online sale team",
"created_time": "2025-09-09T07:21:57Z",
"modify_time": "2025-09-09T07:21:57Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests For more information, see [rate limits](/docs/api/rate-limits/).
Create a team
- Method:
POST - Path:
/contact_center/teams - Tags: Teams
Create a new team.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:write:team:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
parent_team_id(required)string— The team's parent team ID. -
team_name(required)string— The team's name. -
team_descriptionstring— The team's description.
Example:
{
"team_name": "Online Team",
"team_description": "This is online team",
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF"
}
Responses
Status: 201 **HTTP Status Code:** `201` Successfully add new team.
Content-Type: application/json
-
created_timestring, format:date-time— The date and time when this data was created. -
parent_team_idstring— The team's parent team ID. -
parent_team_namestring— The team's parent team name. -
team_descriptionstring— The team's description. -
team_idstring— The team's ID. -
team_namestring— The team's name.
Example:
{
"team_id": "Ikl0Wx89Tx-2XBoYVz53BQ",
"team_name": "Online Team",
"team_description": "This is online team",
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF",
"parent_team_name": "Sales team",
"created_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4105` <br> The team name can not be duplicated. <br> **Error Code:** `4108` <br> Not support concurrent modification of hierarchy operations. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get a team
- Method:
GET - Path:
/contact_center/teams/{teamId} - Tags: Teams
Get information about a team.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Team detail returned.
Content-Type: application/json
-
created_timestring, format:date-time— The team's creation date and time. -
modify_timestring, format:date-time— The team's last modified date and time. -
parent_team_idstring— The team's parent team ID. -
parent_team_namestring— The team's parent team name. -
team_descriptionstring— The team's description. -
team_idstring— The team's ID. -
team_namestring— The team's name.
Example:
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Online team",
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF",
"parent_team_name": "Online sale team",
"team_description": "This is online team",
"created_time": "2025-06-09T07:21:57Z",
"modify_time": "2025-06-09T07:21:57Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4102` <br> Team does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Delete a team
- Method:
DELETE - Path:
/contact_center/teams/{teamId} - Tags: Teams
Delete a specified team.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:delete:team:admin
Rate Limit Label: HEAVY
Responses
Status: 204 Team deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4108` <br> This API does not support concurrent modification of hierarchy operations. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4102` <br> Team does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Update a team
- Method:
PATCH - Path:
/contact_center/teams/{teamId} - Tags: Teams
Update a team's details.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:update:team:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
team_name(required)string— The team's name. -
team_descriptionstring— The team's description.
Example:
{
"team_name": "Online Team",
"team_description": "This is online team"
}
Responses
Status: 204 Team updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4102` <br> Team does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List team agents
- Method:
GET - Path:
/contact_center/teams/{teamId}/agents - Tags: Teams
Retrieve a list of a team's assigned agents.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Information about team agents.
Content-Type: application/json
-
agentsarray— A list of agents assigned to the team.Items:
-
cc_user_idstring— The Contact Center user identifier. -
user_display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"agents": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_display_name": "Jane Doe",
"user_email": "jchill@example.com",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4106` <br> Unable to process team request. <br> **Error Code:** `4102` <br> The team does not exist. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> The access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign team agents
- Method:
POST - Path:
/contact_center/teams/{teamId}/agents - Tags: Teams
Assign agents to a team. Assign one or more users as agents to the specified team. This API supports partial success - the response includes only the agents that were successfully assigned. Any user IDs that are invalid, unresolvable, or already assigned to the team will not appear in the response. To determine which users were not assigned, compare the returned agents list with the requested user IDs.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:write:team:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_idsarray— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 Team agents assigned.
Content-Type: application/json
-
agentsarray— Information about the assigned agents.Items:
-
assigned_timestring, format:date-time— The date and time when the agent was successfully assigned to the team. -
cc_user_idstring— The Contact Center user identifier. -
user_display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"agents": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"user_display_name": "Jane Doe",
"user_email": "jchill@example.com",
"assigned_time": "2025-09-03T05:07:46Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4103` <br> The number of user IDs exceeds 100. <br> **Error Code:** `4102` <br> The team does not exist. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> The access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign team agents
- Method:
DELETE - Path:
/contact_center/teams/{teamId}/agents - Tags: Teams
Unassign agents from a team.
The API is all-or-nothing. On success - Returns HTTP 204 No Content - all supervisors unassigned On failure - Throws an exception and returns an error response - no agents unassigned
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:delete:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 Team agents removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4108` <br> Concurrent hierarchy modifications are not supported. <br> **Error Code:** `4102` <br> Team does not exist. <br> **Error Code:** `4106` <br> An error occurred while processing the team operation. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> The access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List a team's child teams
- Method:
GET - Path:
/contact_center/teams/{teamId}/children - Tags: Teams
Get a list of a team's child teams.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Team agents' information.
Content-Type: application/json
-
child_teamsarray— The team's child teams.Items:
-
has_childrenboolean— Whether the team has a child team. -
levelinteger— The team's hierarchy level. -
parent_team_idstring— The team's parent team ID. -
team_idstring— The team's ID. -
team_namestring— The team's name.
-
-
levelinteger— The current team's hierarchy level. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"level": 1,
"child_teams": [
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Parent team",
"level": 1,
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF",
"has_children": true
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4106` <br> Call team server error. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Move a team
- Method:
PATCH - Path:
/contact_center/teams/{teamId}/move - Tags: Teams
Move a team's level.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:update:team:admin
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
parent_team_id(required)string— The parent team's ID.
Example:
{
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF"
}
Responses
Status: 204 Team moved.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4108` <br> This API does not support concurrent modification of hierarchy operations. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4102` <br> Team does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List team's parent teams
- Method:
GET - Path:
/contact_center/teams/{teamId}/parents - Tags: Teams
Get a list of a team's parent teams.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Team parent hierarchy returned.
Content-Type: application/json
-
level(required)integer— The team's hierarchy level. -
team_id(required)string— The team's ID. -
team_name(required)string— The team's name. -
parent_teamsarray— The team's parent teams.Items:
-
levelinteger— The team's hierarchy level. -
parent_team_idstring— The team's parent team ID. -
team_idstring— The team's ID. -
team_namestring— The team's name.
-
Example:
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Test team",
"level": 0,
"parent_teams": [
{
"team_id": "2mDPBg3vSYC_l6crQgeCkA",
"team_name": "Parent team",
"level": -1,
"parent_team_id": "CDl0Wx89Tx-2XBoYVz12DF"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4106` <br> Call team server error. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4102` <br> Team does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List team supervisors
- Method:
GET - Path:
/contact_center/teams/{teamId}/supervisors - Tags: Teams
Lists the supervisors assigned to a specific team.
Scopes: contact_center_team:read:admin
Granular Scopes: contact_center:read:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Team supervisor's information.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
supervisorsarray— A list of supervisor objects containing user information.Items:
-
cc_user_idstring— The Contact Center user identifier. -
user_display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"supervisors": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_display_name": "Jane Doe",
"user_email": "jchill@example.com",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4102` <br> The team does not exist. <br> **Error Code:** `4106` <br> Unable to process team request. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> The access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign team supervisors
- Method:
POST - Path:
/contact_center/teams/{teamId}/supervisors - Tags: Teams
Assign supervisors to a team. Assign one or more users as supervisors to the specified team. This API supports partial success - the response includes only the supervisors that were successfully assigned. Any user IDs that are invalid, unresolvable, or already assigned to the team will not appear in the response. To determine which users were not assigned, compare the returned supervisors list with the requested user IDs.
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:write:team:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
user_ids(required)array— The user identifiers. The values can be a mix of email addresses, Meetings user IDs, or Contact Center user IDs.Items:
string
Example:
{
"user_ids": [
"ukAAkZKfROKMSw1bj_RDFQ"
]
}
Responses
Status: 201 Successfully assigned team supervisors.
Content-Type: application/json
-
supervisorsarray— Information about the supervisors.Items:
-
assigned_timestring, format:date-time— The timestamp when the supervisor was successfully assigned. -
cc_user_idstring— The Contact Center user identifier. -
user_display_namestring— The user's display name. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"supervisors": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"user_display_name": "Jane Doe",
"user_email": "jchill@example.com",
"assigned_time": "2025-09-03T05:07:46Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4103` <br> The number of user IDs exceeds the limit of 50. <br> **Error Code:** `4104` <br> The number of supervisors cannot exceed 50. <br> **Error Code:** `4102` <br> The team does not exist. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign team supervisors
- Method:
DELETE - Path:
/contact_center/teams/{teamId}/supervisors - Tags: Teams
Unassign supervisors from a team.
The API is all-or-nothing. On success - Returns HTTP 204 No Content - all supervisors unassigned On failure - Throws an exception and returns an error response - no supervisors unassigned
Scopes: contact_center_team:write:admin
Granular Scopes: contact_center:delete:team:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 Team supervisors removed.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `4101` <br> This account does not have the Teams feature enabled. <br> **Error Code:** `4102` <br> Team does not exist. <br> **Error Code:** `4106` <br> An error occurred while processing the team operation. <br> **Error Code:** `4108` <br> Concurrent hierarchy modifications are not supported." <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> The access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> The user account is deactivated. <br> **Error Code:** `1022` <br> The user does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token lacks the required role privileges to perform this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List user profiles
- Method:
GET - Path:
/contact_center/users - Tags: Users
Returns a list of Contact Center users.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:list_users:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all records available across pages. -
usersarray— Information about the users.Items:
-
add_ons_planarray— This field is optional. The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user. -
billing_account_namestring— The name of the Zoom Billing account to assign to the user. -
cc_user_idstring— The Contact Center user identifier. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
display_namestring— The user's display name. -
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
modified_bystring— The ID of the user that last modified this data. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
region_idstring— The Contact Center region identifier. -
region_namestring— The Contact Center region name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as "Lunch" or "Away until Monday" -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`. -
sub_status_namestring, possible values:"Break", "End Shift", "Forced", "Meal", "Meeting", "Training"— The user's reason when the user status is `Not Ready`. To query a list of default and custom `Not Ready` reasons, call [List System Statuses](/docs/contact-center/apis/#operation/listSystemStatus) (filter by "queue_opt_out_and_not_ready_status" status_category) Default `Not Ready` reasons: * Break * End Shift * Forced * Meal * Meeting * Training -
teamsarray— The teams the user is assigned to.Items:
-
team_idstring— The ID of the team. -
team_namestring— The dislpay name of the team.
-
-
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"client_integration": "Salesforce",
"status_id": "2",
"status_name": "Not Ready",
"sub_status_id": "21",
"sub_status_name": "Meal",
"user_access": "active",
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"country_iso_code": "US",
"region_id": "8f71O6rWT8KFUGQmJIFAdQ",
"region_name": "Main Region",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"teams": [
{
"team_id": "qlU902FoTD-dFi9QnCdZhw",
"team_name": "Support Team"
}
],
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q",
"billing_account_name": "main billing account"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field: {fieldName} <br> **Error Code:** `302` <br> Invalid enum value: 'enabled' for the field: 'user_access'. The value must be one of: [active, inactive]. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br> **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Create a user's profile
- Method:
POST - Path:
/contact_center/users - Tags: Users
Create a Contact Center user.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:write:user:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
add_ons_planarray— This field is optional. The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
emergency_callingboolean— Allow users to contact emergency services through their device's native phone system or Zoom Phone. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
region_idstring— The Contact Center region identifier. -
role_idstring— The user's Contact Center role identifier. -
template_idstring— To retrieve the template ID, call the **List user templates** API. The template ID must correspond to a template with a status of `Active` and a type of `Add`. When using an `Add`-type template, omit all other fields in the request to apply the complete template configuration. If both individual field values and a template ID are provided, the individual field values take precedence over the template settings. -
user_accessstring, possible values:"active", "inactive"— The user's Contact Center access status. * `active` - The user's role permissions allow them to access Contact Center. * `inactive` - The user cannot access Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
Example:
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"country_iso_code": "US",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"user_access": "active",
"region_id": "8f71O6rWT8KFUGQmJIFAdQ",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"template_id": "OlK7lczzT_e7h6p1Q6wGdg",
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"emergency_calling": true,
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q"
}
Responses
Status: 201 **HTTP Status Code:** `201` User created.
Content-Type: application/json
-
add_ons_planarray— This field is optional. The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the Zoom Billing account. -
billing_account_namestring— The name of the Zoom Billing account. -
cc_user_idstring— The Contact Center user identifier. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
display_namestring— The user's display name. -
emergency_callingboolean— Allow users to contact emergency services through their device's native phone system or Zoom Phone. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
region_idstring— The Contact Center region identifier. -
region_namestring— The Contact Center region name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as `Lunch` or `Away until Monday` -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
Example:
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"country_iso_code": "US",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"status_id": "1",
"status_name": "Offline",
"user_access": "active",
"region_id": "8f71O6rWT8KFUGQmJIFAdQ",
"region_name": "Main Region",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"emergency_calling": true,
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q",
"billing_account_name": "multi billing account"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1003` <br> User creation failed. Try again later. <br> **Error Code:** `1004` <br> Invalid user ID or user email: $email. <br> **Error Code:** `1007` <br> User already exists: $email. <br> **Error Code:** `1009` <br> User ID or user email cannot be empty at the same time. <br> **Error Code:** `8003` <br> User template not found: $template_id. <br> **Error Code:** `8004` <br> User template type error: $template_id. <br> **Error Code:** `8005` <br> User template status error: $template_id. <br> **Error Code:** `290010` <br> The selected package or add-ons is not enough. <br> **Error Code:** `1701` <br> The account package does not exist: $zoom_contact_center_package. <br> **Error Code:** `1702` <br> The account addons package does not exist: $zoom_contact_center_addons_plan. <br> **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1006` <br> The account "$client_integration" client integration does not exist. Add it to the "Integrations" function module. <br> **Error Code:** `2201` <br> Role does not exist: $role_id. <br> **Error Code:** `2202` <br> Country ISO Code does not exist: $country_iso_code. <br> **Error Code:** `1017` <br> Region does not exist. <br> **Error Code:** `1020` <br> The account $client_integration client integration name does not exist. Add it to the **Integrations** function module. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch delete user profiles
- Method:
DELETE - Path:
/contact_center/users - Tags: Users
Batch delete Contact Center users.
Note Either user_ids or user_emails needs to be provided. If both user_ids and user_emails are provided, only user_ids will be used, while user_emails will be ignored.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:delete:batch_users:admin
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` Users have been batch-deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1015` <br> User IDs or user emails cannot be empty at the same time. <br> **Error Code:** `1016` <br> Users supports a maximum of 20. <br> **Error Code:** `300` <br> Invalid user ids: [user_ids]. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1012` <br> User does not exist: [user_ids]. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch update user profiles
- Method:
PATCH - Path:
/contact_center/users - Tags: Users
Batch update Contact Center users.
Note For each user object in the users array, you must provide either user_id or user_email. If both user_id and user_email are provided for the same user object, only user_id will be used, while user_email will be ignored.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:update:batch_users:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
usersarray— Information about the users, the maximum number of updated users is 20.Items:
-
add_ons_planarray— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package. *`zoom_contact_center_for_epic` - Contact Center for Epic or Contact Center for Epic Concurrent Package.Items:
string, possible values:"ai_expert_assist", "zoom_contact_center_for_service_cloud_voice", "zoom_contact_center_for_epic"— The Contact Center add-ons plan to assign to the user. -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user. -
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center's client integration. -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
role_idstring— The user's Contact Center role identifier. -
status_idstring— The user's status ID. -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`. -
template_idstring— To retrieve the template ID, call the **List User's Templates** API. The template ID must correspond to a template with a status of `Active` and a type of `Update`. If you provide this value, leave all other fields blank to apply the settings from the template. Only the settings from the template indicated as 'override' will be applied to the user. If you specify both individual values and a template in the request, the individual values take priority over the template settings. -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The email, Meetings user ID, or Contact Center ID used to identify the user. This value will not be modified.
-
Example:
{
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_email": "jchill@example.com",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"user_access": "active",
"country_iso_code": "US",
"template_id": "4pPgojTBRC69wEYSlDhffA",
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"billing_account_id": "shakhajdsdasdkhas"
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Users updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `8003` <br> User template not found: {templateId} <br> **Error Code:** `8004` <br> User template type error: {templateId} <br> **Error Code:** `8005` <br> User template status error: {templateId} <br> **Error Code:** `290010` <br> The selected package or add-ons is not enough. <br> **Error Code:** `1701` <br> The account package does not exist: $zoom_contact_center_package. <br> **Error Code:** `1702` <br> The account addons package does not exist: $zoom_contact_center_addons_plan. <br> **Error Code:** `1113` <br> The status must be 'Not Ready' when updating sub status. <br> **Error Code:** `2202` <br> Country ISO Code does not exist: {country_iso_code} <br> **Error Code:** `8006` <br> The Launch URL is invalid: {url} <br> **Error Code:** `300` <br> Invalid user email: {user_email}. <br> **Error Code:** `1012` <br> All users do not exist. <br> **Error Code:** `1009` <br> Either user_id or email is required. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {user_id}. <br> **Error Code:** `1101` <br> Status does not exist: {status_id}. <br> **Error Code:** `1102` <br> Sub status does not exist: {sub_status_id}. <br> **Error Code:** `2201` <br> Role does not exist: {roleId}. <br> **Error Code:** `1006` <br> The account {client_integration_name} client integration does not exist. Add it to the 'Integrations' function module. <br> **Error Code:** `1020` <br> The account {client_integration_name} client integration name does not exist. Add it to the 'Integrations' function module. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch create user profiles
- Method:
POST - Path:
/contact_center/users/batch - Tags: Users
Batch create Contact Center users.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:write:batch_users:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
usersarray— Information about the users. The maximum number of created users is 20.Items:
-
add_ons_planarray— This field is optional. The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
role_idstring— The user's Contact Center role identifier. -
template_idstring— To retrieve the template ID, call the **List user templates** API. The template ID must correspond to a template with a status of `Active` and a type of `Add`. When using an `Add`-type template, omit all other fields in the request to apply the complete template configuration. If both individual field values and a template ID are provided, the individual field values take precedence over the template settings. -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user can't access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"country_iso_code": "US",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"user_access": "active",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"template_id": "4pPgojTBRC69wEYSlDhffA",
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q"
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Users created.
Content-Type: application/json
-
usersarray— Information about the users.Items:
-
add_ons_planarray— This field is optional. The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The IDF of the Zoom Billing account to assign to the user. -
billing_account_namestring— The name of the Zoom Billing account to assign to the user. -
cc_user_idstring— The Contact Center user identifier. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
display_namestring— The user's display name. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's availability status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline * Ready * Not Ready * Occupied * A custom user status, such as "Lunch" or "Away until Monday" -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
Example:
{
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"country_iso_code": "US",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"status_id": "1",
"status_name": "Offline",
"user_access": "active",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q",
"billing_account_name": "main billing account"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `8003` <br> User template not found: {template_id}. <br> **Error Code:** `8004` <br> User template type error: {template_id}. <br> **Error Code:** `8005` <br> User template status error: {template_id}. <br> **Error Code:** `290010` <br> The selected package or add-ons is not enough. <br> **Error Code:** `1701` <br> The account package does not exist: {package_name}.. <br> **Error Code:** `1702` <br> The account addons package does not exist: {add_ons_plan_name}. <br> **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `1003` <br> User creation failed. Try again later. <br> **Error Code:** `1006` <br> The account {client_integration} client integration does not exist. <br> **Error Code:** `1007` <br> User already exists: {user_email}. <br> **Error Code:** `1009` <br> User ID or user email cannot be empty at the same time. <br> **Error Code:** `2202` <br> Country ISO Code does not exist: {country_iso_code}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2201` <br> Role does not exist: {role_id}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Batch update user status
- Method:
PATCH - Path:
/contact_center/users/status - Tags: Users
Batch update Contact Center users' statuses.
Note Uses all-or-nothing validation - if any user fails validation, no updates are applied and all errors are returned. Only one batch request per account is allowed at a time. Concurrent requests receive a 429 error.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:write:batch_users:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
usersarray— Information about the users, the maximum number of updated users is 20.Items:
-
status_idstring— The user's status ID. -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`. -
user_emailstring, format:email— The user's email address. -
user_idstring— The email, Meetings user ID, or Contact Center ID used to identify the user. This value will not be modified.
-
Example:
{
"users": [
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"user_email": "jchill@example.com",
"status_id": "1",
"sub_status_id": "21"
}
]
}
Responses
Status: 204 **HTTP Status Code:** `204` Users' statuses updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `301` <br> Validation failed. Includes errors array with per-user failures. <br> **Error Code:** `1009` <br> User ID or user email cannot be empty at the same time. <br> **Error Code:** `1113` <br> The status must be `Not Ready` when updating sub status. <br> **Error Code:** `1114` <br> The status does not allow updating to {status_name}. <br> **Error Code:** `1115` <br> The sub status does not allow updating to {sub_status_name}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1012` <br> All users do not exist. <br> **Error Code:** `1001` <br> User does not exist: {user_id}. <br> **Error Code:** `1101` <br> Status does not exist: {status_id}. <br> **Error Code:** `1102` <br> Sub status does not exist: {sub_status_id}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br> **Error Code:** `4001` <br> User update failed. Try again later. <br>
List user templates
- Method:
GET - Path:
/contact_center/users/templates - Tags: Users
Return the user template list
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:user_templates:admin
Rate Limit Label: LIGHT
Responses
Status: 200 User Template list returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages. -
user_templatesarray— Information about the user template.Items:
-
template_idstring— The template ID. -
template_namestring— The template name. -
template_statusstring, possible values:"active", "inactive", "needs_attention"— The user template status. * `active` - The user template can be used. * `inactive` - The user template cannot be used. * `needs_attention` - The user template is missing required attributes and cannot be used. -
template_typestring, possible values:"add", "update"— The user template type. * `update` - Update the user type template. * `add` - Create the user type template.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"user_templates": [
{
"template_id": "OlK7lczzT_e7h6p1Q6wGdg",
"template_name": "template_update",
"template_type": "update",
"template_status": "active"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a user template
- Method:
POST - Path:
/contact_center/users/templates - Tags: Users
Create a user template.
Scopes: contact_center_user_template:write:admin
Granular Scopes: contact_center:write:user_templates:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
package(required)object— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package.-
package_name(required)string, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. When updating the template, it is not required if it is not selected to be applied. -
add_ons_planarray— The Contact Center plan to assign to the user. Whether the plan is concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent package. *`zoom_contact_center_for_epic` - Contact Center for Epic or Contact Center for Epic Concurrent package. *`zoom_contact_center_unified_view_for_servicenow` - Contact Center Unified View for ServiceNow or Contact Center Unified View for ServiceNow Concurrent Package.Items:
string, possible values:"ai_expert_assist", "zoom_contact_center_for_service_cloud_voice", "zoom_contact_center_for_epic", "zoom_contact_center_unified_view_for_servicenow"— The Contact Center add-ons plan to assign to the user. -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user.
-
-
role(required)string— The role's ID. For `update` template, it is not required if it is not selected to be applied. -
selected_blocks(required)array— User template Select the settings you want to apply. It is only used for `update` type templates. We can choose which settings take effect when applying. For `update` template, it is required.Items:
string, possible values:"role", "package", "team", "client_integration", "external_url", "user_access", "country_or_region", "region", "mobile_client", "emergency_calling", "assigned_queues", "skills", "engagement_capacity"— The template's block name. -
template_name(required)string— The user template's name. -
template_type(required)string, possible values:"add", "update"— The user template's type. * `add`: It is used to create users. * `update`: It is used to update users. -
assigned_queuesobject— Information about the assigned queues settings.-
agent_queue_idsarray— Assign user as agent queue ids.Items:
string— The queue's ID. -
default_outbound_message_queue_idstring— The default message outbound queue's ID. -
default_outbound_voice_queue_idstring— The default voice outbound queue's ID. -
supervisor_queue_idsarray— Assign user as supervisor queue ids.Items:
string— The queue's ID
-
-
client_integrationobject— Information about the client integration settings.-
client_integration_application(required)string— The Contact Center's client integration application. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
client_integration_namestring— The client integration connection name to be assigned to the user.
-
-
country_or_regionstring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
emergency_callingboolean— Whether to enable emergency calling. -
engagement_capacityobject— Information about the engagement capacity settings.-
concurrent_email_capacityinteger— The maximum concurrent email engagements. -
concurrent_message_capacityinteger— The maximum concurrent messaging engagements. -
email_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their email load is at or below this percentage. -
message_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their messaging load is at or below this percentage.
-
-
external_urlobject— Information about the external URL settings.-
enable_external_url(required)boolean— Whether to enable external url. -
external_launch_url(required)string— The external url. These parameters can be used as command line arguments: `%N` - Full name `%F` - First name `%L` - Last name `%C` - Caller ID number `%E` - Caller ID number (in E.164 format)
-
-
mobile_clientboolean— Whether to enable mobile client. -
regionstring— The region's ID. -
skillsarray— Information about the skill settings.Items:
-
skill_id(required)string— The skill's ID. -
proficiency_levelinteger— The maximum proficiency level in a skill.
-
-
teamobject— Information about the team settings.-
team_id(required)string— The team's ID. -
team_supervisor(required)boolean— Set whether the user acts as an `agent` or `supervisor` in the team.
-
-
template_descriptionstring— The user template's description. -
user_accessboolean— The user's access status. * `true` - The user's role permissions allow them to access the Contact Center. * `false` - The user cannot access the Contact Center.
Example:
{
"template_name": "template name",
"template_description": "user template.",
"template_type": "add",
"selected_blocks": [
"role"
],
"role": "27302393-4784-11ec-a3cd-122e3e29bb87",
"package": "essentials",
"team": {
"team_id": "G3AfPPKrQZWEkgUCEzUvhA",
"team_supervisor": true
},
"client_integration": {
"client_integration_application": "Salesforce",
"client_integration_name": "my integration"
},
"external_url": {
"enable_external_url": true,
"external_launch_url": "https://www.domain.com"
},
"user_access": true,
"country_or_region": "US",
"region": "BAAfPPKrQZWEkgUCEzUvhA",
"mobile_client": false,
"emergency_calling": true,
"assigned_queues": {
"agent_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"supervisor_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"default_outbound_voice_queue_id": "jUthl0VaRH6mcZepV4ITMA",
"default_outbound_message_queue_id": "jUthl0VaRH6mcZepV4ITMA"
},
"skills": [
{
"skill_id": "s51M536ZjSgi8o_rzmgQBrA",
"proficiency_level": 3
}
],
"engagement_capacity": {
"concurrent_email_capacity": 5,
"concurrent_message_capacity": 6,
"email_max_agent_load": 10,
"message_max_agent_load": 10
}
}
Responses
Status: 201 **HTTP Status Code:** `201` Template created.
Content-Type: application/json
-
template_id(required)string— The user template identifier. -
assigned_queuesobject— Information about the assigned queues settings.-
agent_queue_idsarray— Assign user as agent queue ids.Items:
string— The queue's ID. -
default_outbound_message_queue_idstring— The default message outbound queue's ID. -
default_outbound_voice_queue_idstring— The default voice outbound queue's ID. -
supervisor_queue_idsarray— Assign user as supervisor queue ids.Items:
string— The queue's ID
-
-
client_integrationobject— Information about the client integration settings.-
client_integration_application(required)string— The Contact Center's client integration application. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
client_integration_namestring— The client integration connection name to be assigned to the user.
-
-
country_or_regionstring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
created_bystring— The ID of the user that created this data. -
created_timestring, format:date-time— The date and time when this data was created. -
emergency_callingboolean— Whether to enable emergency calling. -
engagement_capacityobject— Information about the engagement capacity settings.-
concurrent_email_capacityinteger— The maximum concurrent email engagements. -
concurrent_message_capacityinteger— The maximum concurrent messaging engagements. -
email_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their email load is at or below this percentage. -
message_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their messaging load is at or below this percentage.
-
-
external_urlobject— Information about the external URL settings.-
enable_external_url(required)boolean— Whether to enable external url. -
external_launch_url(required)string— The external url. These parameters can be used as command line arguments: `%N` - Full name `%F` - First name `%L` - Last name `%C` - Caller ID number `%E` - Caller ID number (in E.164 format)
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
mobile_clientboolean— Whether to enable mobile client. -
modified_bystring— The ID of the user that last modified this data. -
packageobject— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package.-
package_name(required)string, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. When updating the template, it is not required if it is not selected to be applied. -
add_ons_planarray— The Contact Center plan to assign to the user. Whether the plan is concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent package. *`zoom_contact_center_for_epic` - Contact Center for Epic or Contact Center for Epic Concurrent package. *`zoom_contact_center_unified_view_for_servicenow` - Contact Center Unified View for ServiceNow or Contact Center Unified View for ServiceNow Concurrent Package.Items:
string, possible values:"ai_expert_assist", "zoom_contact_center_for_service_cloud_voice", "zoom_contact_center_for_epic", "zoom_contact_center_unified_view_for_servicenow"— The Contact Center add-ons plan to assign to the user. -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user.
-
-
regionstring— The region's ID. -
rolestring— The role's ID. For `update` template, it is not required if it is not selected to be applied. -
selected_blocksarray— User template Select the settings you want to apply. It is only used for `update` type templates. We can choose which settings take effect when applying. For `update` template, it is required.Items:
string, possible values:"role", "package", "team", "client_integration", "external_url", "user_access", "country_or_region", "region", "mobile_client", "emergency_calling", "assigned_queues", "skills", "engagement_capacity"— The template's block name. -
skillsarray— Information about the skill settings.Items:
-
skill_id(required)string— The skill's ID. -
proficiency_levelinteger— The maximum proficiency level in a skill.
-
-
teamobject— Information about the team settings.-
team_id(required)string— The team's ID. -
team_supervisor(required)boolean— Set whether the user acts as an `agent` or `supervisor` in the team.
-
-
template_descriptionstring— The user template's description. -
template_namestring— The user template's name. -
template_statusstring, possible values:"active", "inactive", "needs_attention"— The template's status. - `active` - Available templates - `inactive` - Unavailable template - `needs_attention` - Unavailable template with invalid required fields -
template_typestring, possible values:"add", "update"— The user template's type. * `add`: It is used to create users. * `update`: It is used to update users. -
user_accessboolean— The user's access status. * `true` - The user's role permissions allow them to access the Contact Center. * `false` - The user cannot access the Contact Center.
Example:
{
"template_id": "qmLKCot6QfSGwmPKFCgmCg",
"template_name": "template name",
"template_description": "user template.",
"template_type": "add",
"template_status": "active",
"selected_blocks": [
"role"
],
"role": "27302393-4784-11ec-a3cd-122e3e29bb87",
"package": "essentials",
"team": {
"team_id": "G3AfPPKrQZWEkgUCEzUvhA",
"team_supervisor": true
},
"client_integration": {
"client_integration_application": "Salesforce",
"client_integration_name": "my integration"
},
"external_url": {
"enable_external_url": true,
"external_launch_url": "https://www.domain.com"
},
"user_access": true,
"country_or_region": "US",
"region": "BAAfPPKrQZWEkgUCEzUvhA",
"mobile_client": false,
"emergency_calling": true,
"assigned_queues": {
"agent_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"supervisor_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"default_outbound_voice_queue_id": "jUthl0VaRH6mcZepV4ITMA",
"default_outbound_message_queue_id": "jUthl0VaRH6mcZepV4ITMA"
},
"skills": [
{
"skill_id": "s51M536ZjSgi8o_rzmgQBrA",
"proficiency_level": 3
}
],
"engagement_capacity": {
"concurrent_email_capacity": 5,
"concurrent_message_capacity": 6,
"email_max_agent_load": 10,
"message_max_agent_load": 10
},
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"created_by": "IGTRVt3gQ2i",
"created_time": "2022-02-15T09:27:15Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `640001` <br> The template name is duplicate. <br> **Error Code:** `640002` <br> Cannot switch the template to this status. <br> **Error Code:** `640003` <br> Template name is too long. <br> **Error Code:** `640004` <br> Template description is too long. <br> **Error Code:** `640005` <br> Template name is required. <br> **Error Code:** `640007` <br> Template type is required. <br> **Error Code:** `640011` <br> Too many templates. <br> **Error Code:** `640014` <br> Invalid template setting value. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a user template
- Method:
GET - Path:
/contact_center/users/templates/{templateId} - Tags: Users
Get a user template.
Scopes: contact_center_user_template:read:admin
Granular Scopes: contact_center:read:user_templates:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` User template returned
Content-Type: application/json
-
template_id(required)string— The user template identifier. -
assigned_queuesobject— Information about the assigned queues settings.-
agent_queue_idsarray— Assign user as agent queue ids.Items:
string— The queue's ID. -
default_outbound_message_queue_idstring— The default message outbound queue's ID. -
default_outbound_voice_queue_idstring— The default voice outbound queue's ID. -
supervisor_queue_idsarray— Assign user as supervisor queue ids.Items:
string— The queue's ID
-
-
client_integrationobject— Information about the client integration settings.-
client_integration_application(required)string— The Contact Center's client integration application. * `Default` * `Salesforce` * `Zendesk` * `ServiceNow` * `Microsoft_Dynamics_365` -
client_integration_namestring— The client integration connection name to be assigned to the user.
-
-
country_or_regionstring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
created_bystring— The ID of the user that created this data. -
created_timestring, format:date-time— The date and time when this data was created. -
emergency_callingboolean— Whether to enable emergency calling. -
engagement_capacityobject— Information about the engagement capacity settings.-
concurrent_email_capacityinteger— The maximum concurrent email engagements. -
concurrent_message_capacityinteger— The maximum concurrent messaging engagements. -
email_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their email load is at or below this percentage. -
message_max_agent_loadinteger— This agent will receive a new voice or video engagement only when their messaging load is at or below this percentage.
-
-
external_urlobject— Information about the external URL settings.-
enable_external_url(required)boolean— Whether to enable external url. -
external_launch_url(required)string— The external url. These parameters can be used as command line arguments: `%N` - Full name `%F` - First name `%L` - Last name `%C` - Caller ID number `%E` - Caller ID number (in E.164 format)
-
-
last_modified_timestring, format:date-time— The date and time when this data was last modified. -
mobile_clientboolean— Whether to enable mobile client. -
modified_bystring— The ID of the user that last modified this data. -
packageobject— The Zoom Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package.-
package_name(required)string, possible values:"essentials", "premium", "elite"— The Zoom Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. When updating the template, it is not required if it is not selected to be applied. -
add_ons_planarray— The Zoom Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. `ai_expert_assist` - Zoom Contact Center AI Expert Assist or Zoom Contact Center AI Expert Assist Concurrent Package.Items:
string— The Zoom Contact Center add-ons plan to assign to the user. -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user.
-
-
regionstring— The region's ID. -
rolestring— The role's ID. For `update` template, it is not required if it is not selected to be applied. -
selected_blocksarray— User template Select the settings you want to apply. It is only used for `update` type templates. We can choose which settings take effect when applying. For `update` template, it is required.Items:
string, possible values:"role", "package", "team", "client_integration", "external_url", "user_access", "country_or_region", "region", "mobile_client", "emergency_calling", "assigned_queues", "skills", "engagement_capacity"— The template's block name. -
skillsarray— Information about the skill settings.Items:
-
skill_id(required)string— The skill's ID. -
proficiency_levelinteger— The maximum proficiency level in a skill.
-
-
teamobject— Information about the team settings.-
team_id(required)string— The team's ID. -
team_supervisor(required)boolean— Set whether the user acts as an `agent` or `supervisor` in the team.
-
-
template_descriptionstring— The user template's description. -
template_namestring— The user template's name. -
template_statusstring, possible values:"active", "inactive", "needs_attention"— The template's status. `active` Available templates `inactive` Unavailable template `needs_attention` Unavailable template with invalid required fields -
template_typestring, possible values:"add", "update"— The user template's type. * `add`: It is used to create users. * `update`: It is used to update users. -
user_accessboolean— The user's access status. * `true` - The user's role permissions allow them to access the Contact Center. * `false` - The user cannot access the Contact Center.
Example:
{
"template_id": "qmLKCot6QfSGwmPKFCgmCg",
"template_name": "template name",
"template_description": "user template.",
"template_type": "add",
"template_status": "active",
"selected_blocks": [
"role"
],
"role": "27302393-4784-11ec-a3cd-122e3e29bb87",
"package": "essentials",
"team": {
"team_id": "G3AfPPKrQZWEkgUCEzUvhA",
"team_supervisor": true
},
"client_integration": {
"client_integration_application": "Salesforce",
"client_integration_name": "my integration"
},
"external_url": {
"enable_external_url": true,
"external_launch_url": "https://www.domain.com"
},
"user_access": true,
"country_or_region": "US",
"region": "BAAfPPKrQZWEkgUCEzUvhA",
"mobile_client": false,
"emergency_calling": true,
"assigned_queues": {
"agent_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"supervisor_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"default_outbound_voice_queue_id": "jUthl0VaRH6mcZepV4ITMA",
"default_outbound_message_queue_id": "jUthl0VaRH6mcZepV4ITMA"
},
"skills": [
{
"skill_id": "s51M536ZjSgi8o_rzmgQBrA",
"proficiency_level": 3
}
],
"engagement_capacity": {
"concurrent_email_capacity": 5,
"concurrent_message_capacity": 6,
"email_max_agent_load": 10,
"message_max_agent_load": 10
},
"modified_by": "IGTRVt3gQ2i-WjoUIjeZxw",
"last_modified_time": "2022-02-15T09:27:15Z",
"created_by": "IGTRVt3gQ2i",
"created_time": "2022-02-15T09:27:15Z"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `640000` <br> The user template not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a user template
- Method:
DELETE - Path:
/contact_center/users/templates/{templateId} - Tags: Users
Delete a user template.
Scopes: contact_center_user_template:write:admin
Granular Scopes: contact_center:delete:user_templates:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Template deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `640015` <br> More than one matching user template found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `640000` <br> The user template not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a user template
- Method:
PATCH - Path:
/contact_center/users/templates/{templateId} - Tags: Users
Update a user template.
Scopes: contact_center_user_template:write:admin
Granular Scopes: contact_center:update:user_templates:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
assigned_queuesobject— Information about the assigned queues settings.-
agent_queue_idsarray— Assign user as agent queue IDs.Items:
string— The queue's ID. -
default_outbound_message_queue_idstring— The default message outbound queue's ID. -
default_outbound_voice_queue_idstring— The default voice outbound queue's ID. -
supervisor_queue_idsarray— Assign user as supervisor queue IDs.Items:
string— The queue's ID.
-
-
client_integrationobject— Information about the client integration settings.-
client_integration_application(required)string— The Contact Center's client integration application. -
client_integration_namestring— The client integration connection name to be assigned to the user.
-
-
country_or_regionstring— The [ISO country code](/docs/api/references/abbreviations/#countries). -
emergency_callingboolean— Whether to enable emergency calling. -
engagement_capacityobject— Information about the engagement capacity settings.-
concurrent_email_capacityinteger— The maximum concurrent email engagements. -
concurrent_message_capacityinteger— The maximum concurrent messaging engagements. -
email_max_agent_loadinteger— This agent receives a new voice or video engagement only when their email load is at or below this percentage. -
message_max_agent_loadinteger— This agent receives a new voice or video engagement only when their messaging load is at or below this percentage.
-
-
external_urlobject— Information about the external URL settings.-
enable_external_url(required)boolean— Whether to enable external URLs. -
external_launch_url(required)string— The external URL. Use these parameters as command line arguments. `%N` - Full name `%F` - First name `%L` - Last name `%C` - Caller ID number `%E` - Caller ID number in E.164 format
-
-
mobile_clientboolean— Whether to enable mobile client. -
packageobject— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package.-
package_name(required)string, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. - `premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. - `elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. When updating the template, it is not required if it is not selected to be applied. -
add_ons_planarray— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. - `ai_expert_assist` - Zoom Contact Center AI Expert Assist or Zoom Contact Center AI Expert Assist Concurrent Package.Items:
string— The Contact Center add-ons plan to assign to the user. -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user.
-
-
regionstring— The region's ID. -
rolestring— The role's ID. Not required for `update` templates if it is not selected to be applied. -
selected_blocksarray— Select the user template settings to apply. Only used for `update` type templates. Choose which settings take effect when applying. **Required** for `update` template.Items:
string, possible values:"role", "package", "team", "client_integration", "external_url", "user_access", "country_or_region", "region", "mobile_client", "emergency_calling", "assigned_queues", "skills", "engagement_capacity", "assigned_numbers", "assigned_intents"— The template's block name. -
skillsarray— Information about the skill settings.Items:
-
skill_id(required)string— The skill's ID. -
proficiency_levelinteger— The maximum proficiency level in a skill.
-
-
teamobject— Information about the team settings.-
team_id(required)string— The team's ID. -
team_supervisor(required)boolean— Whether the user acts as an `agent` or `supervisor` in the team.
-
-
template_descriptionstring— The user template's description. -
template_namestring— The user template's name. -
user_accessboolean— The user's access status. * `true` - The user's role permissions allow them to access the Contact Center. * `false` - The user cannot access the Contact Center.
Example:
{
"template_name": "template name",
"template_description": "user template.",
"selected_blocks": [
"role"
],
"role": "27302393-4784-11ec-a3cd-122e3e29bb87",
"package": "essentials",
"team": {
"team_id": "G3AfPPKrQZWEkgUCEzUvhA",
"team_supervisor": true
},
"client_integration": {
"client_integration_application": "Salesforce",
"client_integration_name": "my integration"
},
"external_url": {
"enable_external_url": true,
"external_launch_url": "https://www.example.com"
},
"user_access": true,
"country_or_region": "US",
"region": "BAAfPPKrQZWEkgUCEzUvhA",
"mobile_client": false,
"emergency_calling": true,
"assigned_queues": {
"agent_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"supervisor_queue_ids": [
"jUthl0VaRH6mcZepV4ITMA"
],
"default_outbound_voice_queue_id": "jUthl0VaRH6mcZepV4ITMA",
"default_outbound_message_queue_id": "jUthl0VaRH6mcZepV4ITMA"
},
"skills": [
{
"skill_id": "s51M536ZjSgi8o_rzmgQBrA",
"proficiency_level": 3
}
],
"engagement_capacity": {
"concurrent_email_capacity": 5,
"concurrent_message_capacity": 6,
"email_max_agent_load": 10,
"message_max_agent_load": 10
}
}
Responses
Status: 204 **HTTP Status Code:** `204` Template updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `640001` <br> The template name is duplicate. <br> **Error Code:** `640002` <br> Cannot switch the template to this status. <br> **Error Code:** `640003` <br> Template name is too long. <br> **Error Code:** `640004` <br> Template description is too long. <br> **Error Code:** `640005` <br> Template name is required. <br> **Error Code:** `640007` <br> Template type is required. <br> **Error Code:** `640011` <br> Too many templates. <br> **Error Code:** `640014` <br> Invalid template setting value. <br> **Error Code:** `640015` <br> More than one matching user template found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `640000` <br> The user template not found. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a user's profile
- Method:
GET - Path:
/contact_center/users/{userId} - Tags: Users
Retrieve a Contact Center user.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:user:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` User profile returned.
Content-Type: application/json
-
add_ons_planarray— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the Zoom Billing account to assign to the user. -
billing_account_namestring— The name of the Zoom Billing account to assign to the user. -
cc_user_idstring— The Contact Center user identifier. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the setting's multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The contact center's client integration. -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
display_namestring— The user's display name. -
emergency_callingboolean— Allow users to contact emergency services through their device's native phone system or Zoom Phone. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
region_idstring— The Contact Center region identifier. -
region_namestring— The Contact Center region name. -
role_idstring— The user's Contact Center role identifier. -
role_namestring— The user's Contact Center role name. -
status_idstring— The user's status ID. -
status_namestring, possible values:"Offline", "Ready", "Not Ready", "Occupied"— The user's [availability status](https://support.zoom.us/hc/en-us/articles/4470584918541-Setting-availability-status). * Offline (ID = `0`) * Ready (ID = `1`) * Not Ready (ID = `2`) * Occupied (ID = `3`) * A custom user status (ID = `4`), such as "Lunch" or "Away until Monday" -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`. -
sub_status_namestring, possible values:"Break", "End Shift", "Forced", "Meal", "Meeting", "Training"— The user's reason when the user status is `Not Ready`. To query a list of default and custom `Not Ready` reasons, call [List System Statuses](/docs/contact-center/apis/#operation/listSystemStatus) (filter by `queue_opt_out_and_not_ready_status` status_category) Default `Not Ready` reasons: * Break (ID = `20`) * Meal (ID = `21`) * Training (ID = `22`) * Meeting (ID = `23`) * End Shift (ID = `24`) * Forced (ID = `25`) -
teamsarray— The teams the user is assigned to.Items:
-
team_idstring— The team's ID. -
team_namestring— The team's display name.
-
-
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` - The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center. -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
Example:
{
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"role_name": "Admin",
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"status_id": "2",
"status_name": "Not Ready",
"sub_status_id": "21",
"sub_status_name": "Meal",
"user_access": "active",
"country_iso_code": "US",
"region_id": "8f71O6rWT8KFUGQmJIFAdQ",
"region_name": "Main Region",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"teams": [
{
"team_id": "qlU902FoTD-dFi9QnCdZhw",
"team_name": "Support Team"
}
],
"cc_user_id": "hKuMAiDdRlSwMkBxR5we7g",
"emergency_calling": true,
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q",
"billing_account_name": "main billing account"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid user id. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a user's profile
- Method:
DELETE - Path:
/contact_center/users/{userId} - Tags: Users
Delete a Contact Center user.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:delete:user:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` User profile deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Validation failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a user's profile
- Method:
PATCH - Path:
/contact_center/users/{userId} - Tags: Users
Update a Contact Center user.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:update:user:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
add_ons_planarray— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`ai_expert_assist` - Contact Center AI Expert Assist or Contact Center AI Expert Assist Concurrent Package. *`zoom_contact_center_for_service_cloud_voice` - Contact Center for Salesforce Voice or Contact Center for Salesforce Voice Concurrent Package.Items:
string, possible values:"ai_expert_assist" -
billing_account_idstring— The ID of the billing account. -
channel_settingsobject— Information about the channel settings.-
concurrent_email_capacityinteger— The maximum number of concurrent email engagements that can be assigned to a user. -
concurrent_message_capacityinteger— The maximum number of concurrent messaging engagements that can be assigned to a user. -
multi_channel_engagementsobject— Information about the settings' multi-channel engagements.-
email_max_agent_loadinteger— The percentage of the user's email capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current email workload is at or below this percentage of `concurrent_email_capacity`, they can receive voice and video engagements. -
enableboolean— Whether to allow the user to receive voice or video engagements while handling messaging or email engagements. -
max_agent_loadinteger— The percentage of the user's messaging capacity that determines availability for voice and video engagements. When `enable` is `true` and the user's current messaging workload is at or below this percentage of `concurrent_message_capacity`, they can receive voice and video engagements.
-
-
-
client_integrationstring, possible values:"Default", "Salesforce", "Zendesk", "ServiceNow", "Microsoft_Dynamics_365"— The Contact Center client integration. -
client_integration_namestring— The client integration connection name to be assigned to the user. -
country_iso_codestring— The [ISO country code](/docs/api/rest/other-references/abbreviation-lists/#countries). -
emergency_callingboolean— Allow users to contact emergency services through their device's native phone system or Zoom Phone. -
package_namestring, possible values:"essentials", "premium", "elite"— The Contact Center plan to assign to the user. Concurrent or non-concurrent depends on the plan type purchased by the account. *`essentials` - Zoom Contact Center Essentials or Zoom Contact Center Concurrent Essentials Package. *`premium` - Zoom Contact Center Premium or Zoom Contact Center Concurrent Premium Package. *`elite` - Zoom Contact Center Elite or Zoom Contact Center Concurrent Elite Package. -
region_idstring— The Contact Center region identifier. -
role_idstring— The user's Contact Center role identifier. -
status_idstring— The user's status ID. **Deprecated** Use the [Update a user's status](/docs/api/contact-center/#tag/users/patch/contact_center/users/{userId}/status) API instead. -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`. **Deprecated** Use the [Update a user's status](/docs/api/contact-center/#tag/users/patch/contact_center/users/{userId}/status) API instead. -
template_idstring— To retrieve the template ID, call the **List User's Templates** API. The template ID must correspond to a template with a status of `Active` and a type of `Update`. If you provide this value, leave all other fields blank to apply the settings from the template. Only the settings from the template indicated as 'override' will be applied to the user. If you specify both individual values and a template in the request, the individual values take priority over the template settings. -
user_accessstring, possible values:"active", "inactive"— The user's access status. * `active` — The user's role permissions allow them to access the Contact Center. * `inactive` - The user cannot access the Contact Center.
Example:
{
"client_integration": "Salesforce",
"client_integration_name": "integration-test",
"role_id": "0TFVsJqNS82CwkQJLqj1zA",
"user_access": "active",
"country_iso_code": "US",
"region_id": "8f71O6rWT8KFUGQmJIFAdQ",
"channel_settings": {
"multi_channel_engagements": {
"enable": true,
"max_agent_load": 50,
"email_max_agent_load": 50
},
"concurrent_message_capacity": 4,
"concurrent_email_capacity": 4
},
"template_id": "4pPgojTBRC69wEYSlDhffA",
"package_name": "essentials",
"add_ons_plan": [
"ai_expert_assist"
],
"emergency_calling": true,
"billing_account_id": "PEKovuAEQBu5dpeqmxwW1Q"
}
Responses
Status: 204 **HTTP Status Code:** `204` User profile updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `8003` <br> User template not found: {template_id}. <br> **Error Code:** `8004` <br> User template type error: {template_id}. <br> **Error Code:** `8005` <br> User template status error: {template_id}. <br> **Error Code:** `290010` <br> The selected package or add-ons is not enough. <br> **Error Code:** `1701` <br> The account package does not exist: {package_name}. <br> **Error Code:** `1702` <br> The account addons package does not exist: {add_ons_plan_name}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `300` <br> Validation failed. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1101` <br> Status does not exist: {status_id}. <br> **Error Code:** `1102` <br> Sub status does not exist: {sub_status_id}. <br> **Error Code:** `1006` <br> The account {client_integration} client integration does not exist. Add it to the **Integrations** function module. <br> **Error Code:** `2201` <br> Role does not exist: {role_id}. <br> **Error Code:** `2202` <br> Country ISO code does not exist: {country_iso_code}. <br> **Error Code:** `1017` <br> Region does not exist. <br> **Error Code:** `1020` <br> The account {client_integration_name} client integration name does not exist. Add it to the "Integrations" function module. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Opt-in or opt-out a user's queues
- Method:
PATCH - Path:
/contact_center/users/{userId}/opt_in_out_queues - Tags: Users
Change a Contact Center user's opt-in or opt-out status for queues assigned to the user. Opting out prevents the user from receiving engagements from that queue if they are an agent.
If channel_type is provided, queues are processed based on the channel_type. Otherwise, queues are processed based on queue_ids. The request is invalid if neither channel_type nor queue_ids are provided.
Scopes: contact_center_queue:write:admin
Granular Scopes: contact_center:update:queue_agent:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
opt_in_out_status(required)integer, possible values:0, 1— Opt-in or opt-out status. -`0` - Opt in -`1` - Opt out -
channel_typeinteger, possible values:0, 4, 7, 8, 9— The channel of queues to opt in or out. -`0` - voice -`4` - video -`7` - messaging -`8` - email -`9` - work item -
queue_idsarray— The list of queues to opt in or out.Items:
string— The queue's ID.
Example:
{
"opt_in_out_status": 0,
"queue_ids": [
"IGTRVt3gQ2i-WjoUIjeZxw"
],
"channel_type": 0
}
Responses
Status: 204 **HTTP Status Code:** `204` The user's queues opt-in / opt-out status was successfully updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> The agent must be in an available state `Ready` to opt in to the queue. <br> **Error Code:** `1011` <br> The agent is not allowed to opt in or out of their assigned queues. <br> **Error Code:** `1019` <br> Feature OP flag is not enabled. <br> **Error Code:** `1205` <br> Queue channel type is invalid: $channel_type. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1202` <br> Queues do not exist: {queue_ids}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List a user's queues
- Method:
GET - Path:
/contact_center/users/{userId}/queues - Tags: Users
List the Contact Center queues that a user is assigned to.
Scopes: contact_center_user:read:admin
Granular Scopes: contact_center:read:list_user_queues:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` The list of Contact Center queues that the user is assigned to.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
queuesarray— Contact Center queues.Items:
-
caller_idsarray— The caller ID number that your customers will see on their phone when agents and supervisors reach out to them.Items:
string— Phone number that customers will see on their phone. Phone number format E.164 -
cc_queue_idstring— The Contact Center queue identifier. -
channelstring, possible values:"voice", "video", "messaging", "email"— The Contact Center queue's channel. -
queue_descriptionstring— The Contact Center queue description. -
queue_idstring— The task queue's identifier. **Deprecated** - use the `cc_queue_id` field to reference the Contact Center queue. -
queue_namestring— The Contact Center queue name. -
teamsarray— The teams the user is assigned to.Items:
-
team_idstring— The unique identifier of the team. -
team_namestring— The display name of the team.
-
-
user_assignment_typestring, possible values:"agent", "supervisor", "both"— The user's persona assignment type to the Contact Center queue.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"queues": [
{
"cc_queue_id": "a4lCNeq2SzKbgkcDVbjCZQ",
"queue_name": "Voice - Customer Support",
"queue_description": "Agents assigned to this queue handle Customer Support voice calls.",
"channel": "voice",
"user_assignment_type": "agent",
"caller_ids": [
"+18667202634"
],
"teams": [
{
"team_id": "qlU902FoTD-dFi9QnCdZhw",
"team_name": "Support Team"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> User assignment type is invalid: {user_assignment_type}. <br> **Error Code:** `1205` <br> Queue channel type is invalid: {channel}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List a user's recordings
- Method:
GET - Path:
/contact_center/users/{userId}/recordings - Tags: Users
List a user's Contact Center recordings.
Note Recordings are not available before July 18th, 2022.
Scopes: contact_center_recording:read,contact_center_recording:read:admin
Granular Scopes: contact_center:read:list_recordings:admin,contact_center:read:list_recordings
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User recordings returned.
Content-Type: application/json
-
fromstring, format:string— The start time and date in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. The defined date range should be a month, as the response only includes one month's worth of data. If unspecified, this parameter returns data from the past 30 days. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
recordingsarray— Information about the recordings.Items:
-
cc_queue_idstring— The Contact Center queue identifier. -
channelstring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
channel_typestring, possible values:"voice", "video"— The recording's channel type. * `voice` - Voice recording. * `video` - Video recording. -
conference_participantarray— Information about the recording conference participants.Items:
-
contact_idstring— The participant's contact ID. -
contact_namestring— The participant's contact name. -
contact_numberstring— The participant's contact number. -
participant_typestring, possible values:"agent", "customer", "supervisor", "outbound"— The participant's type. -
queue_idstring— The participant's Contact Center queue ID. -
queue_namestring— The Contact Center queue name. -
team_idstring— The participant's team ID. -
team_namestring— The participant's team name. -
user_idstring— The participant's Contact Center user ID. -
user_namestring— The participant's username.
-
-
consumer_namestring— **Deprecated** Use `consumer_name` in `consumers` object instead. The consumer's name. -
consumer_numberstring— **Deprecated** Use `consumer_name` in `consumers` object instead. The consumer's phone number. -
consumersarray— Information about the recording consumers.Items:
-
consumer_namestring— The customer's name. -
consumer_numberstring— The customer's phone number.
-
-
directionstring, possible values:"inbound", "outbound"— The recording's call direction. * `inbound` - Call in. * `outbound` - Call out. -
display_namestring— The user's display name. -
download_urlstring— The URL to download the recording. For security purposes, you **must** provide an OAuth access token in the Authorization header to download the recording file using this URL. **Example** ```curl --request GET \ --url {download_url} \ --header 'authorization: Bearer {access_token} \ --header 'content-type: application/json' ``` -
engagement_idstring— The engagement event's unique ID. -
exemptionboolean— Whether the recording is exempted from data retention. -
flow_idstring— The recording's flow ID. -
flow_namestring— The recording's flow name. -
owner_idstring— The recording's owner ID, such as the queue ID or user ID. -
owner_namestring— The recording's owner name, such as queue name or user name. -
owner_typestring, possible values:"user", "queue"— The recording's owner type. * `user` - This recording belongs to an user. * `queue` - This recording belongs to a queue. -
playback_urlstring— The URL to play the recording. For security purposes, you **must** provide an OAuth access token in the authorization header to play the recording file using this URL. **Example** ```curl --request GET --url {playback_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
queue_idstring— The task queue's identifier. **Deprecated** - use the `cc_queue_id` field to reference the Contact Center queue. -
queue_namestring— The Contact Center queue name. -
reason_detailsstring— The recording's data retention exemption reason details. -
recording_durationinteger— The recording's duration in seconds. -
recording_end_timestring, format:date-time— The date and time of the recording's end time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recording_idstring— The recording's unique ID. -
recording_start_timestring, format:date-time— The date and time of the recording's start time in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD'. -
recording_typestring, possible values:"on_demand", "automatic"— The recording's type. * `on_demand` - Manually trigger recording. * `automatic` - Automatically trigger recording. -
segment_typestring, possible values:"inbound", "conference"— Whether the recording is an inbound recording or a conference recording. -
team_idstring— The team's ID. -
team_namestring— The team's name. -
transcript_urlstring— The URL to download the recording transcript. For security purposes, you **must** provide an OAuth access token in the authorization header to download the recording transcript file using this URL. **Example** ```curl --request GET --url {transcript_url} --header 'authorization: Bearer {access_token}' --header 'content-type: application/json' ``` -
user_emailstring, format:email— The user's email address. -
user_idstring— The Meetings user identifier.
-
-
tostring, format:string— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-MM-dd'T'HH:mm:ss'TZD', the same format as the `from` parameter.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"from": "2023-01-01T00:00:00-08:00",
"to": "2023-01-01T01:00:00-08:00",
"recordings": [
{
"recording_id": "ghyetrjj_sdfsdgfkdjfl111",
"cc_queue_id": "a4lCNeq2SzKbgkcDVbjCZQ",
"queue_name": "Voice - Customer Support",
"recording_duration": 150,
"download_url": "https://api.zoom.us/v2/contact_center/recording/download/01bdb222-9984-4f41-8141-2f760cb398aa?type=voice",
"transcript_url": "https://api.zoom.us/v2/contact_center/recording/transcripts/download/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"playback_url": "https://api.zoom.us/v2/contact_center/recording/playback/4Q0ILNMfTA2nJolNxhg0Rw?type=voice",
"recording_start_time": "2023-01-01T08:00:00Z",
"recording_end_time": "2023-01-01T09:00:00Z",
"user_id": "IGTRVt3gQ2i-WjoUIjeZxw",
"display_name": "Jane Doe",
"user_email": "jchill@example.com",
"recording_type": "automatic",
"channel": "voice",
"direction": "outbound",
"owner_id": "auiketrjj_2342353fsewkdjfl",
"owner_name": "voice",
"owner_type": "queue",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_name": "voice",
"flow_id": "fsdfsd4oippe0ffewcbhjk",
"consumers": [
{
"consumer_name": "Steve Rogers",
"consumer_number": "+13128945709"
}
],
"exemption": true,
"reason_details": "Compliance review.",
"segment_type": "conference",
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"team_name": "Jane Doe's team",
"conference_participant": [
{
"user_id": "HljBAYkdSzqk_eXkXyEV7g",
"user_name": "Jill Chill",
"queue_id": "y5yK894sT4ixNaO__FO_Jg",
"queue_name": "Voice - Customer Support",
"team_id": "edlbknHGRjq35Y5WYxb7_A",
"team_name": "Jill Chill's team",
"contact_id": "edlbknHGRjq35Y5WYxb7_A",
"contact_name": "Jill Chill",
"contact_number": "+12058945728",
"participant_type": "agent"
}
]
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid user ID. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: $userId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a user's recordings
- Method:
DELETE - Path:
/contact_center/users/{userId}/recordings - Tags: Users
Delete all of a user's Contact Center recordings.
Scopes: contact_center_recording:write:admin
Granular Scopes: contact_center:delete:recording:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Successfully deleted the user's Contact Center recordings.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid user ID. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2804` <br> User recordings do not exist: $userId. <br> **Error Code:** `1001` <br> User does not exist: $userId. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `2820` <br> You cannot delete this recording because it is exempt from retention policy due to legal hold. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List a user's skills
- Method:
GET - Path:
/contact_center/users/{userId}/skills - Tags: Users
Get a list of skills assigned to a given user.
Scopes: contact_center_skill:read:admin
Granular Scopes: contact_center:read:list_user_skills:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User's assigned skills returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
skillsarray— Information about the user's skillsItems:
-
max_proficiency_levelinteger— The maximum proficiency level in a skill. -
skill_category_idstring— The skill category's ID. -
skill_category_namestring— The skill category's name. -
skill_idstring— The skill's ID. -
skill_namestring— The skill's name. -
skill_typestring— The skill's type. -
user_proficiency_levelinteger— A user's proficiency level in a skill.
-
-
total_recordsinteger— The total number of all records available across pages.
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 10,
"skills": [
{
"skill_id": "s51M536ZjSgi8o_rzmgQBrA",
"skill_name": "assign-skill6b6c864b-474a-4843-afed-81bd26b03952",
"skill_type": "proficiency",
"max_proficiency_level": 5,
"user_proficiency_level": 3,
"skill_category_id": "s51M536ZjSgi8o_rzmgQBrA",
"skill_category_name": "Language"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1001` <br> User does not exist. <br> **Error Code:** `1501` <br> Skill category does not exist: {categoryId}. <br> **Error Code:** `1501` <br> Skill category does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Assign a user's skills
- Method:
POST - Path:
/contact_center/users/{userId}/skills - Tags: Users
Assign skills to a user. Skills are user traits that ensure that a given agent is the best person to handle a given customer interaction. Proficiency ratings indicate the user's level of expertise or knowledge of that skill.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:write:user_skill:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
skillsarray— Information about the skills.Items:
-
max_proficiency_levelinteger— The skill's assigned proficiency level. -
skill_idstring— The skill ID.
-
Example:
{
"skills": [
{
"skill_id": "1",
"max_proficiency_level": 5
}
]
}
Responses
Status: 201 **HTTP Status Code:** `201` Skills are assigned to the Contact Center user.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1405` <br> Skill assignment already exists: {skill_id}. <br> **Error Code:** `300` <br> Invalid user ID. <br> **Error Code:** `1407` <br> Invalid proficiency level for skill assignment: {skill_id}. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> Skills do not exist: {skill_ids}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Unassign a user's skill
- Method:
DELETE - Path:
/contact_center/users/{userId}/skills/{skillId} - Tags: Users
Remove a skill from a Contact Center user.
Scopes: contact_center_skill:write:admin
Granular Scopes: contact_center:delete:user_skill:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204 ` The skill was removed from the user.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid user ID. <br> **Error Code:** `1408` <br> More than one matching skill found. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1404` <br> Skill assignment not found: {skillId}. <br> **Error Code:** `1001` <br> User does not exist: {userId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Update a user's status
- Method:
PATCH - Path:
/contact_center/users/{userId}/status - Tags: Users
Update a user's status.
Scopes: contact_center_user:write:admin
Granular Scopes: contact_center:update:user:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
status_idstring— The user's status ID. -
sub_status_idstring— The user's reason ID when the user status is `Not Ready`.
Example:
{
"status_id": "2",
"sub_status_id": "21"
}
Responses
Status: 204 HTTP Status Code: 204 Contact Center user status updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The status must be "Not Ready" when updating sub status. <br> **Error Code:** `300` <br> The status does not allow updating to: {status_name}. <br> **Error Code:** `300` <br> {status_name} is disabled. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `1101` <br> Status does not exist: {status_id}. <br> **Error Code:** `1102` <br> Sub status does not exist: {sub_status_id}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
List variable logs
- Method:
GET - Path:
/contact_center/variable_logs - Tags: Variables
Return a list of variable logs.
Scopes: contact_center_variable_log:read:admin
Granular Scopes: contact_center:read:list_variable_logs:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Variable logs returned.
Content-Type: application/json
-
fromstring, format:date-time— The start time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, return data from the past 24 hours. -
highest_watermarkstring, format:date-time— The latest time among the returned records. -
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
tostring, format:date-time— **Required** only when the `from` parameter is specified. The end time and date in ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`, the same format as the `from` parameter. -
total_recordsinteger— The total number of all records available across pages. -
variable_logsarray— Information about the variable logs.Items:
-
created_atstring, format:date-time— Creation time in `yyyy-MM-dd'T'HH:mm:ss±HH:mm` format, using the timezone derived from the input `from` parameter. -
data_typestring, possible values:"boolean", "currency", "date", "email", "number", "percent", "phone", "string", "time", "url", "json", "array"— The variable data's type. -
engagement_idstring— The engagement's ID -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
group_typestring, possible values:"system", "custom"— The variable group's type. -
variable_log_idstring— The variable log's ID -
variable_namestring— The variable's name. -
variable_valuestring— The variable's value. -
widget_namestring— The widget's name.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"highest_watermark": "2021-12-10T08:15:00Z",
"from": "2021-12-10T08:00:00Z",
"to": "2021-12-10T08:15:00Z",
"variable_logs": [
{
"variable_log_id": "ebe83be-3579-4dc9-8e6e-67dd65a010fe",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"widget_name": "HttpCall1",
"variable_name": "body",
"variable_value": "demo",
"group_type": "system",
"data_type": "boolean",
"created_at": "2023-01-01T08:00:00-08:00"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> The time and date must be in `yyyy-mm-dd` or ISO 8601 format, either `yyyy-MM-dd'T'HH:mm:ss'Z'` or `yyyy-MM-dd'T'HH:mm:ss'TZD'`. <br> **Error Code:** `300` <br> The requested report exceeds the 1-month limit. <br> **Error Code:** `300` <br> Timezone does not exist: {timezone}. <br> **Error Code:** `300` <br> Invalid field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br> **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2901` <br> Engagement does not exist: {engagement_id}. <br> **Error Code:** `3201` <br> Flow does not exist: {flow_id}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Get a variable log
- Method:
GET - Path:
/contact_center/variable_logs/{variableLogId} - Tags: Variables
Get information about a variable log.
Scopes: contact_center_variable_log:read:admin
Granular Scopes: contact_center:read:variable_log:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Variable log returned.
Content-Type: application/json
-
created_atstring, format:date-time— Creation time in `yyyy-MM-dd'T'HH:mm:ss+00:00` format (UTC). -
data_typestring | null, possible values:"boolean", "currency", "date", "email", "number", "percent", "phone", "string", "url"— The variable data's type. May be `null` if the stored type cannot be mapped. -
engagement_idstring— The engagement's ID -
flow_idstring— The flow's ID. -
flow_namestring— The flow's name. -
group_typestring, possible values:"system", "custom"— The variable group's type. The type can be either system or custom. -
variable_log_idstring— The variable log's ID -
variable_namestring— The variable's name. -
variable_valuestring— The variable's value. -
widget_namestring— The widget's name.
Example:
{
"variable_log_id": "ebe83be-3579-4dc9-8e6e-67dd65a010fe",
"engagement_id": "3XilEfOvQEKRIWMWhX1jDg",
"flow_id": "zeYjXoDOS_eV1QmTpj63PQ",
"flow_name": "Demo",
"widget_name": "HttpCall1",
"variable_name": "body",
"variable_value": "demo",
"group_type": "system",
"data_type": "boolean",
"created_at": "2023-01-01T08:00:00Z"
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> Variable log does not exist: $variableLogId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Delete a variable log
- Method:
DELETE - Path:
/contact_center/variable_logs/{variableLogId} - Tags: Variables
Delete a variable log.
Scopes: contact_center_variable_log:write:admin
Granular Scopes: contact_center:delete:variable_log:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Variable log deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> Variable log does not exist: $variableLogId <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List variables
- Method:
GET - Path:
/contact_center/variables - Tags: Variables
Returns a list of variables for a specific variable group.
Scopes: contact_center_variable:read:admin
Granular Scopes: contact_center:read:list_variables:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Variables list returned
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token returns when the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:30— The number of records returned in a single API call. -
total_recordsinteger— The total number of all the records available across pages. -
variablesarray— Information about the variables.Items:
-
data_typestring, possible values:"string", "number", "boolean", "date_time", "currency", "percentage", "email", "url", "phone", "json", "array"— The data's type. * `string` * `number` * `boolean` * `date_time` * `currency` * `percentage` * `email` * `url` * `phone` -
default_valuestring— The variable's default value. -
mask_variable_databoolean, default:false— Mask variable data, for sensitive information. -
used_in_address_book_countinteger— The number of times the address book used the variable. -
value_categorystring— The variable value's category. Returned only if `variable_type:global_variable` * `undefined` - Each engagement starts without a pre-set value. * `default_value` - Each engagement starts with the default value. * `linked_value` - The value links across flows, and each engagement uses the latest value. -
valuesarray— The variable's values.Items:
string -
variable_descriptionstring— The variable's description. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's unique ID. -
variable_namestring— The variable's name. -
variable_typestring, possible values:"global_variable", "address_book_variable"— The variable's type. * `global_variable` * `address_book_variable`
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 30,
"total_records": 1,
"variables": [
{
"variable_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_name": "variable demo name",
"default_value": "test_value",
"variable_type": "address_book_variable",
"data_type": "string",
"variable_description": "This is a variable description",
"mask_variable_data": true,
"values": [
"test_value"
],
"value_category": "default_value",
"used_in_address_book_count": 3
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a variable
- Method:
POST - Path:
/contact_center/variables - Tags: Variables
Create a new variable.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:write:variable:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
data_type(required)string, possible values:"string", "number", "boolean", "date_time", "currency", "percentage", "email", "url", "phone", "json", "array"— The data's type. `variable_type:address_book_variable` only applies to data types with `*`. * `string` `*` * `number` * `boolean` `*` * `date_time` -(unix timestamp) * `currency` * `percentage` * `email` * `url` * `phone` - ([E.164 format](https://en.wikipedia.org/wiki/E.164)) -
variable_group_id(required)string— The variable group's ID. -
variable_name(required)string— The variable's name. -
variable_type(required)string, possible values:"global_variable", "address_book_variable"— The variable's type. * `global_variable` * `address_book_variable` -
address_book_idsarray— The address book IDs. Only valid when `variable_type` is `address_book_variable`, and cannot be empty.Items:
string -
client_show_in_client_engagement_sectionboolean— Whether this variable will be shown in the Zoom client's Engagement section. Only valid if `data_type` is not `json` or `array`. * global -
client_show_in_client_profile_sectionboolean— Whether this variable will be shown in the Zoom client's Profile section. Only valid if `data_type` is not `json` or `array`. * global -
client_show_in_inbound_call_notificationsboolean— Whether this variable will be shown as an inbound call notification on the Zoom client. Only valid if `data_type` is not `json` or `array`. * global * address book -
default_valuestring— The variable's default value. Only used when `variable_type` is `address_book_variable` and `data_type` is `string`. -
linked_value_lockboolean, default:false— The variable linked value's lock. Only valid when `value_category` is `linked_value`. * `true` - The variable can't be updated in a flow. It is the same for each engagement. * `false` - The variable value can be updated in a flow. Each engagement uses the latest value. -
mask_variable_databoolean, default:false— Mask variable data, for sensitive information. Only valid when `variable_type` is `global_variable` and the value of data_type is not `boolean`, `date_time`, or `percentage`. -
use_as_routing_profile_parametersboolean, default:false— Whether to use in the routing profile. Only valid when `variable_type` is `address_book_variable` and `data_type` is not `json` or `array`. * `true` - Values are used as routing profile parameters. * `false` - Not used as a value for routing configuration file parameters. -
use_in_external_url_parametersboolean— Lets you use the parameter value in defining external URLs launched for each engagement. Only valid if `data_type` is not `json` or `array`. * global * address book -
use_in_reportingboolean, default:false— Whether to use in reporting. Only valid when `variable_type` is `global_variable`. -
value_categorystring— The variable value's category. Only valid when `variable_type` is `global_variable`. * `undefined` - Each engagement starts without a pre-set value. * `default_value` - Each engagement starts with the default value. * `linked_value` - The value links across flows, and each engagement uses the latest value. -
valuesarray— The variable's values. Take only the first value in the array when `variable_type` is `global_variable`. * If `variable_type` is `global_variable`, each value's max length is 4096. * If `variable_type` is `address_book_variable`, each value's maximum length is 300.Items:
string -
variable_descriptionstring— The variable's description.
Example:
{
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_name": "variable demo name",
"variable_description": "This is a variable description.",
"variable_type": "address_book_variable",
"address_book_ids": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"use_in_reporting": false,
"mask_variable_data": false,
"use_as_routing_profile_parameters": false,
"data_type": "number",
"value_category": "default_value",
"values": [
"test-value"
],
"linked_value_lock": false,
"default_value": "test-value",
"use_in_external_url_parameters": true,
"client_show_in_client_profile_section": true,
"client_show_in_client_engagement_section": true,
"client_show_in_inbound_call_notifications": true
}
Responses
Status: 201 **HTTP Status Code:** `201` Variable created.
Content-Type: application/json
-
address_booksarray— The address book list. This field is only returned when `variable_type` is `address_book_variable`.Items:
-
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
total_contactsinteger— The address book's total number of contacts. -
unit_idstring— The address book's unit ID. -
unit_namestring— The address book unit's name.
-
-
client_show_in_client_engagement_sectionboolean— Whether this variable will be shown in the Zoom client's Engagement section. * global -
client_show_in_client_profile_sectionboolean— Whether this variable will be shown in the Zoom client's Profile section. * global -
client_show_in_inbound_call_notificationsboolean— Whether this variable will be shown as an inbound call notification on the Zoom client. * global * address book -
data_typestring, possible values:"string", "number", "boolean", "date_time", "currency", "percentage", "email", "url", "phone", "json", "array"— The data's type. * `string` * `number` * `boolean` * `date_time` * `currency` * `percentage` * `email` * `url` * `phone` -
default_valuestring— The variable's default value. -
linked_value_lockboolean, default:false— The variable linked value's lock. * `true` - The variable can't be updated in a flow. It is the same for each engagement. * `false` - the variable value can be updated in a flow. Each engagement will use the latest value. -
mask_variable_databoolean, default:false— Mask variable data, for sensitive information. -
use_as_routing_profile_parametersboolean, default:false— Whether to use in the routing profile. * `true` - Values used as routing profile parameters. * `false` - Not used as a value for routing configuration file parameters. -
use_in_external_url_parametersboolean— Lets you use the parameter value in defining external URLs launched for each engagement. * global * address book -
use_in_reportingboolean, default:false— Whether to use in reporting. -
value_categorystring— The variable value's category. Returned only if `variable_type` is `global_variable`. * `undefined` - Each engagement starts without a pre-set value. * `default_value` - Each engagement starts with the default value. * `linked_value` - The value links across flows, and each engagement uses the latest value. -
valuesarray— The variable's values.Items:
string -
variable_descriptionstring— The variable's description. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's unique ID. -
variable_namestring— The variable's name. -
variable_typestring, possible values:"global_variable", "address_book_variable"— The variable's type. * `global_variable` * `address_book_variable`
Example:
{
"variable_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_name": "variable demo name",
"variable_description": "This is a variable description",
"variable_type": "global_variable",
"address_books": [
{
"address_book_id": "X2e_jsLNRkCjI0sQg2kRQQ",
"address_book_name": "Jill's address book",
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Address Book Unit",
"total_contacts": 3
}
],
"use_in_reporting": false,
"mask_variable_data": true,
"use_as_routing_profile_parameters": false,
"data_type": "number",
"value_category": "default_value",
"values": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"linked_value_lock": false,
"default_value": "test-value",
"use_in_external_url_parameters": true,
"client_show_in_client_profile_section": true,
"client_show_in_client_engagement_section": true,
"client_show_in_inbound_call_notifications": true
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3402` <br> The `address_book_ids` field cannot be empty. <br> **Error Code:** `3403` <br> The variable already exists in the current custom group: `$variable_name`. <br> **Error Code:** `3404` <br> The `values` do not match `data_type`. <br> **Error Code:** `3405` <br> Invalid date format. <br> **Error Code:** `3406` <br> This `data_type`: $data_type is not supported when `variable_type` is $variable_type. <br> **Error Code:** `3407` <br> The `values`**` field cannot be empty. <br> **Error Code:** `3420` <br> The `values` field maximum length is over limit. <br> **Error Code:** `2006` <br> Address books does not exist <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3409` <br> Variable group does not exist: $group_id. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
List variable groups
- Method:
GET - Path:
/contact_center/variables/groups - Tags: Variables
Return a list of variable groups.
Scopes: contact_center_variable:read:admin
Granular Scopes: contact_center:read:list_variable_groups:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Variable groups returned.
Content-Type: application/json
-
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes. -
page_sizeinteger, default:10— The number of records returned within a single API call. -
total_recordsinteger— The total number of all the records available across pages. -
variable_groupsarray— Information about the variable groups.Items:
-
variable_group_descriptionstring— The variable group's description. -
variable_group_idstring— The variable group's ID. -
variable_group_namestring— The variable group's name. -
variable_group_typestring, possible values:"system", "custom"— The variable group's type. The type can be either system or custom. -
variable_group_variables_countinteger— The number of the variables in the group.
-
Example:
{
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"page_size": 10,
"total_records": 10,
"variable_groups": [
{
"variable_group_id": "71ec9348-27db-4fe6-81b9-5b8637ca299b",
"variable_group_name": "Agent",
"variable_group_description": "Agent's first custom group.",
"variable_group_type": "system",
"variable_group_variables_count": 1
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Create a variable group
- Method:
POST - Path:
/contact_center/variables/groups - Tags: Variables
Create a custom variable group.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:write:variable_group:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
variable_group_name(required)string— The variable group's name. -
variable_group_descriptionstring— The variable group's description. -
variable_group_typestring, possible values:"custom", default:"custom"— The variable group's type. The type can only be custom.
Example:
{
"variable_group_name": "us.group",
"variable_group_description": "The first custom group.",
"variable_group_type": "custom"
}
Responses
Status: 201 success
Content-Type: application/json
-
variable_group_descriptionstring— The variable group's description. -
variable_group_idstring— The variable group's ID. -
variable_group_namestring— The variable group's name. -
variable_group_typestring, possible values:"custom", default:"custom"— The variable group's type. The type can only be custom. -
variable_group_variables_countinteger, default:0— The number of variables in the created group.
Example:
{
"variable_group_id": "71ec9348-27db-4fe6-81b9-5b8637ca299b",
"variable_group_name": "us.group",
"variable_group_description": "The first custom group.",
"variable_group_type": "custom",
"variable_group_variables_count": 0
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3415` <br> The number of variable groups has reached the maximum. <br> **Error Code:** `3416` <br> The variable group already exists. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a variable group
- Method:
GET - Path:
/contact_center/variables/groups/{variableGroupId} - Tags: Variables
Get information about a variable group.
Scopes: contact_center_variable:read:admin
Granular Scopes: contact_center:read:variable_group:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Variable group returned.
Content-Type: application/json
-
variable_group_descriptionstring— The variable group's description. -
variable_group_idstring— The variable group's ID. -
variable_group_namestring— The variable group's name. -
variable_group_typestring, possible values:"system", "custom"— The variable group's type. The type can be either system or custom. -
variable_group_variables_countinteger— The number of the variables in the group.
Example:
{
"variable_group_id": "71ec9348-27db-4fe6-81b9-5b8637ca299b",
"variable_group_name": "Agent",
"variable_group_description": "Agent's first custom group.",
"variable_group_type": "system",
"variable_group_variables_count": 1
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3409` <br> Variable group does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a variable group
- Method:
DELETE - Path:
/contact_center/variables/groups/{variableGroupId} - Tags: Variables
Delete a specified variable group.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:delete:variable_group:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Variable group deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid variable group type. Only Custom group can be deleted or updated. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3409` <br> Variable group does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a variable group
- Method:
PATCH - Path:
/contact_center/variables/groups/{variableGroupId} - Tags: Variables
Update a variable group.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:update:variable_group:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
variable_group_descriptionstring— The variable group's description. -
variable_group_namestring— The variable group's name.
Example:
{
"variable_group_name": "us.group.dev",
"variable_group_description": "Update this group."
}
Responses
Status: 204 **HTTP Status Code:** `204` Variable group updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid variable group type. Only custom group can be deleted or updated. <br> **Error Code:** `3416` <br> Global variable already exists. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3409` <br> Variable group does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rate-limits/).
Get a variable
- Method:
GET - Path:
/contact_center/variables/{variableId} - Tags: Variables
Retrieve a variable.
Scopes: contact_center_variable:read:admin
Granular Scopes: contact_center:read:variable:admin
Rate Limit Label: LIGHT
Responses
Status: 200 **HTTP Status Code:** `200` Variable returned.
Content-Type: application/json
-
address_booksarray— The address book list. This field is only returned when `variable_type:address_book_variable`.Items:
-
address_book_idstring— The address book's ID. -
address_book_namestring— The address book's name. -
total_contactsinteger— The address book's total number of contacts. -
unit_idstring— The address book's unit ID. -
unit_namestring— The address book unit's name.
-
-
client_show_in_client_engagement_sectionboolean— Whether this variable will be shown in the Zoom client's Engagement section. Variable types: global -
client_show_in_client_profile_sectionboolean— Whether this variable will be shown in the Zoom client's Profile section. Variable types: global -
client_show_in_inbound_call_notificationsboolean— Whether this variable will be shown as an inbound call notification on the Zoom client. Variable types: global, address book -
data_typestring, possible values:"string", "number", "boolean", "date_time", "currency", "percentage", "email", "url", "phone", "json", "array"— The data's type. -
default_valuestring— The variable's default value. -
linked_value_lockboolean, default:false— The variable linked value's lock. * `true` - The variable cannot be updated in a flow. it will be the same for each engagement. * `false` - the variable value can be updated in a flow. each engagement will use the latest value. -
mask_variable_databoolean, default:false— Mask variable data, for sensitive information. -
use_as_routing_profile_parametersboolean, default:false— Whether to use in routing profile. * `true` - Values used as routing profile parameters. * `false` - Not used as a value for routing configuration file parameters. -
use_in_external_url_parametersboolean— Lets you use the parameter value in defining external URLs launched for each engagement. Variable types: global, address book -
use_in_reportingboolean, default:false— Whether to use in reporting. -
value_categorystring— The variable value's category. Returned only if `variable_type:global_variable`. * `undefined` - Each engagement starts without a pre-set value. * `default_value` - Each engagement starts with the default value. * `linked_value` - The value links across flows, and each engagement uses the latest value. -
valuesarray— The variable's values.Items:
string -
variable_descriptionstring— The variable's description. -
variable_group_idstring— The variable group's ID. -
variable_idstring— The variable's unique ID. -
variable_namestring— The variable's name. -
variable_typestring, possible values:"global_variable", "address_book_variable"— The variable's type.
Example:
{
"variable_id": "W_VATTk_Q5aW6z5rZtBxAQ",
"variable_group_id": "afececcd-0c9f-48de-9d19-0c84e8bdfeca",
"variable_name": "variable demo name",
"variable_description": "This is a variable description",
"variable_type": "global_variable",
"address_books": [
{
"address_book_id": "X2e_jsLNRkCjI0sQg2kRQQ",
"address_book_name": "Jill's address book",
"unit_id": "zeYjXoDOS_eV1QmTpj63PQ",
"unit_name": "Address Book Unit",
"total_contacts": 3
}
],
"use_in_reporting": false,
"mask_variable_data": true,
"use_as_routing_profile_parameters": false,
"data_type": "number",
"value_category": "default_value",
"values": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"linked_value_lock": false,
"default_value": "test-value",
"use_in_external_url_parameters": true,
"client_show_in_client_profile_section": true,
"client_show_in_client_engagement_section": true,
"client_show_in_inbound_call_notifications": true
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br> **Error Code:** `124` <br> Access token has expired. <br> **Error Code:** `1002` <br> The user associated with this access token was not found or is invalid. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1021` <br> User account is deactivated. <br> **Error Code:** `1022` <br> User does not have a Contact Center license. <br> **Error Code:** `9001` <br> The Contact Center user associated with this bearer token is missing privileges on their role required to operate this request. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3401` <br> Variable does not exist: $variableId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/). **Error Code:** `4001` <br> You have reached the maximum per-second rate limit for this API. Try again later. <br>
Delete a variable
- Method:
DELETE - Path:
/contact_center/variables/{variableId} - Tags: Variables
Delete a variable.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:delete:variable:admin
Rate Limit Label: LIGHT
Responses
Status: 204 **HTTP Status Code:** `204` Variable deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3401` <br> Variable does not exist: $variableId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a variable
- Method:
PATCH - Path:
/contact_center/variables/{variableId} - Tags: Variables
Update a variable.
Scopes: contact_center_variable:write:admin
Granular Scopes: contact_center:update:variable:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
address_book_idsarray— The address book IDs. Only valid when `variable_type:address_book_variable`.Items:
string -
client_show_in_client_engagement_sectionboolean— Whether this variable will be shown in the Zoom client's Engagement section. Only valid if `data_type` is not `json` or `array`. Variable types: global -
client_show_in_client_profile_sectionboolean— Whether this variable will be shown in the Zoom client's Profile section. Only valid if `data_type` is not `json` or `array`. Variable types: global -
client_show_in_inbound_call_notificationsboolean— Whether this variable will be shown as an inbound call notification on the Zoom client. Only valid if `data_type` is not `json` or `array`. Variable types: global, address book -
data_typestring, possible values:"string", "number", "boolean", "date_time", "currency", "percentage", "email", "url", "phone", "json", "array"— The data's type. `variable_type:address_book_variable` only applies to data types with `*` * `string` `*` * `number` * `boolean` `*` * `date_time` -(unix timestamp) * `currency` * `percentage` * `email` * `url` * `phone` - ([E.164 format](https://en.wikipedia.org/wiki/E.164)) -
default_valuestring— The variable's default value. Only used when `variable_type:address_book_variable` and `data_type:string`. -
linked_value_lockboolean, default:false— The variable linked value's lock. Only valid when `value_category:linked_value`. * `true` - The variable cannot be updated in a flow. it will be the same for each engagement. * `false` - The variable value can be updated in a flow. each engagement will use the latest value. -
mask_variable_databoolean, default:false— Mask variable data (for sensitive information). Only valid when `variable_type:global_variable` and the value of data_type is not `boolean`, `date_time`, `percentage`. -
use_as_routing_profile_parametersboolean, default:false— Whether to use in routing profile. Only valid when `variable_type:address_book_variable` and `data_type` are now `json` or `array`. * `true` - Values used as routing profile parameters. * `false` - Not used as a value for routing configuration file parameters. -
use_in_external_url_parametersboolean— Lets you use the parameter value in defining external URLs launched for each engagement. Only valid if `data_type` is not `json` or `array`. Variable types: global, address book -
use_in_reportingboolean, default:false— Whether to use in reporting. Only valid when `variable_type:global_variable`. -
value_categorystring— The variable value's category. Only valid when `variable_type:global_variable`. * `undefined` - Each engagement starts without a pre-set value. * `default_value` - Each engagement starts with the default value. * `linked_value` - The value links across flows, and each engagement uses the latest value. -
valuesarray— The variable's values. Take only the first value in the array when `variable_type` is `global_variable`. * If `variable_type` is `global_variable`, each value's max length is 4096. * If `variable_type` is `address_book_variable`, each value's max length is 300.Items:
string -
variable_descriptionstring— The variable's description. -
variable_namestring— The variable's name.
Example:
{
"variable_name": "variable demo name",
"variable_description": "This is a variable description",
"address_book_ids": [
"X2e_jsLNRkCjI0sQg2kRQQ"
],
"use_in_reporting": false,
"mask_variable_data": false,
"use_as_routing_profile_parameters": false,
"data_type": "number",
"value_category": "default_value",
"values": [
"test-value-1"
],
"linked_value_lock": false,
"default_value": "test-value-1",
"use_in_external_url_parameters": true,
"client_show_in_client_profile_section": true,
"client_show_in_client_engagement_section": true,
"client_show_in_inbound_call_notifications": true
}