Export
Export data from Zendesk QA
JSON format
Export are represented as JSON objects with the following properties:
| Name | Type | Read-only | Mandatory | Description |
|---|---|---|---|---|
| comments | array | false | false | List of comments on this conversation |
| createdAt | string | false | false | Creation timestamp (legacy format) |
| createdAtISO | string | false | false | Creation timestamp (ISO 8601) |
| externalFields | array | false | false | Custom fields from the external system |
| externalId | string | false | true | External conversation ID |
| externalUrl | string | false | false | External URL to the conversation in the source system |
| lastUpdated | string | false | true | Last update timestamp (legacy format) |
| lastUpdatedISO | string | false | false | Last update timestamp (ISO 8601) |
| reviews | array | false | false | List of reviews for this conversation |
| sourceType | string | false | false | Source system type (e.g., zendesk, intercom) |
| url | string | false | false | Internal URL to the conversation in Zendesk QA |
| workspaceId | string | false | true | ID of the workspace this conversation belongs to |
| workspaceName | string | false | false | Name of the workspace |
Conversation with associated reviews and comments
Get AutoQA ratings
GET /qa/api/export/autoqa/ratings?fromDate={fromDate}
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| autoqaCategoryType | string | Query | false | |
| connectionId | string | Query | false | |
| cursor | string | Query | false | |
| fromDate | string | Query | true | |
| latestOnly | boolean | Query | false | |
| page | integer | Query | false | |
| pageSize | integer | Query | false | |
| ratingCategoryId | string | Query | false | |
| revieweeExternalId | string | Query | false | |
| rootCauseCode | string | Query | false | |
| toDate | string | Query | false | |
| workspaceId | string | Query | false |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings?autoqaCategoryType=&connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&ratingCategoryId=&revieweeExternalId=&rootCauseCode=&toDate=&workspaceId= \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings?autoqaCategoryType=&connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&ratingCategoryId=&revieweeExternalId=&rootCauseCode=&toDate=&workspaceId="method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings").newBuilder().addQueryParameter("autoqaCategoryType", "").addQueryParameter("connectionId", "").addQueryParameter("cursor", "").addQueryParameter("fromDate", "").addQueryParameter("latestOnly", "").addQueryParameter("page", "").addQueryParameter("pageSize", "").addQueryParameter("ratingCategoryId", "").addQueryParameter("revieweeExternalId", "").addQueryParameter("rootCauseCode", "").addQueryParameter("toDate", "").addQueryParameter("workspaceId", "");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'autoqaCategoryType': '','connectionId': '','cursor': '','fromDate': '','latestOnly': '','page': '','pageSize': '','ratingCategoryId': '','revieweeExternalId': '','rootCauseCode': '','toDate': '','workspaceId': '',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings?autoqaCategoryType=&connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&ratingCategoryId=&revieweeExternalId=&rootCauseCode=&toDate=&workspaceId="headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/autoqa/ratings")uri.query = URI.encode_www_form("autoqaCategoryType": "", "connectionId": "", "cursor": "", "fromDate": "", "latestOnly": "", "page": "", "pageSize": "", "ratingCategoryId": "", "revieweeExternalId": "", "rootCauseCode": "", "toDate": "", "workspaceId": "")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"nextCursor": "eyJwYWdlIjoyfQ==","pagination": {"page": 1,"pageSize": 50,"total": 300},"rows": [{"accountId": "100","autoqaRatingId": "rating-123","autoqaReviewId": "review-456","categoryDisplayName": "Tone","connectionId": "300","conversationCreatedAt": "2024-01-15T14:20:00Z","createdAt": "2024-01-16T09:00:00Z","evaluated": true,"externalTicketId": "TICKET-789","isCritical": false,"ratingCategoryId": "10","ratingCategoryName": "Tone","ratingMax": 100,"revieweeEmail": "[email protected]","revieweeExternalId": "user-001","revieweeName": "Jane Agent","rootCauseCodes": [],"rootCauses": [],"score": 85,"scorecardId": "50","scorecardName": "QA Scorecard","updatedAt": "2024-01-16T09:30:00Z","weight": 1,"workspaceId": "200","workspaceName": "Support Team"}]}
Get AutoQA reviews
GET /qa/api/export/autoqa/reviews?fromDate={fromDate}
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| connectionId | string | Query | false | |
| cursor | string | Query | false | |
| fromDate | string | Query | true | |
| latestOnly | boolean | Query | false | |
| page | integer | Query | false | |
| pageSize | integer | Query | false | |
| revieweeExternalId | string | Query | false | |
| toDate | string | Query | false | |
| workspaceId | string | Query | false |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews?connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&revieweeExternalId=&toDate=&workspaceId= \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews?connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&revieweeExternalId=&toDate=&workspaceId="method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews").newBuilder().addQueryParameter("connectionId", "").addQueryParameter("cursor", "").addQueryParameter("fromDate", "").addQueryParameter("latestOnly", "").addQueryParameter("page", "").addQueryParameter("pageSize", "").addQueryParameter("revieweeExternalId", "").addQueryParameter("toDate", "").addQueryParameter("workspaceId", "");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'connectionId': '','cursor': '','fromDate': '','latestOnly': '','page': '','pageSize': '','revieweeExternalId': '','toDate': '','workspaceId': '',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews?connectionId=&cursor=&fromDate=&latestOnly=&page=&pageSize=&revieweeExternalId=&toDate=&workspaceId="headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/autoqa/reviews")uri.query = URI.encode_www_form("connectionId": "", "cursor": "", "fromDate": "", "latestOnly": "", "page": "", "pageSize": "", "revieweeExternalId": "", "toDate": "", "workspaceId": "")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"nextCursor": "eyJwYWdlIjoyfQ==","pagination": {"page": 1,"pageSize": 50,"total": 300},"rows": [{"accountId": "100","appConversationLink": "https://qa.zendesk.com/conversations/12345","autoqaReviewId": "review-456","connectionId": "300","conversationChannel": "email","conversationCreatedAt": "2024-01-15T14:20:00Z","createdAt": "2024-01-16T09:00:00Z","externalConversationLink": "https://support.example.com/tickets/12345","externalTicketId": "TICKET-789","isBot": false,"language": "en","revieweeEmail": "[email protected]","revieweeExternalId": "user-001","revieweeName": "Jane Agent","updatedAt": "2024-01-16T09:30:00Z","workspaceId": "200","workspaceName": "Support Team"}]}
Search conversations
POST /qa/api/export/conversations/search
Search for conversation data by end user email. Returns matching conversation IDs and external links.
Example body
{"endUserEmail": "[email protected]"}
Code Samples
Curl
curl --request POST https://yoursubdomain.zendesk.com/qa/api/export/conversations/search \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json" \--data-raw '{"endUserEmail": "[email protected]"}'
Go
import ("fmt""io""net/http""strings")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/conversations/search"method := "POST"payload := strings.NewReader(`{"endUserEmail": "[email protected]"}`)req, err := http.NewRequest(method, url, payload)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/conversations/search").newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),"""{\"endUserEmail\": \"customer@example.com\"}""");Request request = new Request.Builder().url(urlBuilder.build()).method("POST", body).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({"endUserEmail": "[email protected]"});var config = {method: 'POST',url: 'https://yoursubdomain.zendesk.com/qa/api/export/conversations/search',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},data : data,};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsimport jsonurl = "https://yoursubdomain.zendesk.com/qa/api/export/conversations/search"payload = json.loads("""{"endUserEmail": "[email protected]"}""")headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("POST",url,headers=headers,json=payload)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/conversations/search")request = Net::HTTP::Post.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")request.body = %q({"endUserEmail": "[email protected]"})response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"conversations": [{"externalId": "CONV-12345","externalLink": "https://support.example.com/conversations/12345"},{"externalId": "CONV-67890","externalLink": "https://support.example.com/conversations/67890"}]}
400 Bad Request
// Status 400 Bad Request{"code": 3,"details": [],"message": "invalid argument"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get account CSAT data
GET /qa/api/export/csat?fromDate={fromDate}
Export Customer Satisfaction (CSAT) data for all tickets in the account. Supports pagination and date filtering.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | true | Start date for CSAT export (ISO 8601 timestamp) |
| page | integer | Query | false | Page number for pagination (starts at 1) |
| pageSize | integer | Query | false | Number of results per page |
| toDate | string | Query | false | End date for CSAT export (ISO 8601 timestamp) |
| workspace | string | Query | false |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z&workspace= \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z&workspace="method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/csat").newBuilder().addQueryParameter("fromDate", "2024-01-01T00:00:00Z").addQueryParameter("page", "1").addQueryParameter("pageSize", "50").addQueryParameter("toDate", "2024-01-31T23:59:59Z").addQueryParameter("workspace", "");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/csat',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '2024-01-01T00%3A00%3A00Z','page': '1','pageSize': '50','toDate': '2024-01-31T23%3A59%3A59Z','workspace': '',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z&workspace="headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/csat")uri.query = URI.encode_www_form("fromDate": "2024-01-01T00:00:00Z", "page": "1", "pageSize": "50", "toDate": "2024-01-31T23:59:59Z", "workspace": "")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"pagination": {"page": 1,"pageSize": 50,"total": 100},"tickets": [{"agentEmail": "[email protected]","agentName": "Jane Agent","conversationSource": "zendesk","conversationUrl": "https://qa.zendesk.com/conversations/12345","csatAnsweredAt": "2024-01-15T14:05:00Z","csatCreatedAt": "2024-01-15T14:00:00Z","csatRawScore": "good","csatScore": "5","customerEmail": "[email protected]","customerName": "Alice Customer","externalTicketId": "TICKET-12345","ticketCreatedAt": "2024-01-15T10:30:00Z"}]}
400 Bad Request
// Status 400 Bad Request{"code": 3,"details": [],"message": "invalid argument"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
List all quizzes
GET /qa/api/export/quizzes
Export all quizzes in the account, including metadata, author information, and participation statistics.
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/quizzes \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/quizzes"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/quizzes").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/quizzes',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/quizzes"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/quizzes")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"quizzes": [{"authorId": "1001","authorName": "Training Manager","averageScorePercentage": "78","id": "5001","name": "Product Knowledge Quiz","numberOfParticipants": "25","publishedDate": "2024-01-01T00:00:00Z","status": "PUBLISHED"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get quizzes leaderboard
GET /qa/api/export/quizzes/leaderboard
Export the overall quiz leaderboard across all quizzes, showing user rankings and average scores.
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/leaderboard")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"leaderboardUsers": [{"averageScorePercentage": "92","id": "1001","name": "Jane Smith","quizzesTaken": "5","ranking": "1","requesterCanManageAnyQuiz": true}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get quiz overview
GET /qa/api/export/quizzes/{id}/overview
Export detailed overview of a specific quiz, including all fields, questions, options, and aggregated statistics.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | Path | true | The quiz ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/overview")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"averageScorePercentage": "78","createdAt": "2024-01-01T00:00:00Z","createdBy": "1001","description": "Test your knowledge of our product features","id": "5001","name": "Product Knowledge Quiz","publishedDate": "2024-01-05T00:00:00Z","responseCount": "25","status": "PUBLISHED"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get quiz responses
GET /qa/api/export/quizzes/{id}/responses
Export all user responses for a specific quiz, showing who took the quiz and their scores.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | Path | true | The quiz ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"responses": [{"correctAnswerPercentage": "85","responseId": "7001","userId": "1001","userName": "Jane Smith"},{"correctAnswerPercentage": "70","responseId": "7002","userId": "1002","userName": "John Doe"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get single quiz response
GET /qa/api/export/quizzes/{id}/responses/{response}
Export detailed data for a single user's quiz response, including all answers and whether they were correct.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | Path | true | The quiz ID |
| response | integer | Path | true | The response ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001 \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/quizzes/5001/responses/7001")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"createdAt": "2024-01-15T10:00:00Z","description": "Test your knowledge of our product features","name": "Product Knowledge Quiz","quizId": "5001","responseId": "7001","userId": "1001","userName": "Jane Smith"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get account reviews
GET /qa/api/export/reviews?fromDate={fromDate}
Export all reviews and associated comments across the entire account. Supports pagination and date filtering.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | true | Start date for the review export (ISO 8601 timestamp) |
| page | integer | Query | false | Page number for pagination (starts at 1) |
| pageSize | integer | Query | false | Number of results per page |
| toDate | string | Query | false | End date for the review export (ISO 8601 timestamp) |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/reviews").newBuilder().addQueryParameter("fromDate", "2024-01-01T00:00:00Z").addQueryParameter("page", "1").addQueryParameter("pageSize", "50").addQueryParameter("toDate", "2024-01-31T23:59:59Z");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/reviews',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '2024-01-01T00%3A00%3A00Z','page': '1','pageSize': '50','toDate': '2024-01-31T23%3A59%3A59Z',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/reviews")uri.query = URI.encode_www_form("fromDate": "2024-01-01T00:00:00Z", "page": "1", "pageSize": "50", "toDate": "2024-01-31T23:59:59Z")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"conversations": [{"externalId": "TICKET-12345","externalUrl": "https://support.example.com/tickets/12345","lastUpdated": "2024-01-15T14:20:00Z","lastUpdatedISO": "2024-01-15T14:20:00Z","reviews": [{"created": "2024-01-16T09:00:00Z","createdISO": "2024-01-16T09:00:00Z","id": "98765","reviewer": {"email": "[email protected]","name": "John Manager"},"score": 90}],"url": "https://qa.zendesk.com/conversations/12345","workspaceId": "12345","workspaceName": "Support Team"}],"pagination": {"page": 1,"pageSize": 50,"total": 300}}
400 Bad Request
// Status 400 Bad Request{"code": 3,"details": [],"message": "invalid argument"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get account users
GET /qa/api/export/users
Export all users belonging to the account, including their ID, name, and email.
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/users \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/users"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/users").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/users',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/users"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/users")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"users": [{"email": "[email protected]","id": "1001","name": "Jane Smith"},{"email": "[email protected]","id": "1002","name": "John Doe"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get calibration sessions
GET /qa/api/export/workspace/{workspace}/calibration-sessions?fromDate={fromDate}
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | true | |
| page | integer | Query | false | |
| pageSize | integer | Query | false | |
| toDate | string | Query | false | |
| workspace | string | Path | true |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions?fromDate=&page=&pageSize=&toDate= \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions?fromDate=&page=&pageSize=&toDate="method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions").newBuilder().addQueryParameter("fromDate", "").addQueryParameter("page", "").addQueryParameter("pageSize", "").addQueryParameter("toDate", "");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '','page': '','pageSize': '','toDate': '',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions?fromDate=&page=&pageSize=&toDate="headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace//calibration-sessions")uri.query = URI.encode_www_form("fromDate": "", "page": "", "pageSize": "", "toDate": "")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"calibrationSessions": [{"conversations": [{"createdAt": "2024-01-11T09:00:00Z","createdBy": "100","externalId": "TICKET-789","reviews": [{"comment": "Great handling of the customer issue","createdAt": "2024-01-11T12:00:00Z","createdISO": "2024-01-11T12:00:00Z","id": "review-001","received": true,"score": 90,"updatedAt": "2024-01-11T12:30:00Z","updatedISO": "2024-01-11T12:30:00Z"}]}],"createdAt": "2024-01-10T08:00:00Z","createdBy": "100","dueAt": "2024-01-20T17:00:00Z","id": "session-001","title": "January Calibration","updatedAt": "2024-01-12T10:00:00Z"}],"pagination": {"page": 1,"pageSize": 50,"total": 12}}
Get workspace CSAT data
GET /qa/api/export/workspace/{workspace}/csat?fromDate={fromDate}
Export Customer Satisfaction (CSAT) data for tickets in a specific workspace. Supports pagination and date filtering.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | true | Start date for CSAT export (ISO 8601 timestamp) |
| page | integer | Query | false | Page number for pagination (starts at 1) |
| pageSize | integer | Query | false | Number of results per page |
| toDate | string | Query | false | End date for CSAT export (ISO 8601 timestamp) |
| workspace | integer | Path | true | The workspace ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat").newBuilder().addQueryParameter("fromDate", "2024-01-01T00:00:00Z").addQueryParameter("page", "1").addQueryParameter("pageSize", "50").addQueryParameter("toDate", "2024-01-31T23:59:59Z");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '2024-01-01T00%3A00%3A00Z','page': '1','pageSize': '50','toDate': '2024-01-31T23%3A59%3A59Z',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/csat")uri.query = URI.encode_www_form("fromDate": "2024-01-01T00:00:00Z", "page": "1", "pageSize": "50", "toDate": "2024-01-31T23:59:59Z")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"pagination": {"page": 1,"pageSize": 50,"total": 75},"tickets": [{"conversationSource": "zendesk","conversationUrl": "https://qa.zendesk.com/conversations/12345","csatScore": "4","externalTicketId": "TICKET-12345"}]}
400 Bad Request
// Status 400 Bad Request{"code": 3,"details": [],"message": "invalid argument"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get workspace disputes
GET /qa/api/export/workspace/{workspace}/disputes
Export all review disputes for a specific workspace, including dispute status, categories, and resolution information.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | false | |
| page | integer | Query | false | |
| pageSize | integer | Query | false | |
| toDate | string | Query | false | |
| workspace | string | Path | true | The workspace ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes?fromDate=&page=&pageSize=&toDate= \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes?fromDate=&page=&pageSize=&toDate="method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes").newBuilder().addQueryParameter("fromDate", "").addQueryParameter("page", "").addQueryParameter("pageSize", "").addQueryParameter("toDate", "");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '','page': '','pageSize': '','toDate': '',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes?fromDate=&page=&pageSize=&toDate="headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/disputes")uri.query = URI.encode_www_form("fromDate": "", "page": "", "pageSize": "", "toDate": "")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"disputes": [{"account": "1001","connectionId": "5001","conversationId": "CONV-12345","createdAt": "2024-01-16T10:00:00Z","createdBy": {"avatar": "https://example.com/avatars/jane.jpg","id": "1002","name": "Jane Agent"},"disputeId": "DISPUTE-001","reviewId": "98765","status": "open","type": "rating_disagreement","workspace": "12345"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get workspace reviews
GET /qa/api/export/workspace/{workspace}/reviews?fromDate={fromDate}
Export reviews and associated comments for a specific workspace. Supports pagination and date filtering.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| fromDate | string | Query | true | Start date for the review export (ISO 8601 timestamp) |
| page | integer | Query | false | Page number for pagination (starts at 1) |
| pageSize | integer | Query | false | Number of results per page |
| toDate | string | Query | false | End date for the review export (ISO 8601 timestamp) |
| workspace | integer | Path | true | The workspace ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews").newBuilder().addQueryParameter("fromDate", "2024-01-01T00:00:00Z").addQueryParameter("page", "1").addQueryParameter("pageSize", "50").addQueryParameter("toDate", "2024-01-31T23:59:59Z");Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},params: {'fromDate': '2024-01-01T00%3A00%3A00Z','page': '1','pageSize': '50','toDate': '2024-01-31T23%3A59%3A59Z',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews?fromDate=2024-01-01T00%3A00%3A00Z&page=1&pageSize=50&toDate=2024-01-31T23%3A59%3A59Z"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/reviews")uri.query = URI.encode_www_form("fromDate": "2024-01-01T00:00:00Z", "page": "1", "pageSize": "50", "toDate": "2024-01-31T23:59:59Z")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"conversations": [{"createdAt": "2024-01-15T10:30:00Z","createdAtISO": "2024-01-15T10:30:00Z","externalId": "TICKET-12345","externalUrl": "https://support.example.com/tickets/12345","lastUpdated": "2024-01-15T14:20:00Z","lastUpdatedISO": "2024-01-15T14:20:00Z","reviews": [{"created": "2024-01-16T09:00:00Z","createdISO": "2024-01-16T09:00:00Z","id": "98765","received": true,"reviewee": {"email": "[email protected]","name": "Jane Agent"},"reviewer": {"email": "[email protected]","name": "John Manager"},"score": 85.5,"scorecard": {"id": "111","name": "Support Quality Scorecard"},"updated": "2024-01-16T09:30:00Z","updatedISO": "2024-01-16T09:30:00Z"}],"sourceType": "zendesk","url": "https://qa.zendesk.com/conversations/12345","workspaceId": "12345","workspaceName": "Support Team"}],"pagination": {"page": 1,"pageSize": 50,"total": 150}}
400 Bad Request
// Status 400 Bad Request{"code": 3,"details": [],"message": "invalid argument"}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get workspace scorecards
GET /qa/api/export/workspace/{workspace}/scorecards
Export all scorecards configured for a specific workspace, including their categories and rating criteria.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| workspace | integer | Path | true | The workspace ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/scorecards")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"data": [{"createdAt": "2024-01-01T00:00:00Z","id": "111","name": "Support Quality Scorecard","updatedAt": "2024-01-15T12:00:00Z"}],"total": 1}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
Get workspace users
GET /qa/api/export/workspace/{workspace}/users
Export all users belonging to a specific workspace, including their ID, name, and email.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| workspace | integer | Path | true | The workspace ID |
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspace/12345/users")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"users": [{"email": "[email protected]","id": "1001","name": "Jane Smith"},{"email": "[email protected]","id": "1002","name": "John Doe"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
404 Not Found
// Status 404 Not Found{"code": 5,"details": [],"message": "not found"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}
List all workspaces
GET /qa/api/export/workspaces
Export all workspaces in the account, showing their IDs and names.
Code Samples
Curl
curl --request GET https://yoursubdomain.zendesk.com/qa/api/export/workspaces \--header "Authorization: Bearer ${authToken}" \--header "Content-Type: application/json"
Go
import ("fmt""io""net/http")func main() {url := "https://yoursubdomain.zendesk.com/qa/api/export/workspaces"method := "GET"req, err := http.NewRequest(method, url, nil)if err != nil {fmt.Println(err)return}req.Header.Add("Authorization", "Bearer ${authToken}")req.Header.Add("Content-Type", "application/json")client := &http.Client {}res, err := client.Do(req)if err != nil {fmt.Println(err)return}defer res.Body.Close()body, err := io.ReadAll(res.Body)if err != nil {fmt.Println(err)return}fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://yoursubdomain.zendesk.com/qa/api/export/workspaces").newBuilder();Request request = new Request.Builder().url(urlBuilder.build()).method("GET", null).addHeader("Authorization", "Bearer ${authToken}").addHeader("Content-Type", "application/json").build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var config = {method: 'GET',url: 'https://yoursubdomain.zendesk.com/qa/api/export/workspaces',headers: {'Authorization': 'Bearer ${authToken}','Content-Type': 'application/json',},};axios(config).then(function (response) {console.log(JSON.stringify(response.data));}).catch(function (error) {console.log(error);});
Python
import requestsurl = "https://yoursubdomain.zendesk.com/qa/api/export/workspaces"headers = {"Authorization": "Bearer ${authToken}","Content-Type": "application/json",}response = requests.request("GET",url,headers=headers)print(response.text)
Ruby
require "net/http"uri = URI("https://yoursubdomain.zendesk.com/qa/api/export/workspaces")request = Net::HTTP::Get.new(uri, "Authorization": "Bearer ${authToken}", "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|http.request(request)end
Example response(s)
200 OK
// Status 200 OK{"workspaces": [{"id": "12345","name": "Support Team"},{"id": "12346","name": "Sales Team"}]}
401 Unauthorized
// Status 401 Unauthorized{"code": 16,"details": [],"message": "unauthenticated"}
500 Internal Server Error
// Status 500 Internal Server Error{"code": 13,"details": [],"message": "internal"}