Use the Zendesk QA Export API to export review and comment data for external analysis and reporting. You can export data from a specific workspace or from your entire account. Zendesk QA is available with the Quality Assurance (QA) or Workforce Engagement Management (WEM) add-on.

Prerequisites

Before exporting data, set up an API connection in your Zendesk QA account.

Copy the following values from the connection setup:

  • API token
  • Account id
  • Workspace id

You must also know your Zendesk subdomain. Replace {subdomain} in the examples with your Zendesk subdomain.

Exporting data

To export reviews from a specific workspace, send a GET request to:

https://{subdomain}.zendesk.com/qa/api/export/workspace/{workspaceId}/reviews

To export reviews from the entire account, send a GET request to:

https://{subdomain}.zendesk.com/qa/api/export/reviews

The API connection provides an API token. Pass this token as a bearer token in the Authorization header. Use the fromDate and toDate query parameters to specify the date range for the export.

Both endpoints support the page and pageSize query parameters for pagination.

Query parameters

ParameterTypeRequiredDescription
fromDateStringYesStart date for the export as an ISO 8601 timestamp. For example, 2026-01-01T00:00:00Z.
toDateStringNoEnd date for the export as an ISO 8601 timestamp. For example, 2026-03-31T23:59:59Z.
pageIntegerNoPage number to return.
pageSizeIntegerNoNumber of records to return per page.

Sending the request

Export the API token as an environment variable:

export QA_API_TOKEN='your_api_token'

Replace {subdomain} with your Zendesk subdomain. The following example exports reviews from workspace 11759 between January 1 and March 31, 2026:

curl --get 'https://{subdomain}.zendesk.com/qa/api/export/workspace/11759/reviews' \  --data-urlencode 'fromDate=2026-01-01T00:00:00Z' \  --data-urlencode 'toDate=2026-03-31T00:00:00Z' \  --header 'Accept: application/json' \  --header "Authorization: Bearer ${QA_API_TOKEN}"

To export reviews for the entire account, use the account-level endpoint:

curl --get 'https://{subdomain}.zendesk.com/qa/api/export/reviews' \  --data-urlencode 'fromDate=2026-01-01T00:00:00Z' \  --data-urlencode 'toDate=2026-03-31T00:00:00Z' \  --header 'Accept: application/json' \  --header "Authorization: Bearer ${QA_API_TOKEN}"

Example response

A successful request returns a 200 OK response with a conversations array and a pagination object. Each conversation can contain reviews, comments, and the id of the workspace that contains it.

{  "conversations": [    {      "externalId": "1001",      "url": "https://example.zendesk.com/qa/conversations/1001",      "externalUrl": "https://example.zendesk.com/agent/tickets/1001",      "lastUpdated": "2026-03-15T10:30:00Z",      "reviews": [        {          "id": "rev_88492",          "reviewer": {            "email": "[email protected]",            "name": "Sarah Connor",            "avatar": "https://example.com/avatar1.png"          },          "reviewee": {            "email": "[email protected]",            "name": "Alex Smith",            "avatar": "https://example.com/avatar2.png"          },          "score": 95,          "ratings": [            {              "categoryId": "cat_12",              "categoryName": "Empathy & Tone",              "score": 100,              "weight": 1,              "critical": false,              "cause": ""            }          ],          "comment": "Great customer handling throughout.",          "thread": [            {              "id": "thread_123",              "owner": {                "email": "[email protected]",                "name": "Sarah Connor",                "avatar": "https://example.com/avatar1.png"              },              "comment": "The opening response was clear and empathetic.",              "created": "2026-03-15T11:02:00Z",              "updated": "2026-03-15T11:02:00Z",              "thread": [],              "tags": [                {                  "tag": "positive",                  "user": {                    "email": "[email protected]",                    "name": "Sarah Connor",                    "avatar": "https://example.com/avatar1.png"                  }                }              ]            }          ],          "tags": [],          "created": "2026-03-15T11:00:00Z",          "updated": "2026-03-15T11:05:00Z",          "received": true,          "reviewTime": "2026-03-15T11:00:00Z",          "scorecard": {            "id": "sc_01",            "name": "Standard Support Scorecard"          }        }      ],      "comments": [        {          "id": "comment_123",          "owner": {            "email": "[email protected]",            "name": "Alex Smith",            "avatar": "https://example.com/avatar2.png"          },          "comment": "I can help with that.",          "created": "2026-03-15T10:35:00Z",          "updated": "2026-03-15T10:35:00Z",          "thread": [],          "tags": []        }      ],      "workspaceId": "11759"    }  ],  "pagination": {    "page": 1,    "pageSize": 50,    "total": 1  }}

The response contains the following key properties:

PropertyDescription
conversationsArray of conversations included in the response.
conversations[].externalIdIdentifier of the conversation in the external system. For conversations from Zendesk Support, this corresponds to the ticket_id value.
conversations[].reviewsReviews associated with the conversation.
conversations[].reviews[].ratingsIndividual scorecard category results, including scores, weights, critical failures, and root cause notes when available.
conversations[].reviews[].threadThreaded comments associated with the review.
conversations[].reviews[].tagsTags associated with the review.
conversations[].commentsComments associated with the conversation, including their owners, timestamps, threads, and tags.
conversations[].workspaceIdId of the workspace containing the conversation.
paginationPagination metadata for the response.
pagination.pageCurrent page number.
pagination.pageSizeNumber of records returned per page.
pagination.totalTotal number of records available for the request.

To retrieve additional results, increment the page query parameter and send another request. Continue until you have retrieved all records indicated by pagination.total.

For the complete request and response schema, see the Zendesk QA Export API reference.