curl --request GET \
--url https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId}"
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}/instances/{instanceId}', 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}/instances/{instanceId}",
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}/instances/{instanceId}"
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}/instances/{instanceId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId}")
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_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"
}
]
}{
"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 a track instance
Retrieve a track instance by ID. Per-person instances include step progress and permitted results; broadcast instances include delivery progress.
curl --request GET \
--url https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId}"
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}/instances/{instanceId}', 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}/instances/{instanceId}",
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}/instances/{instanceId}"
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}/instances/{instanceId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/tracks/{trackId}/instances/{instanceId}")
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_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"
}
]
}{
"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
1 - 128^[A-Za-z0-9_-]+$The unique identifier of the track instance
1 - 128^[A-Za-z0-9_:-]+$"inst_abc123"
Response
Track instance with step progress
- Option 1
- Option 2
Object type identifier
track_enrollee "track_enrollee"
Workflow instance ID
"inst_abc123"
Name of the track this enrollee is on
"New Hire Onboarding"
User ID
"user_abc123"
Enrollee's email address
"jane.doe@example.com"
Enrollee's display name
"Jane Doe"
Enrollee's Slack user ID
"U01234567"
Enrollee's department or group
"Engineering"
Enrollee's work location
"San Francisco, CA"
Manager's display name
"John Smith"
Manager's email address
"john.smith@example.com"
Manager's user ID
"user_mgr456"
Assigned mentor's user ID
"user_mentor123"
Assigned mentor's display name
"Alex Johnson"
Assigned mentor's email address
"alex.johnson@example.com"
When the mentor was assigned, i.e. finalised — the intro DM fired (ISO 8601). Null while a mentor is pre-picked but not yet finalised; mentor_id is still populated in that case.
"2026-01-15T11:00:00.000Z"
Groups the enrollee belongs to
["Engineering", "Backend"]
How this user was enrolled in the track (user_join, manual_user_trigger, self_join, schedule, work_anniversary, added_by_another_workflow)
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"
Current enrollment status
scheduled, new, active, processing, active_batch, processing_batch, delivered, completed, failed, paused, paused_awaiting_slack, canceled "active"
Reason for enrollment failure, if applicable. Possible values: user_not_found, user_already_in_workflow, user_removed_from_workflow, workflow_not_active, unknown_error
null
Human-readable message for the failure reason
"The user could not be found"
User who caused the failure (e.g. the admin who removed the enrollee). Null if the failure wasn't caused by a known user.
Show child attributes
Show child attributes
When the enrollee started the track (ISO 8601)
"2026-01-15T10:30:00.000Z"
When all steps were delivered to the enrollee (ISO 8601). Null if not all steps have been delivered yet.
"2026-01-20T10:00:00.000Z"
When the enrollee completed all user-completable steps in the track (ISO 8601). Null if not yet completed.
null
When the enrollment failed (ISO 8601)
null
When the next step is scheduled to run (ISO 8601)
"2026-01-20T09:00:00.000Z"
User ID of who manually enrolled this user (if applicable)
"user_admin789"
If enrolled via an addToWorkflow step, the source workflow ID
"wf_source456"
Timezone this enrollment is running in
"America/New_York"
Number of steps delivered to the user (status = delivered or completed)
4
Number of steps the user has completed (status = completed only)
3
Total number of steps in the track
5
Delivery progress as a percentage (0-100). Calculated as steps_delivered / steps_total * 100.
80
Completion progress as a percentage (0-100). Calculated as steps_completed / steps_total * 100.
60
Per-step progress details
Show child attributes
Show child attributes
Was this page helpful?