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",
"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",
"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
}
]
}
],
"enrollees": [
{
"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",
"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_enrollees": 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 comprehensive report for a track, including enrollment summary, enrollee progress, and optionally 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",
"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",
"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
}
]
}
],
"enrollees": [
{
"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",
"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_enrollees": 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 to return (1-100, default 25)
1 <= x <= 10025
Cursor for pagination - the instance ID of the last enrollee from the previous page
256"inst_abc123"
Cursor for pagination - the instance ID of the first enrollee from the next page (for backward pagination)
256"inst_xyz789"
Filter enrollees by status (default: all)
active, delivered, completed, failed, paused, canceled, all "all"
Include enrollee rows. Set false for summary and step analytics only.
true, false "false"
Filter enrollees started at or after this date (ISO 8601)
"2026-01-01T00:00:00.000Z"
Filter enrollees 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, enrollees, 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, schedule, work_anniversary, added_by_another_workflow, self_join, cohort_started, cohort_member_added "user_join"
Summary statistics for the report
Show child attributes
Show child attributes
Per-step aggregate analytics computed from all enrollees matching the filter, not just the current page.
Show child attributes
Show child attributes
Paginated list of enrollees with step progress
Show child attributes
Show child attributes
Total number of enrollees matching the filter
100
Whether there are more enrollees available beyond this page
true
The URL for accessing this report
"/v1/tracks/wf_abc123/report"
Cursor to fetch the next page of enrollees. Pass as starting_after in subsequent requests.
"inst_xyz789"
Cursor to fetch the previous page of enrollees. Pass as ending_before in subsequent requests.
"inst_abc123"
Was this page helpful?