Quality Management API
- OpenAPI Version:
3.1.1 - API Version:
2
Zoom Quality Management is designed to help contact centers track and analyze customer interactions, measure agent performance, provide actionable insights, and proactively identify areas for improvement while maintaining organizational compliance.
Servers
- URL:
https://api.zoom.us/v2
Operations
List calibrations
- Method:
GET - Path:
/qm/calibrations - Tags: Calibrations
List calibration tasks in Quality Management performance management.
Scopes: qm_calibrations:read:admin,qm_calibrations:read
Granular Scopes: zoom_quality_management:read:calibrations,zoom_quality_management:read:calibrations:admin
Rate Limit Label: LIGHT
Parameters
status
- In:
query
The calibration's public status.
string, possible values: "Active", "Completed", "Expired", "Canceled"
agent_id
- In:
query
The agent's Zoom user ID.
string
interaction_id
- In:
query
The interaction ID.
string
from
- In:
query
Filter calibrations created on or after this time, in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
to
- In:
query
Filter calibrations created on or before this time, in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
page_size
- In:
query
Default: 30. Maximum: 100.
integer
next_page_token
- In:
query
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.
string
Responses
Status: 200 Successfully listed calibrations.
Content-Type: application/json
dataarray— Information about the calibrations.Items: account_idstring— The account ID.agent_infoobject— The agent's information.display_namestring— The agent's display name.user_idstring— The agent's Zoom user ID.
calibration_idstring— The calibration task ID.calibration_scorenumber— The average score across completed evaluator submissions for the calibration.channel_typestring, possible values:"VIDEO", "AUDIO", "MANUAL", "MESSAGE"— The interaction's channel type.completion_datestring— The date when the calibration was completed, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.create_timestring— The date when the calibration was created, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.creator_infoobject— The calibration creator's information.display_namestring— The calibration creator's display name.user_idstring— The calibration creator's Zoom user ID.
due_datestring— The calibration due date, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.evaluation_scorenumber— The sibling manual evaluation score for the same interaction.evaluators_infoarray— The evaluators' information.Items: display_namestring— The evaluator's display name.user_idstring— The evaluator's Zoom user ID.
interaction_deletedboolean— Whether the interaction was deleted.interaction_idstring— The interaction ID.minimum_evaluatorsinteger— The minimum number of evaluator submissions required to complete the calibration.modify_timestring— The date when the calibration was last modified, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.scorecard_idstring— The calibration scorecard ID.scorecard_namestring— The calibration scorecard name.scoring_formatstring, possible values:"points", "percentage"— The scorecard's scoring format.statusstring, possible values:"Active", "Completed", "Expired", "Canceled"— The calibration's current status.task_namestring— The calibration task name.total_scorenumber— The total score on the scorecard.
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.page_sizeinteger— The number of records returned within a single API call.totalinteger— The total number of all the records available across pages.
Example:
{
"total": 51,
"page_size": 30,
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
"data": [
{
"calibration_id": "0e73a69f8f104d24a589fa0c615abca8",
"account_id": "SY-AEWW6Ruqgt89_T2zqBg",
"channel_type": "VIDEO",
"task_name": "calibration_q9DyYF8iSXa3PVAhb6nekQ",
"interaction_id": "q9DyYF8iSXa3PVAhb6nekQ",
"scorecard_id": "2uJ4u83yQ_qbyyFDmxsMcQ",
"scorecard_name": "Customer Care",
"minimum_evaluators": 100,
"due_date": "2026-08-05T10:45:00Z",
"create_time": "2026-07-20T09:52:22Z",
"modify_time": "2026-07-28T09:52:22Z",
"creator_info": {
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
},
"agent_info": {
"user_id": "httgPnTgTxq0d65-alfYVw",
"display_name": "Ashlee York"
},
"evaluators_info": [
{
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
}
],
"scoring_format": "percentage",
"total_score": 50,
"evaluation_score": 42,
"calibration_score": 40,
"status": "Active",
"interaction_deleted": false,
"completion_date": "2026-03-16T10:45:00Z"
}
]
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad request.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized.
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 calibration detail
- Method:
GET - Path:
/qm/calibrations/{calibrationId} - Tags: Calibrations
Retrieve one calibration record, including participants, aggregate scoring, and per-evaluator submission status.
Scopes: qm_calibrations:read,qm_calibrations:read:admin
Granular Scopes: zoom_quality_management:read:calibrations,zoom_quality_management:read:calibrations:admin
Rate Limit Label: LIGHT
Parameters
calibrationId required
- In:
path
The calibration task ID.
string
Responses
Status: 200 Successfully retrieved the calibration detail.
Content-Type: application/json
account_idstring— The account ID.agent_infoobject— The agent's information.display_namestring— The agent's display name.user_idstring— The agent's user ID.
calibration_complete_percentagenumber— The percentage of assigned evaluators who have submitted the calibration.calibration_idstring— The calibration task ID.calibration_resultarray— Question-level comparison results for the calibration.Items: max_scorenumber— The maximum score for the section.question_listarray— The questions in this section.Items: descriptionstring— The question description.evaluatorsarray— The evaluator-level responses for the question.Items: answerstring— The evaluator's answer for the question.commentstring— The evaluator's comment for the question.namestring— The evaluator's display name.scorenumber— The evaluator's score for the question.
max_scorenumber— The maximum score for the question.titlestring— The question title.total_scorenumber— The overall score for the question after aggregation.
sectionstring— The scorecard section name.
calibration_scorenumber— The average score across completed evaluator submissions for the calibration.channel_typestring, possible values:"VIDEO", "AUDIO", "MANUAL", "MESSAGE"— The interaction's channel type.completion_datestring— The date when the calibration was completed, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.create_timestring— The date when the calibration was created, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.creator_infoobject— The calibration creator's information.display_namestring— The calibration creator's display name.user_idstring— The calibration creator's Zoom user ID.
division_idstring— The division ID associated with the calibration task.due_datestring— The calibration due date, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.evaluation_scorenumber— The sibling manual evaluation score for the same interaction.evaluator_submissionsarray— The evaluator submission statuses for this calibration.Items: evaluatorobject— The evaluator's information.display_namestring— The evaluator's display name.user_idstring— The evaluator's Zoom user ID.
scorenumber | null— The evaluator's submitted calibration score.statusstring, possible values:"pending", "in_progress", "completed"— The evaluator's submission status.submitted_atstring | null— The date when the evaluator submitted the calibration, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.
evaluators_infoarray— The evaluators' information.Items: display_namestring— The evaluator's display name.user_idstring— The evaluator's user ID.
interaction_deletedboolean— Whether the interaction was deleted.interaction_idstring— The interaction ID.minimum_evaluatorsinteger— The minimum number of evaluator submissions required to complete the calibration.modify_timestring— The date when the calibration was last modified, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.scorecard_idstring— The calibration scorecard ID.scorecard_namestring— The calibration scorecard name.scoring_formatstring, possible values:"points", "percentage"— The scorecard's scoring format.statusstring, possible values:"Active", "Completed", "Expired", "Canceled"— The calibration's current status.task_namestring— The calibration task name.total_scorenumber— The total score on the scorecard.
Example:
{
"calibration_id": "0e73a69f8f104d24a589fa0c615abca8",
"account_id": "SY-AEWW6Ruqgt89_T2zqBg",
"task_name": "calibration_q9DyYF8iSXa3PVAhb6nekQ",
"status": "Active",
"channel_type": "VIDEO",
"division_id": "div_123",
"interaction_id": "q9DyYF8iSXa3PVAhb6nekQ",
"scorecard_id": "2uJ4u83yQ_qbyyFDmxsMcQ",
"scorecard_name": "Customer Care",
"minimum_evaluators": 100,
"due_date": "2026-08-05T10:45:00Z",
"create_time": "2026-07-20T09:52:22Z",
"modify_time": "2026-07-28T09:52:22Z",
"creator_info": {
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
},
"agent_info": {
"user_id": "httgPnTgTxq0d65-alfYVw",
"display_name": "Ashlee York"
},
"evaluators_info": [
{
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
}
],
"scoring_format": "percentage",
"total_score": 50,
"evaluation_score": 42,
"calibration_score": 40,
"calibration_complete_percentage": 0.66,
"interaction_deleted": false,
"completion_date": "2026-03-16T10:45:00Z",
"evaluator_submissions": [
{
"evaluator": {
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
},
"status": "completed",
"submitted_at": "2026-07-28T10:10:00Z",
"score": 41
}
],
"calibration_result": [
{
"section": "Greeting",
"max_score": 10,
"question_list": [
{
"title": "Used proper opening",
"description": "Started the interaction with the required opening statement.",
"max_score": 5,
"total_score": 5,
"evaluators": [
{
"score": 5,
"name": "Manager One",
"comment": "Good opening and tone.",
"answer": "Yes"
}
]
}
]
}
]
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad request.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Calibration 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 cases
- Method:
GET - Path:
/qm/cases - Tags: Cases
Returns cases visible to the authenticated caller.
Scopes: qm_cases:read,qm_cases:read:admin
Granular Scopes: zoom_quality_management:read:cases,zoom_quality_management:read:cases:admin
Rate Limit Label: LIGHT
Parameters
page_size
- In:
query
The page size request parameter.
integer, default: 30 — The page size value.
next_page_token
- In:
query
The next page token request parameter.
string — The next page token value.
filter
- In:
query
The case ownership filter.
string, possible values: "myCases", "allCases", default: "allCases" — The filter value.
from
- In:
query
The lower bound for the source case creation time as an ISO-8601 UTC date-time.
string, format: date-time — The from value.
to
- In:
query
The upper bound for the source case creation time as an ISO-8601 UTC date-time.
string, format: date-time — The to value.
agent_id
- In:
query
The agent ID request parameter.
string — The agent ID value.
status
- In:
query
The status request parameter.
string — The status value.
priority
- In:
query
The priority request parameter.
string — The priority value.
source_case_id
- In:
query
The source case ID request parameter.
string — The source case ID value.
connection_id
- In:
query
The connection ID request parameter.
string — The connection ID value.
sort_by
- In:
query
The sort by request parameter.
string, possible values: "created_at", "creating_time", "last_source_updated_at", "status", "priority", "assignee", "updated_at" — The sort by value.
sort_order
- In:
query
The sort order request parameter.
string, possible values: "asc", "desc" — The sort order value.
Responses
Status: 200 Cases returned successfully.
Content-Type: application/json
data(required)array— The list of case records.Items: qm_case_id(required)string— The quality management case ID.account_idstring— The account ID.connection_idstring— The connection ID.create_timestring, format:date-time— The time when the case was created.derived_engagement_idsarray— The derived engagement IDs.Items: stringdivision_idstring— The division ID.external_case_keystring— The external case key.indicatorsarray— Case-level indicator summaries.Items: indicator_idstring— The case-level indicator identifier.indicator_namestring— The case-level indicator name.matched_activity_countinteger, format:int32— The number of activities matched by the indicator.
last_idempotency_keystring— The last idempotency key.last_source_updated_atstring, format:date-time— The timestamp when the source was last updated.mapped_fieldsobject— The mapped fields value.modify_timestring, format:date-time— The time when the case was last modified.schema_versionstring— The schema version.source_case_idstring— The source case ID.topicsarray— Case-level topic summaries.Items: matched_activity_countinteger, format:int32— The number of activities matched to the topic.matched_activity_idsarray— The activity identifiers matched to the topic.Items: string— The matched activity identifier.topicstring— The case-level topic text.topic_idstring— The case-level topic identifier.typestring— The topic classification type.
page_size(required)integer— The number of records returned per page.total(required)integer, format:int64— The total number of records.next_page_tokenstring | null— The token used to retrieve the next page of results.
Example:
{
"total": 1,
"page_size": 1,
"next_page_token": "example-value",
"data": []
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request The request is invalid or malformed.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized The request lacks valid authentication credentials.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden The caller is authenticated but does not have the required case-read scopes.
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 An unexpected server-side failure occurred.
List automated evaluations
- Method:
GET - Path:
/qm/automated_evaluations - Tags: Evaluations
List automated evaluations.
Scopes: qm_evaluations:read:admin,qm_evaluations:read
Granular Scopes: zoom_quality_management:read:evaluations:admin,zoom_quality_management:read:evaluations
Rate Limit Label: LIGHT
Parameters
status
- In:
query
The automated evaluation's current status.
string, possible values: "COMPLETED", "PROCESSING", "FAILED"
agent_id
- In:
query
The scored agent's user ID.
string
interaction_id
- In:
query
The interaction ID.
string
page_size
- In:
query
Default - 30 Maximum - 100
integer
from
- In:
query
The start date, in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
to
- In:
query
The end date, in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
next_page_token
- In:
query
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.
string
Responses
Status: 200 **HTTP Status Code:** `200` Successfully listed user's automated evaluations.
Content-Type: application/json
dataarray— Information about the automated evaluations.Items: account_idstring— The account ID.agent_infoobject— The agent information.display_namestring— The evaluation's agent user display name.user_idstring— The evaluation's agent user ID.
create_timestring— The date when the automated evaluation was created, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.evaluation_scorenumber— The overall score of the automated evaluation, calculated based on the scorecard and answers.idstring— The automated evaluation task ID.interaction_deletedboolean— Whether the interactions was deleted.interaction_idstring— The interaction ID.modify_timestring— The date when the automated evaluation was modified, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.scorecard_idstring— The automated evaluation scorecard ID.scorecard_namestring— The automated scorecard name.scoring_formatstring, possible values:"points", "percentage"— The scorecard's scoring format .statusstring, possible values:"COMPLETED", "PROCESSING", "FAILED"— The evaluation's current status.total_scorenumber— The total score on the scorecard.
next_page_tokenstring— Use the next page token to paginate through large result sets. A next page token is returned whenever the set of the available result list exceeds the page size. This token's expiration period is 15 minutes.page_sizenumber— The number of records returned within a single API call.totalnumber— The total number of all the records available across pages.
Example:
{
"total": 51,
"page_size": 20,
"data": [
{
"id": "0e73a69f8f104d24a589fa0c615abca8",
"account_id": "SY-AEWW6Ruqgt89_T2zqBg",
"modify_time": "2024-05-28T09:52:22Z",
"create_time": "2024-05-28T09:52:22Z",
"interaction_id": "q9DyYF8iSXa3PVAhb6nekQ",
"scorecard_id": "2uJ4u83yQ_qbyyFDmxsMcQ",
"agent_info": {
"user_id": "httgPnTgTxq0d65-alfYVw",
"display_name": "Ashlee York"
},
"scorecard_name": "Customer Care",
"scoring_format": "percentage",
"total_score": 50,
"evaluation_score": 10,
"interaction_deleted": false,
"status": "COMPLETED"
}
],
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}List evaluations
- Method:
GET - Path:
/qm/evaluation - Tags: Evaluations
List manually completed evaluations.
Scopes: qm_evaluations:read:admin,qm_evaluations:read
Granular Scopes: zoom_quality_management:read:evaluations,zoom_quality_management:read:evaluations:admin
Rate Limit Label: LIGHT
Parameters
status
- In:
query
The evaluation's current status.
string, possible values: "Active", "Completed", "Pending", "Expired", "Canceled"
agent_ids
- In:
query
The scored agents' user IDs.
string
evaluator_id
- In:
query
The evaluators' user IDs.
string
acknowledgement_status
- In:
query
The acknowledgement status.
string, possible values: "Pending", "Complete", "Auto complete", "None"
interaction_id
- In:
query
The interaction ID.
string
page_size
- In:
query
Default - 30 Maximum - 100
integer
from
- In:
query
The start date in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
to
- In:
query
The end date in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
next_page_token
- In:
query
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.
string
Responses
Status: 200 **HTTP Status Code:** `200` Successfully listed user's evaluations.
Content-Type: application/json
dataarray— Information about the evaluations.Items: account_idstring— The account ID.acknowledgement_statusstring, possible values:"Pending", "Complete", "Auto Complete", "None"— The acknowledgement status.agent_infoobject— The agent information.display_namestring— The evaluation's agent user display name.user_idstring— The evaluation's agent user ID.
channel_typestring, possible values:"VIDEO", "AUDIO", "MANUAL", "MESSAGE"— The interaction's channel type.completion_datestring— Estimated completion time.create_timestring— The date when the evaluation was created, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.creator_idstring— The evaluation's creator Zoom user ID.creator_infoobject— The evaluation creator information.display_namestring— The evaluation's creator user display name.user_idstring— The evaluation's creator Zoom user ID.
evaluation_scorenumber— The overall score of the evaluation, calculated based on the scorecard and answers.evaluators_infoarray— The evaluators' information.Items: display_namestring— The evaluation's evaluator user display name.user_idstring— The evaluation's evaluator user ID.
idstring— The evaluation task ID.interaction_deletedboolean— Whether the interactions was deleted.interaction_idstring— The interaction ID.modify_timestring— The date when the evaluation was modified, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.scorecard_idstring— The evaluation scorecard ID.scorecard_namestring— The evaluation scorecard name.scoring_formatstring, possible values:"points", "percentage"— The scorecard's scoring format .statusstring, possible values:"Active", "Completed", "Pending", "Expired", "Cancled"— The evaluation's current status.task_namestring— The evaluation task name.total_scorenumber— The total score on the scorecard.user_idstring— The Zoom user 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 the available result list exceeds the page size. This token's expiration period is 15 minutes.page_sizenumber— The number of records returned within a single API call.totalnumber— The total number of all the records available across pages.
Example:
{
"total": 51,
"page_size": 20,
"data": [
{
"id": "0e73a69f8f104d24a589fa0c615abca8",
"account_id": "SY-AEWW6Ruqgt89_T2zqBg",
"user_id": "httgPnTgTxq0d65-alfYVw",
"creator_id": "b0_yDuNGSq65EF8i1f0PcQ",
"modify_time": "2024-05-28T09:52:22Z",
"create_time": "2024-05-28T09:52:22Z",
"channel_type": "VIDEO",
"task_name": "evaluation_q9DyYF8iSXa3PVAhb6nekQ",
"interaction_id": "q9DyYF8iSXa3PVAhb6nekQ",
"scorecard_id": "2uJ4u83yQ_qbyyFDmxsMcQ",
"creator_info": {
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
},
"agent_info": {
"user_id": "httgPnTgTxq0d65-alfYVw",
"display_name": "Ashlee York"
},
"evaluators_info": [
{
"user_id": "b0_yDuNGSq65EF8i1f0PcQ",
"display_name": "Rick Arps"
}
],
"scorecard_name": "Customer Care",
"scoring_format": "percentage",
"total_score": 50,
"evaluation_score": 10,
"interaction_deleted": false,
"status": "Active",
"acknowledgement_status": "Pending",
"completion_date": "2026-03-16T10:45:00Z"
}
],
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad Request
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
View evaluation detail
- Method:
GET - Path:
/qm/evaluation/{evaluationId} - Tags: Evaluations
View a specific interaction's evaluation detail.
Scopes: qm_evaluations:read,qm_evaluations:read:admin
Granular Scopes: zoom_quality_management:read:evaluations,zoom_quality_management:read:evaluations:admin
Rate Limit Label: MEDIUM
Parameters
evaluationId required
- In:
path
The evaluation's ID.
string
Responses
Status: 200 **HTTP Status Code:** `200` Successfully view the evaluation detail.
Content-Type: application/json
scorecardobject— The scorecard's detail.acknowledgment_statusstring, possible values:"Pending", "Complete", "Auto complete", "None"— The evaluation's acknowledgment status.agent_namestring— The name of the agent involved in the interaction being evaluated.agent_user_idstring— The user ID of the agent involved in the interaction.completion_datestring— Estimated completion time.create_timestring— The date when the evaluation was created, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.dispute_statusstring, possible values:"None", "Pending", "Complete"— The evaluation's dispute status.engagement_idstring— The ID of the engagement associated with the interaction.evaluatorobject— The evaluator information.namestring— The name of the person who conducted the evaluation.user_idstring— The evaluator's Zoom user ID.
interaction_idstring— The ID of the interaction being evaluated.modify_timestring— The date when the evaluation was modified, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.scorenumber— The actual score obtained in this evaluation, not exceeding the total_score.scorecard_idstring— The scorecard's ID.scorecard_namestring— The name of the scorecard used for evaluation.sectionsarray— The scorecard section infomation.Items: namestring— The name of the section within the scorecard.ordernumber— The order of this section in the scorecard.questionsarray— The questions.Items: answer_idstring— The ID of the selected answer for this question.answer_labelstring— The label of the selected answer for this question.descriptionstring— A detailed description or additional information about the question.optionsarray— The options.Items: auto_failboolean— Indicates whether selecting this option causes an automatic failure, `true` or `false`.labelstring— The option's display text.option_idstring— The option's ID.pointsnumber— The option's points.valuestring— The option's value.
question_idstring— The question's ID.scaleobject— The information about rating scale type question.has_na_optionboolean— Indicates whether there is an `N/A` option.high_labelstring— The high score label.low_labelstring— The low score label.scale_maxinteger— Maximum score.scale_mininteger— Minimum score.
scorenumber— The actual score obtained in this question, not exceeding the total_score.titlestring— The question's title or main text.total_scorenumber— The maximum possible score that can be achieved for this question.typestring, possible values:"Yes/No", "Single Choice", "Rating Scale"— The question's type.
scorenumber— The actual score obtained in this section, not exceeding the total_score.total_scorenumber— The maximum possible score that can be achieved for this section.weightnumber— The weight of the section in the overall score calculation.
total_scorenumber— The maximum possible score that can be achieved for this evaluation.
Example:
{
"scorecard": {
"scorecard_id": "CaBoBGvDSCmYt5GDDxP4-Q",
"scorecard_name": "AAAAAAAA Automated DEMO test 1212 TEST 111",
"sections": [
{
"name": "Service Attitude",
"weight": 34,
"order": 1,
"questions": [
{
"question_id": "7jNGHA0QSRGdsi-R03d8tQ",
"type": "Rating Scale",
"title": "Did the customer service representative demonstrate patience and friendliness?",
"description": "Evaluate the agent's service attitude.",
"options": [
{
"option_id": "m_DJVk5BS7yqoR2ayN16kw",
"label": "Yes",
"value": "Yes",
"auto_fail": false,
"points": 10
}
],
"answer_id": "m_DJVk5BS7yqoR2ayN16kw",
"answer_label": "Yes",
"score": 10,
"scale": {
"has_na_option": true,
"high_label": "Excellent",
"low_label": "Poor",
"scale_max": 10,
"scale_min": 1
},
"total_score": 10
}
],
"score": 20,
"total_score": 30
}
],
"score": 90,
"total_score": 100,
"evaluator": {
"name": "Admin3",
"user_id": "ycEUjKmDSnuPwF33KLTxJg"
},
"create_time": "2024-05-28T09:52:22Z",
"modify_time": "2024-05-28T09:52:22Z",
"acknowledgment_status": "Complete",
"dispute_status": "None",
"interaction_id": "yBe0fI6kTFG5IyThF8eRXg",
"engagement_id": "e59gNVtjTuS--NjwquFKQA",
"agent_name": "The agent's name.",
"agent_user_id": "The agent's ID.",
"completion_date": "2026-03-16T10:45:00Z"
}
}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
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 interactions
- Method:
GET - Path:
/qm/interactions - Tags: Interactions
List interactions.
Scopes: qm_interactions:read,qm_interactions:read:admin
Granular Scopes: zoom_quality_management:read:interactions,zoom_quality_management:read:interactions:admin
Rate Limit Label: MEDIUM
Parameters
from
- In:
query
The start date in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
to
- In:
query
The end date in yyyy-MM-dd'T'HH:mm:ss'Z' format.
string
indicator_id
- In:
query
The indicator ID to query.
string
topic
- In:
query
The topic words to query.
string
engagement_id
- In:
query
The engagement's ID to query.
string
scored
- In:
query
If interactions are scored.
boolean
user_ids
- In:
query
The agent IDs, separated by commas.
string
channels
- In:
query
The channel types, separated by commas.
string
direction
- In:
query
The direction of the call.
inboundoutbound..
string
dispositions
- In:
query
The disposition names, separated by commas.
string
language
- In:
query
The primary language.
string
queues
- In:
query
The queue IDs, separated by commas.
string
next_page_token
- In:
query
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.
string
page_size
- In:
query
Default:30 Maximum:100
integer, default: 30
time_zone
- In:
query
The user's time zone.
string
Responses
Status: 200 **HTTP Status Code:** `200` Successfully listed user's interactions.
Content-Type: application/json
interactionsarray— Information about the interaction.Items: interaction_info(required)object— The interaction infomation.interaction_id(required)string— The interaction id.agent_namestring— The agent name.associated_idsarray— The associated interaction ids.Items: string— The associated interaction id.channel_typestring, possible values:"VIDEO", "MANUAL", "SMS", "AUDIO", "WEB_CHAT"— The channel type, includes VIDEO, MANUAL, SMS, AUDIO and WEB_CHAT.consumer_namestring— The consumer name.evaluationsarray— The associated evaluations.Items: evaluation_idstring— The evaluation ID.evaluation_typestring, possible values:"Manual", "Automated"— The evaluation type.
fromstring— The caller's phone number in E.164 format.tostring— The recipient's phone number in E.164 format.
start_time(required)string— The start date in yyyy-MM-dd'T'HH:mm:ss'Z' format.crosstalk_event_countinteger— The count of crosstalk event.directionstring— The direction.dispositionstring— The dispositiondurationnumber— The interaction duration in minutes.engagement_idstring— The engagement id.hold_event_countinteger— The count of hold event.primary_languagestring— The primary language.queue_idstring— The call queue id.queue_namestring— The call queue name.scorecard_namestring— The scorecard name.screen_recording_statusstring, possible values:"UNAVAILABLE", "AVAILABLE", "DELETED"— The status of the interaction screen recording. **UNAVAILABLE, AVAILABLE, DELETED**silence_event_countinteger— The count of silence event.summaryobject— The summary.engagement_scorenumber— The engagement score.evaluation_scorenumber— The evaluation score.sentiment_scorenumber— The sentiment score.
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 the available result list exceeds the page size. The expiration period is 15 minutes.page_sizenumber— The number of records returned within a single API call.total_recordsinteger— The total number of all the records available across pages.
Example:
{
"total_records": 50,
"page_size": 30,
"interactions": [
{
"start_time": "2020-05-01T19:13:02Z",
"duration": 5,
"queue_id": "Je4zLPZ-SBiLCiebE35ALQ",
"queue_name": "Demo",
"interaction_info": {
"from": "+16692520210",
"to": "+12364352078",
"interaction_id": "X51n17BZQTqKtxwF4mmTIw",
"agent_name": "Admin3",
"consumer_name": "+16692520210",
"channel_type": "AUDIO",
"associated_ids": [
"xxxx"
],
"evaluations": [
{
"evaluation_id": "2c8704b1bc374bb981dd66428ca3eb7b",
"evaluation_type": "Manual scoring"
}
]
},
"engagement_id": "PH6wferlTACAfBzYGAVOYg",
"direction": "inbound",
"disposition": "dev-disponsition",
"silence_event_count": 2,
"crosstalk_event_count": 2,
"hold_event_count": 3,
"scorecard_name": "test Kraig 1227",
"summary": {
"evaluation_score": 58.63,
"sentiment_score": 58.63,
"engagement_score": 58.63
},
"primary_language": "en",
"screen_recording_status": "AVAILABLE"
}
],
"next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42"
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad Request **Error Code:** `1001` <br> The from or to time is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not Found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](/docs/api/rest/rate-limits/).
Add an interaction
- Method:
POST - Path:
/qm/interactions - Tags: Interactions
Add an interaction by a third party download URL.
Scopes: qm_interactions:write:admin,qm_interactions:write
Granular Scopes: zoom_quality_management:write:interactions,zoom_quality_management:write:interactions:admin
Request Body
Content-Type: application/json
download_url(required)string— The third party download URL.directionstring, possible values:"inbound", "outbound"— The call's direction. * `inbound` * `outbound`dispositionstring— The disposition's name.interaction_infoobject— The interaction infomation.channel_type(required)string, possible values:"video", "voice"— The interaction's channel.agent_emailstring— The agent's email.agent_idstring— The agent's user ID.consumer_namestring— The consumer's name.fromstring— The caller's phone number in E.164 format.tostring— The recipient's phone number in E.164 format.
primary_languagestring, possible values:"en-GB", "en-US", "ar", "da-DK", "de-DE", "es-ES", "es-MX", "fr-CA", "fr-FR", "it-IT", "ja", "ko-KR", "nl-NL", "pt-BR", "pt-PT", "ru", "zh-CN", "zh-HK"— The primary language. If left empty, the system automatically detects the language. If specified, the system transcribes using the given language. [**Supported language codes**](https://developers.zoom.us/docs/api/references/abbreviations/#languages)queue_idstring— The Contact Center queue's ID.start_timestring— The interaction start time in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.
Example:
{
"download_url": "https://www.example.com/uploads/InboundSampleRecording.mp3",
"interaction_info": {
"from": "+12053546173",
"to": "+12095422197",
"consumer_name": "Jill Chill",
"channel_type": "video",
"agent_id": "ycEUjKmDSnuPwF33KLTxJg",
"agent_email": "example_admin@example.com"
},
"start_time": "2025-09-01T19:13:02Z",
"direction": "inbound",
"queue_id": "zxcv12m",
"disposition": "dispostion_a",
"primary_language": "en-US"
}Responses
Status: 201 **HTTP Status Code:** `201` Successfully added the user's interaction.
Content-Type: application/json
interaction_idstring— The added interaction ID.
Example:
{
"interaction_id": "QMp3e6_WShCVuifNbrQd4w"
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad Request **Error Code:** `1001` <br> The interaction start time is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized
Status: 404 **HTTP Status Code:** `404` <br> Not Found 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/).
View interaction detail
- Method:
GET - Path:
/qm/interactions/{interactionId} - Tags: Interactions
View the details of a specific interaction.
Scopes: qm_interactions:read:admin,qm_interactions:read
Granular Scopes: zoom_quality_management:read:interactions,zoom_quality_management:read:interactions:admin
Rate Limit Label: MEDIUM
Parameters
interactionId required
- In:
path
The interaction ID.
string
Responses
Status: 200 **HTTP Status Code:** `200` Successfully view the interaction detail.
Content-Type: application/json
interaction_info(required)object— The interaction infomation.interaction_id(required)string— The interaction ID.agent_namestring— The agent's name.associated_idsarray— The associated interaction IDs.Items: string— The associated interaction ID.channel_typestring, possible values:"VIDEO", "MANUAL", "SMS", "AUDIO", "WEB_CHAT"— The channel type, including `VIDEO`, `MANUAL`, `SMS`, `AUDIO` and `WEB_CHAT`.consumer_namestring— The consumer's name.evaluation_scorenumber— The evaluation score.evaluationsarray— The associated evaluations.Items: evaluation_idstring— The evaluation ID.evaluation_namestring— The name of the scorecard used for this evaluation.evaluation_status_descstring, possible values:"COMPLETED", "PROCESSING", "FAILED", "Active", "Completed", "Pending", "Expired", "Canceled"— For automatic scoring, the enumeration values are `COMPLETED`, `PROCESSING`, and `FAILED`. For manual scoring, the enumeration values are `Active`, `Completed`, `Pending`, `Expired`, and `Canceled`.evaluation_typestring, possible values:"Manual", "Automated"— The evaluation type.evaluator_idstring— The unique user ID of the evaluator who performed the manual evaluation. Only present for manual evaluations.evaluator_namestring— The display name of the evaluator who performed the manual evaluation. Only present for manual evaluations.question_commentsarray— Comments provided for each question or item in the scorecard evaluation.Items: comment_textstring— The evaluator's comment text for this question.comment_timenumber— The timestamp in seconds, from the start of the recording where this comment applies. Useful for linking comments to specific moments in the interaction.question_idstring— The scorecard question's or item's unique identifier.question_titlestring— The scorecard question's title or text.
scorenumber— The actual score achieved in this evaluation.score_ratenumber— The score rate, as a decimal. `Score`/`total_score` for points format, or the score itself for percentage format.scoring_formatstring, possible values:"percentage", "points"— The scoring format type.section_commentsarray— Comments provided for each section in the scorecard evaluation.Items: comment_textstring— The evaluator's comment text for this section.section_idstring— The unique identifier of the scorecard section.section_namestring— The name/title of the scorecard section
session_idstring— The unique session ID for this evaluation.total_scorenumber— The maximum possible score for this evaluation.
evaluator_namestring— The evaluator's name.evaluator_user_idstring— The evaluator's user ID.fromstring— The caller's phone number in E.164 format.scorecard_idstring— The scorecard ID.scorecard_namestring— The scorecard name.tostring— The recipient's phone number in E.164 format.
analysisobject— AI-powered analysis of the interaction content.good_questionsarray— Array of effective questions that were asked during the interaction.Items: good_questionstring— The good question.
indicatorsarray— Array of indicators detected in the interaction.Items: indicator_namestring— The indicator name.
next_stepsarray— Array of recommended actions or follow-up steps based on the analysis of the interaction content.Items: next_stepstring— The next step or action.
topicsarray— Array of topics identified in the interaction content.Items: topic_namestring— The topic name.typestring, possible values:"predefined", "discovered"— `predefined` for a custom topic defined by an account, or 'discovered' such as an AI generated topic.
crosstalk_eventsarray— The crosstalk event infomation.Items: end_timestring— The crosstalk event end time.start_timestring— The crosstalk event start time.
directionstring— The direction.durationnumber— The interaction duration in minutes.engagement_idstring— The engagement ID.hold_eventsarray— The crosstalk event infomation.Items: end_timestring— The hold event end time.start_timestring— The hold event start time.
interaction_summarystring— The interaction's overall summary.languagestring— The primary language.metricsobject— The metrics infomation.filler_wordsarray— The speaker's filler words.Items: speaker_user_idstring— The speaker's user ID.valuenumber— The speaker's filler words count per minute.
longest_monologarray— The speaker's longest monologue.Items: speaker_user_idstring— The speaker's user ID.valuenumber— The speaker's longest monologue duration, in **seconds**.
patiencearray— The speaker's patience.Items: speaker_user_idstring— The speaker's user ID.valuenumber— The speaker's patience duration, in seconds.
talk_speedarray— The speaker's talk speed.Items: speaker_user_idstring— The speaker's user ID.valuenumber— The speaker's talk speed, in words per minute.
talk_to_listen_ratioarray— The speaker's talk-listen ratio.Items: speaker_user_idstring— The speaker's user ID.valuenumber— The speaker's talk-listen ratio.
queue_idstring— The queue ID to query.queue_namestring— The queue name to query.recording_urlstring— The recording URL.screen_recording_statusstring, possible values:"UNAVAILABLE", "AVAILABLE", "DELETED"— The interaction screen recording's status.screen_recording_urlsarray— The screen recording URLs.Items: string— The screen recording URL.silence_eventsarray— The silence event infomation.Items: end_timestring— The silence event end time.start_timestring— The silence event start time.
start_timestring— The start date, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.summaryobject— The summary infomation.engagement_scorenumber— The engagement score.evaluation_scorenumber— The evaluation score.sentiment_scorenumber— The sentiment score.sentiment_score_reasonstring— The sentiment score reason.
transcript_bodyobject— The transcript content.account_idstring— The account ID.host_idstring— The host ID.itemsarray— The text items.Items: commentsstring— The comments.emailstring— The speaker's email address, this value is null for external users.end_timestring— The speak end time.item_idstring— The item's sequence ID, starting from 0.speaker_idstring— The speaker's sequence ID generated from Transcript Service.start_timestring— The speak start time.textstring— The speech content.zoom_user_idstring— The speaker's user ID.
languagestring— The primary language.meeting_idstring— The meeting ID.recording_endstring— The recording end date, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.recording_startstring— The recording start date, in `yyyy-MM-dd'T'HH:mm:ss'Z'` format.speakersarray— The speaker's infomation.Items: email_address(required)string— The speaker's email address, this value is null for external users.role(required)string, possible values:"rep", "customer"— The speaker's role.speaker_id(required)string— The speaker's sequence ID generated from Transcript Service.username(required)string— The speaker's username.zoom_user_id(required)string— The speaker's user ID.
Example:
{
"summary": {
"evaluation_score": 1,
"sentiment_score": 61.19,
"sentiment_score_reason": "Customer frustration detected during escalation",
"engagement_score": 5.546720115175143
},
"metrics": {
"talk_to_listen_ratio": [
{
"speaker_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"value": 0.4311976503861636
}
],
"longest_monolog": [
{
"speaker_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"value": 8.430000000000007
}
],
"talk_speed": [
{
"speaker_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"value": 121.0898082744702
}
],
"filler_words": [
{
"speaker_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"value": 0
}
],
"patience": [
{
"speaker_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"value": 1.24
}
]
},
"start_time": "2024-05-28T09:52:22Z",
"duration": 8,
"queue_id": "d5qAagKnQ7-UO_VsdiPdQA",
"queue_name": "Demo",
"recording_url": "https://example.com/file/YZ75Jmq8TICELRiufFmTrg?filename=GMT20240528-095222_VgKcwkLoTPy80OyNcUo2Yg_VoiceRecording.mp3&jwt=eyJrIjoiMVI2cVdsWGIiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiJ6ZnMiLCJkaWciOiJhN2E5MzE1ZWI2YTU5Yzk0MDgwM2VjNGE4MGNkMzk3YWRmYWVhODUwOWI5MThiMTNkOGVlOTgxMzQ1NjhiYmRkIiwiaGRpZyI6ZmFsc2UsImlpYyI6ImRldiIsImV4cCI6MTcyNTYxNzYwNywiaWF0IjoxNzI1MDEyODA3LCJvcmkiOiJ6b29tX2lxIiwiaXNzIjoiZmlsZSJ9.zjyJVGX9N3_hdu8zvytae5JvsFLgff17-39PpbMgpyh6RC7zJCRiHjBnbsV1J3ac4bgtDUGiG_4-M1G8YY0PuQ&mode=play",
"screen_recording_urls": [
"https://example.com/file/6GmXHipBT_CC3ncyX6d76w?filename=GMT20240812-103352_Recording_3840x2160.mp4&jwt=eyJrIjoiMVI2cVdsWGIiLCJhbGciOiJFUzI1NiJ9.eyJoZGlnIjpmYWxzZSwiaWljIjoiZGV2IiwiZGlnIjoiM2UxOGVjYzQyZmE5Yjk0OTcyOTlhYTlhZWMxNzg2YjgxNmJkMWRlNzQ5ZmZmNGQ1ODZiZDNhY2ViNGFkZjlmYSIsImV4cCI6MTczMTAzMDU1Nywib3JpIjoiem9vbV9pcSIsImF1ZCI6InpmcyIsImlhdCI6MTcyOTczNDU1NywiaXNzIjoiZmlsZSJ9.J7dpq3w9T6qI8US6Xy74ewUvl521tOORsmejM_Yq8eqgJ_KA65p8tYwViSPvu4BygZWZLBiEHsKyPCgChFRj6w&mode=play"
],
"transcript_body": {
"meeting_id": "VgKcwkLoTPy80OyNcUo2Yg",
"account_id": "VgryoPBNR6uWYfyJqu4JFQ",
"host_id": "ycEUjKmDSnuPwF33KLTxJg",
"recording_start": "2024-05-28T09:52:22Z",
"recording_end": "2024-05-28T10:00:47Z",
"language": "en",
"speakers": [
{
"speaker_id": "0",
"zoom_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"email_address": "cci_dev_admin@example.com",
"username": "Admin3",
"role": "rep"
}
],
"items": [
{
"comments": "abc",
"item_id": "0",
"speaker_id": "0",
"zoom_user_id": "ycEUjKmDSnuPwF33KLTxJg",
"start_time": "00:00:22.790",
"end_time": "00:00:25.680",
"text": "A halo, Kanji, this",
"email": "cci_dev_admin@example.com"
}
]
},
"language": "en",
"interaction_summary": "The meeting involved a diverse range of unrelated exchanges among participants including Admin3 and an unnamed person identified as +12053546173. Topics touched upon, albeit discontinuously, revolved around a possible analytical recording concept, a potential interest in women, and a reference to monthly recording. Nevertheless, the specifics and the central objective of these discussions remained unclear from the provided transcript.",
"interaction_info": {
"from": "+12053546173",
"to": "+12095422197",
"interaction_id": "VgKcwkLoTPy80OyNcUo2Yg",
"agent_name": "Admin3",
"consumer_name": "+12053546173",
"channel_type": "VIDEO",
"evaluations": [
{
"evaluation_id": "aI9HM3ZsEScAa",
"evaluation_type": "Automated",
"evaluation_status_desc": "Completed",
"session_id": "abc123def456",
"score": 85,
"total_score": 60,
"score_rate": 0.855,
"scoring_format": "points",
"evaluator_id": "u_abc123xyz",
"evaluator_name": "Sarah Johnson",
"section_comments": [
{
"section_id": "sec_001",
"section_name": "Opening & Greeting",
"comment_text": "Excellent rapport building and professional tone throughout the opening."
}
],
"question_comments": [
{
"question_id": "q_001",
"question_title": "Did the agent properly identify themselves?",
"comment_text": "Agent clearly stated their name and company at the beginning.",
"comment_time": 15
}
],
"evaluation_name": "Customer Service Quality Scorecard"
}
],
"associated_ids": [
"VgKcwkLoTPy80OyNcUo2Yg"
]
},
"screen_recording_status": "UNAVAILABLE",
"engagement_id": "2R1t8QtiTsKIOIAV0-a7FQ",
"silence_events": [
{
"start_time": "00:01:07.580",
"end_time": "00:01:10.960"
}
],
"crosstalk_events": [
{
"start_time": "00:01:07.580",
"end_time": "00:01:10.960"
}
],
"hold_events": [
{
"start_time": "00:01:07.580",
"end_time": "00:01:10.960"
}
],
"direction": "inbound",
"analysis": {
"topics": [
{
"topic_name": "Customer Complaint",
"type": "predefined"
}
],
"indicators": [
{
"indicator_name": "Hello"
}
],
"next_steps": [
{
"next_step": "Jasper: Contact the billing department to pay malpractice premium without policy number"
}
],
"good_questions": [
{
"good_question": "I'm really sorry to hear that. Could you please describe the issue you’re experiencing? We’d like to help resolve it as soon as possible."
}
]
}
}