curl --request GET \
--url https://api.doozy.live/v1/surveys/{surveyId}/report \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/surveys/{surveyId}/report"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.doozy.live/v1/surveys/{surveyId}/report', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.doozy.live/v1/surveys/{surveyId}/report",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.doozy.live/v1/surveys/{surveyId}/report"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.doozy.live/v1/surveys/{surveyId}/report")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/surveys/{surveyId}/report")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "survey_report",
"id": "survey_abc123",
"title": "Employee Satisfaction Survey",
"mode": "survey",
"response_type": "anonymous",
"summary": {
"total_deliveries": 250,
"total_responses": 180,
"response_rate": 72
},
"questions": [
{
"object": "survey_question_analytics",
"id": "instance_abc:q_abc123",
"text": "How satisfied are you with your onboarding experience?",
"type": "scale_1_to_10",
"total_responses": 120,
"average_score": 7.8,
"enps_score": 45,
"enps_breakdown": {
"promoters": 50,
"passives": 40,
"detractors": 30
},
"answer_breakdown": [
{
"answer": "8",
"total_responses": 25,
"percentage": 35.7
}
],
"comments": [
{
"comment": "Great experience overall!",
"answered_at": "2026-01-16T14:30:00.000Z"
}
]
}
],
"total_participants": 180,
"has_more": false,
"url": "/v1/surveys/survey_abc123/report",
"next_cursor": "part_xyz789",
"previous_cursor": "part_abc123",
"participants": [
{
"object": "survey_participant",
"id": "user_abc123",
"email": "jane.doe@example.com",
"display_name": "Jane Doe",
"status": "responded",
"received_at": "2026-01-15T10:30:00.000Z",
"responded_at": "2026-01-16T14:30:00.000Z",
"answers": [
{
"question_id": "q_abc123",
"question_text": "How satisfied are you with your onboarding experience?",
"question_type": "scale_1_to_10",
"value": 8,
"comment": "Great experience overall!"
}
]
}
],
"warning": "Large dataset: consider using from_date/to_date filters for better performance"
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}Get survey report
Retrieve a detailed analytics report for a survey, including summary statistics, per-question analytics with breakdowns, and a paginated participant list. For anonymous surveys, only responded participants can be returned.
curl --request GET \
--url https://api.doozy.live/v1/surveys/{surveyId}/report \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/surveys/{surveyId}/report"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.doozy.live/v1/surveys/{surveyId}/report', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.doozy.live/v1/surveys/{surveyId}/report",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.doozy.live/v1/surveys/{surveyId}/report"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.doozy.live/v1/surveys/{surveyId}/report")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/surveys/{surveyId}/report")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "survey_report",
"id": "survey_abc123",
"title": "Employee Satisfaction Survey",
"mode": "survey",
"response_type": "anonymous",
"summary": {
"total_deliveries": 250,
"total_responses": 180,
"response_rate": 72
},
"questions": [
{
"object": "survey_question_analytics",
"id": "instance_abc:q_abc123",
"text": "How satisfied are you with your onboarding experience?",
"type": "scale_1_to_10",
"total_responses": 120,
"average_score": 7.8,
"enps_score": 45,
"enps_breakdown": {
"promoters": 50,
"passives": 40,
"detractors": 30
},
"answer_breakdown": [
{
"answer": "8",
"total_responses": 25,
"percentage": 35.7
}
],
"comments": [
{
"comment": "Great experience overall!",
"answered_at": "2026-01-16T14:30:00.000Z"
}
]
}
],
"total_participants": 180,
"has_more": false,
"url": "/v1/surveys/survey_abc123/report",
"next_cursor": "part_xyz789",
"previous_cursor": "part_abc123",
"participants": [
{
"object": "survey_participant",
"id": "user_abc123",
"email": "jane.doe@example.com",
"display_name": "Jane Doe",
"status": "responded",
"received_at": "2026-01-15T10:30:00.000Z",
"responded_at": "2026-01-16T14:30:00.000Z",
"answers": [
{
"question_id": "q_abc123",
"question_text": "How satisfied are you with your onboarding experience?",
"question_type": "scale_1_to_10",
"value": 8,
"comment": "Great experience overall!"
}
]
}
],
"warning": "Large dataset: consider using from_date/to_date filters for better performance"
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "No such quiz: quiz_abc123",
"param": "id",
"doc_url": "https://docs.doozy.live/api/errors#resource_not_found"
}
}Authorizations
API key for authentication. Generate keys in the Doozy dashboard.
Path Parameters
The unique identifier of the survey
1 - 128^[A-Za-z0-9_-]+$"survey_abc123"
Query Parameters
Maximum number of participants to return (1-250, default 25)
1 <= x <= 25025
Cursor for pagination - the ID of the last participant from the previous page
256"user_abc123"
Cursor for pagination - the ID of the first participant from the next page (for backward pagination)
256"user_xyz789"
Filter participants by received_at >= this date (ISO 8601 format)
"2026-01-01T00:00:00.000Z"
Filter participants by received_at <= this date (ISO 8601 format)
"2026-01-31T23:59:59.999Z"
Filter participants by status: 'responded' (default), 'not_responded', 'all', or 'none' (analytics only, skip participant list)
all, responded, not_responded, none "responded"
Participant order
received_at_desc, responded_at_desc, name_asc "responded_at_desc"
Filter identified-survey participants and aggregates by exact account group ID
1"group_engineering"
Filter to a specific delivery instance by ID. When set, from_date and to_date are ignored.
"inst_abc123"
Filter results to participants from a specific track (workflow). When specified, only participants who received the survey via this track will be included.
"wf_abc123"
Filter results to participants from a specific schedule. When specified, only instances created by this schedule will be included.
"sch_abc123"
Include comments on questions in the report (default true)
true, false "true"
Response
Survey report with analytics and participants
Object type identifier
survey_report "survey_report"
Survey ID
"survey_abc123"
Survey title
"Employee Satisfaction Survey"
Survey mode
poll, survey "survey"
How responses are collected
anonymous, user "anonymous"
Summary statistics for the report
Show child attributes
Show child attributes
Per-question analytics (average scores, answer breakdowns, eNPS)
Show child attributes
Show child attributes
Total number of participants matching the filter (for pagination progress)
180
Whether there are more participants available beyond this page
false
The URL for accessing this report
"/v1/surveys/survey_abc123/report"
Cursor to fetch the next page of participants. Pass as starting_after in subsequent requests.
"part_xyz789"
Cursor to fetch the previous page of participants. Pass as ending_before in subsequent requests.
"part_abc123"
Paginated list of participants with their answers (based on participant_status)
Show child attributes
Show child attributes
Warning message for large datasets without date filters
"Large dataset: consider using from_date/to_date filters for better performance"
Was this page helpful?