curl --request GET \
--url https://api.doozy.live/v1/tracks/{trackId}/report \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/report")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/tracks/{trackId}/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": "track_report",
"id": "wf_abc123",
"name": "New Hire Onboarding",
"state": "active",
"trigger_type": "user_join",
"reporting_unit": "enrollee",
"summary": {
"object": "track_report_summary",
"total_enrollees": 100,
"active": 40,
"delivered": 10,
"completed": 45,
"failed": 5,
"paused": 5,
"canceled": 5,
"average_completion_rate": 72.5,
"average_time_to_complete": 604800
},
"step_analytics": [
{
"object": "track_step_analytics",
"step_id": "step_abc123",
"step_type": "survey",
"title": "Onboarding Survey",
"display_title": "Onboarding Survey",
"order": 1,
"day": 0,
"time": "09:00",
"total_reached": 80,
"delivered": 5,
"completed": 70,
"failed": 3,
"skipped": 2,
"active": 5,
"completion_rate": 87.5,
"channel": "slack",
"task_completion_rate": 66.7,
"task_breakdown": [
{
"object": "track_task_item_analytics",
"task_id": "task_abc123",
"details": "Read the employee handbook",
"assigned": 80,
"completed": 60,
"completion_rate": 75
}
]
}
],
"instances": [
{
"object": "track_enrollee",
"id": "inst_abc123",
"track_name": "New Hire Onboarding",
"user_id": "user_abc123",
"email": "jane.doe@example.com",
"display_name": "Jane Doe",
"slack_user_id": "U01234567",
"department": "Engineering",
"location": "San Francisco, CA",
"manager_name": "John Smith",
"manager_email": "john.smith@example.com",
"manager_id": "user_mgr456",
"mentor_id": "user_mentor123",
"mentor_name": "Alex Johnson",
"mentor_email": "alex.johnson@example.com",
"mentor_assigned_at": "2026-01-15T11:00:00.000Z",
"groups": [
"Engineering",
"Backend"
],
"trigger": "user_join",
"status": "active",
"failure_reason": null,
"failure_reason_message": "The user could not be found",
"failed_by": {
"uid": "user_123",
"display_name": "John Doe",
"email": "john@example.com",
"image_token": "img_abc123",
"team_id": "team_123",
"team_name": "Engineering",
"seniority": 2
},
"started_at": "2026-01-15T10:30:00.000Z",
"delivered_at": "2026-01-20T10:00:00.000Z",
"completed_at": null,
"failed_at": null,
"next_step_at": "2026-01-20T09:00:00.000Z",
"added_by_user_id": "user_admin789",
"added_by_workflow_id": "wf_source456",
"timezone": "America/New_York",
"steps_delivered": 4,
"steps_completed": 3,
"steps_total": 5,
"delivery_progress_percentage": 80,
"completion_progress_percentage": 60,
"step_progress": [
{
"object": "track_step_progress",
"step_id": "step_abc123",
"step_type": "survey",
"title": "Onboarding Survey",
"display_title": "Onboarding Survey",
"order": 1,
"day": 0,
"time": "09:00",
"scheduled_at": "2026-01-16T14:00:00.000Z",
"status": "completed",
"started_at": "2026-01-15T10:30:00.000Z",
"delivered_at": "2026-01-15T11:00:00.000Z",
"completed_at": "2026-01-16T14:30:00.000Z",
"failed_at": null,
"skipped_at": null,
"failure_reason": null,
"failure_reason_message": "No mentor is available for assignment",
"destination_type": "user",
"result": {
"object": "track_step_survey_result",
"survey_id": "survey_abc123",
"survey_instance_id": "inst_xyz789",
"status": "responded",
"responded_at": "2026-01-16T14:30:00.000Z",
"answers": [
{
"question_id": "q_abc123",
"question_text": "How satisfied are you with your onboarding?",
"question_type": "scale_1_to_10",
"value": 8,
"comment": "Great experience!"
}
]
},
"channel": "slack"
}
]
}
],
"total_instances": 100,
"has_more": true,
"url": "/v1/tracks/wf_abc123/report",
"next_cursor": "inst_xyz789",
"previous_cursor": "inst_abc123"
}{
"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 track report
Generate a track report with summary statistics, individual enrollee or group-run progress, and optional step-level results and analytics.
curl --request GET \
--url https://api.doozy.live/v1/tracks/{trackId}/report \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/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/tracks/{trackId}/report")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/tracks/{trackId}/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": "track_report",
"id": "wf_abc123",
"name": "New Hire Onboarding",
"state": "active",
"trigger_type": "user_join",
"reporting_unit": "enrollee",
"summary": {
"object": "track_report_summary",
"total_enrollees": 100,
"active": 40,
"delivered": 10,
"completed": 45,
"failed": 5,
"paused": 5,
"canceled": 5,
"average_completion_rate": 72.5,
"average_time_to_complete": 604800
},
"step_analytics": [
{
"object": "track_step_analytics",
"step_id": "step_abc123",
"step_type": "survey",
"title": "Onboarding Survey",
"display_title": "Onboarding Survey",
"order": 1,
"day": 0,
"time": "09:00",
"total_reached": 80,
"delivered": 5,
"completed": 70,
"failed": 3,
"skipped": 2,
"active": 5,
"completion_rate": 87.5,
"channel": "slack",
"task_completion_rate": 66.7,
"task_breakdown": [
{
"object": "track_task_item_analytics",
"task_id": "task_abc123",
"details": "Read the employee handbook",
"assigned": 80,
"completed": 60,
"completion_rate": 75
}
]
}
],
"instances": [
{
"object": "track_enrollee",
"id": "inst_abc123",
"track_name": "New Hire Onboarding",
"user_id": "user_abc123",
"email": "jane.doe@example.com",
"display_name": "Jane Doe",
"slack_user_id": "U01234567",
"department": "Engineering",
"location": "San Francisco, CA",
"manager_name": "John Smith",
"manager_email": "john.smith@example.com",
"manager_id": "user_mgr456",
"mentor_id": "user_mentor123",
"mentor_name": "Alex Johnson",
"mentor_email": "alex.johnson@example.com",
"mentor_assigned_at": "2026-01-15T11:00:00.000Z",
"groups": [
"Engineering",
"Backend"
],
"trigger": "user_join",
"status": "active",
"failure_reason": null,
"failure_reason_message": "The user could not be found",
"failed_by": {
"uid": "user_123",
"display_name": "John Doe",
"email": "john@example.com",
"image_token": "img_abc123",
"team_id": "team_123",
"team_name": "Engineering",
"seniority": 2
},
"started_at": "2026-01-15T10:30:00.000Z",
"delivered_at": "2026-01-20T10:00:00.000Z",
"completed_at": null,
"failed_at": null,
"next_step_at": "2026-01-20T09:00:00.000Z",
"added_by_user_id": "user_admin789",
"added_by_workflow_id": "wf_source456",
"timezone": "America/New_York",
"steps_delivered": 4,
"steps_completed": 3,
"steps_total": 5,
"delivery_progress_percentage": 80,
"completion_progress_percentage": 60,
"step_progress": [
{
"object": "track_step_progress",
"step_id": "step_abc123",
"step_type": "survey",
"title": "Onboarding Survey",
"display_title": "Onboarding Survey",
"order": 1,
"day": 0,
"time": "09:00",
"scheduled_at": "2026-01-16T14:00:00.000Z",
"status": "completed",
"started_at": "2026-01-15T10:30:00.000Z",
"delivered_at": "2026-01-15T11:00:00.000Z",
"completed_at": "2026-01-16T14:30:00.000Z",
"failed_at": null,
"skipped_at": null,
"failure_reason": null,
"failure_reason_message": "No mentor is available for assignment",
"destination_type": "user",
"result": {
"object": "track_step_survey_result",
"survey_id": "survey_abc123",
"survey_instance_id": "inst_xyz789",
"status": "responded",
"responded_at": "2026-01-16T14:30:00.000Z",
"answers": [
{
"question_id": "q_abc123",
"question_text": "How satisfied are you with your onboarding?",
"question_type": "scale_1_to_10",
"value": 8,
"comment": "Great experience!"
}
]
},
"channel": "slack"
}
]
}
],
"total_instances": 100,
"has_more": true,
"url": "/v1/tracks/wf_abc123/report",
"next_cursor": "inst_xyz789",
"previous_cursor": "inst_abc123"
}{
"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 track
1 - 128^[A-Za-z0-9_-]+$"wf_abc123"
Query Parameters
Maximum number of enrollees or group runs to return (1-100, default 25)
1 <= x <= 10025
Cursor for pagination - the instance ID of the last report row from the previous page
256"inst_abc123"
Cursor for pagination - the instance ID of the first report row from the next page (for backward pagination)
256"inst_xyz789"
Filter enrollees or group runs by status (default: all). For group runs, completed matches successful delivered runs.
scheduled, active, delivered, completed, failed, paused, canceled, all "all"
Include paginated enrollee or group-run rows. Set false for summary and step analytics only.
true, false "false"
Filter enrollees or group runs started at or after this date (ISO 8601)
"2026-01-01T00:00:00.000Z"
Filter enrollees or group runs started at or before this date (ISO 8601)
"2026-01-31T23:59:59.999Z"
Only include step progress for steps of this type
message, email, quiz, poll, survey, individualIntroductions, mentorAssignment, addToWorkflow, tasks, webhook "survey"
Only include step progress for this specific step ID
"step_abc123"
Include activity results (survey answers, quiz responses, etc.) in step progress (default true)
true, false "true"
Response
Track report with summary, instances, and optional analytics
Object type identifier
track_report "track_report"
Track ID
"wf_abc123"
Track name
"New Hire Onboarding"
Current track state
draft, active, paused, archived "active"
How users are added to the track
user_join, manual_user_trigger, manual_group_trigger, schedule, schedule_group, work_anniversary, added_by_another_workflow, self_join, cohort_started, cohort_member_added "user_join"
Whether report rows and step analytics represent individual enrollees or subject-less group runs.
enrollee, group_run Summary statistics for the report
Show child attributes
Show child attributes
Per-step aggregate analytics computed from all subjects matching the filter, not just the current page. reporting_unit identifies whether subjects are enrollees or group runs.
Show child attributes
Show child attributes
Paginated track instances with step progress
- Option 1
- Option 2
Show child attributes
Show child attributes
Total number of track instances matching the report filters
100
Whether there are more enrollees or group runs beyond this page
true
The URL for accessing this report
"/v1/tracks/wf_abc123/report"
Cursor to fetch the next page of report rows. Pass as starting_after in subsequent requests.
"inst_xyz789"
Cursor to fetch the previous page of report rows. Pass as ending_before in subsequent requests.
"inst_abc123"
Was this page helpful?