curl --request GET \
--url https://api.doozy.live/v1/surveys/{surveyId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/surveys/{surveyId}"
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}', 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}",
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}"
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}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/surveys/{surveyId}")
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",
"id": "survey_abc123",
"title": "Employee Satisfaction Survey",
"description": "Monthly check-in on team satisfaction",
"mode": "survey",
"response_type": "anonymous",
"results_visibility": "owner",
"status": "scheduled",
"published_version": 3,
"question_count": 5,
"time_limit_minutes": 30,
"track": {
"id": "wf_abc123",
"name": "Onboarding Program"
},
"instances": [
{
"object": "survey_instance",
"id": "inst_xyz789",
"scheduled_at": "2026-01-15T10:30:00.000Z",
"end_at": "2026-01-22T10:30:00.000Z",
"total_recipients": 50,
"total_responses": 35,
"response_rate": 70,
"track_id": "wf_abc123",
"track_name": "Onboarding Track",
"track_instance_id": "wf_inst_abc123",
"schedule_id": "sched_abc123",
"introduction_feedback": {
"introduction_id": "<string>",
"run_id": "<string>",
"match_id": "<string>",
"participants": [
{
"doozy_user_id": "<string>",
"slack_user_id": "<string>",
"display_name": "<string>"
}
]
}
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-01-20T14:00:00.000Z",
"meta": {
"permissions": {
"can_view_results": true,
"can_clone": true,
"can_manage": true,
"can_edit": true,
"can_pause": true,
"can_resume": true,
"can_delete": true,
"can_activate": true,
"can_manage_admins": true
}
},
"result_visibility": {
"managers_can_view": true
},
"questions": [
{
"object": "survey_question",
"id": "q_abc123",
"text": "How satisfied are you with your onboarding experience?",
"type": "scale_1_to_10",
"hint": "1 = Very dissatisfied, 10 = Very satisfied",
"allow_comments": true,
"required": true,
"choices": [
"Option A",
"Option B",
"Option C"
],
"allow_multiple": false
}
],
"admin_users": [
"user_abc123",
"user_def456"
],
"current_draft_id": "draft_abc123",
"last_published_at": "2026-06-10T09:48:36.000Z",
"last_published_by": {
"user_id": "user_abc123",
"display_name": "John Doe",
"email": "john@example.com",
"slack_user_id": "U1234567890",
"image_token": "img_abc123",
"image_url": {
"image_24": "<string>",
"image_32": "<string>",
"image_48": "<string>",
"image_72": "<string>",
"image_192": "<string>",
"image_512": "<string>",
"image_1024": "<string>",
"image_original": "<string>"
}
},
"draft_has_unpublished_changes": true,
"draft_last_edited_at": "2026-06-10T10:15:00.000Z",
"draft_last_edited_by": {
"user_id": "user_abc123",
"display_name": "John Doe",
"email": "john@example.com",
"slack_user_id": "U1234567890",
"image_token": "img_abc123",
"image_url": {
"image_24": "<string>",
"image_32": "<string>",
"image_48": "<string>",
"image_72": "<string>",
"image_192": "<string>",
"image_512": "<string>",
"image_1024": "<string>",
"image_original": "<string>"
}
}
}{
"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 details
Retrieve a specific survey by ID, including questions and delivery instances. Only accessible if the user is an admin of the survey.
curl --request GET \
--url https://api.doozy.live/v1/surveys/{surveyId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.doozy.live/v1/surveys/{surveyId}"
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}', 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}",
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}"
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}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doozy.live/v1/surveys/{surveyId}")
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",
"id": "survey_abc123",
"title": "Employee Satisfaction Survey",
"description": "Monthly check-in on team satisfaction",
"mode": "survey",
"response_type": "anonymous",
"results_visibility": "owner",
"status": "scheduled",
"published_version": 3,
"question_count": 5,
"time_limit_minutes": 30,
"track": {
"id": "wf_abc123",
"name": "Onboarding Program"
},
"instances": [
{
"object": "survey_instance",
"id": "inst_xyz789",
"scheduled_at": "2026-01-15T10:30:00.000Z",
"end_at": "2026-01-22T10:30:00.000Z",
"total_recipients": 50,
"total_responses": 35,
"response_rate": 70,
"track_id": "wf_abc123",
"track_name": "Onboarding Track",
"track_instance_id": "wf_inst_abc123",
"schedule_id": "sched_abc123",
"introduction_feedback": {
"introduction_id": "<string>",
"run_id": "<string>",
"match_id": "<string>",
"participants": [
{
"doozy_user_id": "<string>",
"slack_user_id": "<string>",
"display_name": "<string>"
}
]
}
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-01-20T14:00:00.000Z",
"meta": {
"permissions": {
"can_view_results": true,
"can_clone": true,
"can_manage": true,
"can_edit": true,
"can_pause": true,
"can_resume": true,
"can_delete": true,
"can_activate": true,
"can_manage_admins": true
}
},
"result_visibility": {
"managers_can_view": true
},
"questions": [
{
"object": "survey_question",
"id": "q_abc123",
"text": "How satisfied are you with your onboarding experience?",
"type": "scale_1_to_10",
"hint": "1 = Very dissatisfied, 10 = Very satisfied",
"allow_comments": true,
"required": true,
"choices": [
"Option A",
"Option B",
"Option C"
],
"allow_multiple": false
}
],
"admin_users": [
"user_abc123",
"user_def456"
],
"current_draft_id": "draft_abc123",
"last_published_at": "2026-06-10T09:48:36.000Z",
"last_published_by": {
"user_id": "user_abc123",
"display_name": "John Doe",
"email": "john@example.com",
"slack_user_id": "U1234567890",
"image_token": "img_abc123",
"image_url": {
"image_24": "<string>",
"image_32": "<string>",
"image_48": "<string>",
"image_72": "<string>",
"image_192": "<string>",
"image_512": "<string>",
"image_1024": "<string>",
"image_original": "<string>"
}
},
"draft_has_unpublished_changes": true,
"draft_last_edited_at": "2026-06-10T10:15:00.000Z",
"draft_last_edited_by": {
"user_id": "user_abc123",
"display_name": "John Doe",
"email": "john@example.com",
"slack_user_id": "U1234567890",
"image_token": "img_abc123",
"image_url": {
"image_24": "<string>",
"image_32": "<string>",
"image_48": "<string>",
"image_72": "<string>",
"image_192": "<string>",
"image_512": "<string>",
"image_1024": "<string>",
"image_original": "<string>"
}
}
}{
"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"
Response
Survey details with questions and instances
Object type identifier
survey "survey"
Unique survey identifier
"survey_abc123"
Survey title
"Employee Satisfaction Survey"
Survey description
"Monthly check-in on team satisfaction"
Survey mode (poll or survey)
poll, survey "survey"
How responses are collected
anonymous, user "anonymous"
Who can view results
owner, everyone "owner"
Current survey status
draft, scheduled, archived "scheduled"
Monotonic version number, incremented on each publish. 0 before the first publish — a never-published eager draft, which clients open directly in the editor rather than the detail page.
x >= 03
Number of questions in the survey
5
Time limit in minutes for completing the survey (null for no limit)
x >= 130
Track reference if survey belongs to a track
Show child attributes
Show child attributes
Delivery instances of this survey
Show child attributes
Show child attributes
When the survey was created (ISO 8601 format)
"2026-01-15T10:30:00.000Z"
When the survey was last updated (ISO 8601 format)
"2026-01-20T14:00:00.000Z"
What the requesting user can do with this survey (edit, pause, resume, delete, activate, manage admins). Use these to drive UI affordances.
Show child attributes
Show child attributes
Who, beyond the survey's admins, can see an individual's responses in the People view. Null means owner only. Distinct from results_visibility.
Show child attributes
Show child attributes
Questions in the survey
Show child attributes
Show child attributes
Doozy user IDs of members who can edit this survey and view its results.
["user_abc123", "user_def456"]
Active collaborative draft id. Clients connect their Yjs provider to /surveys/{id}/drafts/{current_draft_id} to participate in realtime editing. Null only for legacy surveys created before the collaborative editor rollout — those will lazy-mint a draft on first edit.
"draft_abc123"
ISO 8601 timestamp of the most recent publish, or null if never published.
"2026-06-10T09:48:36.000Z"
Profile of the person who last published, or null.
Show child attributes
Show child attributes
True when the current draft has edits that diverge from the published survey.
true
ISO 8601 timestamp of the last edit to the current draft, or null.
"2026-06-10T10:15:00.000Z"
Profile of the last person to edit the current draft, or null.
Show child attributes
Show child attributes
Was this page helpful?