# Contact Center - **OpenAPI Version:** `3.1.1` - **API Version:** `2` The Contact Center APIs allow developers to interface with [Contact Center](https://developers.zoom.us/docs/contact-center/) features programmatically. ## Servers - **URL:** `https://api.zoom.us/v2` ## Operations ### List SMS logs - **Method:** `GET` - **Path:** `/accounts/{accountId}/contact_center/sms` - **Tags:** Logs Returns a list of SMS engagement logs. Engagement data are available via API once they are completed. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `contact_center_sms:master` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `contact_center:read:sms_log:master` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Variables list returned ###### Content-Type: application/json - **`from`** `string`, 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_token`** `string` — 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_size`** `integer`, default: `10` — The number of records returned in a single API call. - **`sms`** `array` — Information about the SMS. **Items:** - **`agents`** `array` — Information about the engagement's agents. **Items:** - **`display_name`** `string` — The agent's name. - **`user_id`** `string` — The agent's ID. - **`consumer_display_name`** `string` — The consumer's name. - **`consumer_number`** `string` — The consumer's phone number. - **`contact_center_number`** `string` — The agent's number. An agent used a flow or queue number and did not really have its own number. - **`country_name`** `string` — The country name. - **`direction`** `string`, possible values: `"inbound", "outbound"` — The engagement's direction. \`inbound\` | \`outbound\`. - **`end_time`** `string`, 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_id`** `string` — The engagement's ID - **`queues`** `array` — Information about the engagement's queues. **Items:** - **`cc_queue_id`** `string` — The Contact Center queue's ID. - **`queue_id`** `string` — The queue's ID. - **`queue_name`** `string` — The queue's name. - **`sms_types`** `array` — The SMS's type. **Items:** `string`, possible values: `"sms", "mms"` - **`start_time`** `string`, 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_files`** `integer`, format: `int64` — The total number of received files. - **`total_received_messages`** `integer`, format: `int64` — The total number of received messages. - **`total_sent_files`** `integer`, format: `int64` — The total number of sent files. - **`total_sent_messages`** `integer`, format: `int64` — The total number of sent messages. - **`to`** `string`, 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_records`** `integer` — The total number of all the records available across pages. **Example:** ```json { "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\` \
Bad Request ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2901\` \
Engagement does not exist: $engagementId. \
\*\*Error Code:\*\* \`1001\` \
User does not exist: $userId. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(/docs/api/rest/rate-limits/). ### List voice call logs - **Method:** `GET` - **Path:** `/accounts/{accountId}/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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `contact_center_voice_call:master` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `contact_center:read:voice_call_log:master` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Variables list returned. ###### Content-Type: application/json - **`from`** `string`, 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_token`** `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`** `integer`, default: `10` — The number of records returned within a single API call. - **`to`** `string`, 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_records`** `integer` — The total number of all the records available across pages. - **`voice_calls`** `array` — Information about the voice call. **Items:** - **`agents`** `array` — Information about the engagement's agents. **Items:** - **`display_name`** `string` — The agent's name. - **`sip_zone_ip_address`** `string`, format: `ipv4` — The SIP zome's IP address. - **`team_ids`** `array` — The agent's team IDs **Items:** `string` — agent team ID list - **`team_names`** `array` — The agent's team names. **Items:** `string` — agent team name list. - **`user_device_mac_address`** `string` — MAC address of the agent's device. - **`user_email`** `string` — The agent's email. - **`user_id`** `string` — The agent's ID. - **`user_ip_address`** `string`, format: `ipv4` — IP address of the agent's device. - **`user_region`** `string` — The agent's region name - **`user_registered_sip_zone`** `string` — The SIP zone where the agent registered. - **`call_legs`** `array` — The direction of the engagement call leg. \`inbound\` | \`outbound\`. **Items:** `string`, possible values: `"inbound", "outbound"` - **`callee_number`** `string` — The callee's phone number. - **`callee_number_type`** `string`, possible values: `"toll_free_number", "virtual_service_number", "byoc_number"` — The callee's number type. - **`caller_id`** `string` — The caller's number. - **`caller_number`** `string` — The caller's phone number. - **`caller_number_type`** `string`, possible values: `"toll_free_number", "virtual_service_number", "byoc_number"` — The caller's number type. - **`calling_party`** `string`, possible values: `"consumer", "agent"` — The calling's party. - **`charge`** `string` — The bill's charge. - **`charge_type`** `string`, possible values: `"per_minute"` — The charge type. - **`consumer_display_name`** `string` — The consumer's name. - **`consumer_number`** `string` — The consumer's phone number. - **`country_name`** `string` — The country name. - **`direction`** `string`, possible values: `"inbound", "outbound"` — The engagement's direction. - **`distributions`** `array` — The engagement's distribution. **Items:** `string`, possible values: `"acd", "non_acd"` - **`end_time`** `string` — 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_id`** `string` — The engagement's ID - **`flows`** `array` — Information about the engagement's flows. **Items:** - **`flow_id`** `string` — The flow's ID. - **`flow_name`** `string` — The flow's name. - **`inbox`** `boolean` — Flag to determine whether a message is in the box. - **`monitored`** `boolean` — Flag to determine whether to monitored. - **`queues`** `array` — Information about the engagement's queues. **Items:** - **`cc_queue_id`** `string` — The Contact Center queue's ID. - **`queue_id`** `string` — The queue's ID. - **`queue_name`** `string` — The queue's name. - **`rates`** `array` — The price for each sent message. **Items:** `string` - **`recorded`** `boolean` — Flag to determine whether to recorded. - **`result`** `string`, 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_list`** `array` — Information about the session border controllers (SBCs) involved in the call. **Items:** - **`consumer_sbc_ip_address`** `string` — The customer's SBC IP address. - **`consumer_zoom_trunk_name`** `string` — The name of the trunk between the customer SBC and Zoom SBC. - **`session_border_controller_ip_address`** `string` — The SBC's IP address. - **`session_border_controller_name`** `string` — The session border controller's name. - **`start_time`** `string` — 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_types`** `array` — 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_duration`** `integer`, format: `int64` — The engagement's total duration, in seconds. - **`types`** `array` — 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_details`** `array` — All related call logs. **Items:** - **`agents`** `array` — Information about the engagement's agents. **Items:** - **`display_name`** `string` — The agent's name. - **`sip_zone_ip_address`** `string`, format: `ipv4` — The SIP zone's IP address. - **`team_ids`** `array` — The agent's team IDs **Items:** `string` — Agent team ID list. - **`team_names`** `array` — The agent's team names. **Items:** `string` — Agent team name list. - **`user_device_mac_address`** `string` — The agent's device's MAC address. - **`user_email`** `string` — The agent's email. - **`user_id`** `string` — The agent's ID. - **`user_ip_address`** `string`, format: `ipv4` — The agent's device's IP address. - **`user_region`** `string` — The agent's region name. - **`user_registered_sip_zone`** `string` — The SIP zone where the agent registered. - **`call_leg`** `string`, possible values: `"inbound", "outbound"` — The direction of the engagement call log. - **`callee_number`** `string` — The callee's phone number. - **`callee_number_type`** `string`, possible values: `"toll_free_number", "virtual_service_number", "byoc_number"` — The callee's number type. - **`caller_id`** `string` — The caller's number. - **`caller_number`** `string` — The caller's phone number. - **`caller_number_type`** `string`, possible values: `"toll_free_number", "virtual_service_number", "byoc_number"` — The caller's number type. - **`calling_party`** `string`, possible values: `"consumer", "agent"` — The calling's party. - **`charge`** `string` — The bill's charge. - **`charge_type`** `string`, possible values: `"per_minute"` — The charge type. - **`consumer_display_name`** `string` — The consumer's name. - **`consumer_number`** `string` — The consumer's phone number. - **`country_name`** `string` — The country name. - **`distribution`** `string`, possible values: `"acd", "non_acd"` — The call log's distribution. - **`end_time`** `string` — 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_id`** `string` — The engagement's ID. - **`flow`** `object` — Information about the flow. - **`flow_id`** `string` — The flow's ID. - **`flow_name`** `string` — The flow's name. - **`inbox`** `boolean` — Whether a message is in the box. - **`monitored`** `boolean` — Whether to monitor. - **`queue`** `object` — Information about the queue. - **`cc_queue_id`** `string` — The Contact Center queue's ID. - **`queue_name`** `string` — The queue's name. - **`rate`** `string` — The price for sent message. - **`recorded`** `boolean` — Whether to record. - **`result`** `string`, 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_time`** `string` — 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_duration`** `integer`, format: `int64` — The call log's total duration, in seconds. - **`type`** `string`, possible values: `"external_call", "external_conference_call", "external_callback_call", "internal_call", "internal_conference_call", "internal_callback_call"` — The call's type. **Example:** ```json { "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\` \
Bad Request \*\*Error Code:\*\* \`300\` \
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'\`. \
\*\*Error Code:\*\* \`300\` \
The requested report exceeds the 1-month limit. \
\*\*Error Code:\*\* \`300\` \
Invalid field. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`1001\` \
User does not exist: {userId}. \
\*\*Error Code:\*\* \`1201\` \
Queue does not exist: {queueId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(/docs/api/rate-limits/).