Get a quiz
const url = 'https://api.octaneai.com/v1/quizzes/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.octaneai.com/v1/quizzes/example \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”The quiz summary and its structure: pages in order with their role, content components, rules and jumps, and the scoring dimensions. Never the quiz document; null and empty fields are left out.
object
Publish-lifecycle status for an app. DRAFT: editable; not served to the storefront embed. PUBLISHED: a version is live; the embed serves the published snapshot. DELETED: soft-deleted; hidden from the dashboard list and the embed, but the row (pages, versions) is retained for recoverability. The column is a plain VARCHAR (native_enum=False), so this value needs no migration.
object
The scoring dimensions, in declared order
object
In quiz order, the first 50
object
How many content components the page has
Content components in stored order, the first 40; layout, buttons and links are left out
object
What the component means to a reader: choice_single, choice_multi, choice_slider, slider, number, text, email, phone, date, formula, products, copy (a heading or a text block, whose label is its text), other (an image, video, HTML block or any other content)
The authored label or copy without markup, the first 500 characters
object
What a person calls this kind of component
What the page is for: start (the first page), question, loading (a loading visual), results (it shows products)
object
Example
{ "archived": false, "created_at": "2026-09-01T12:00:00Z", "id": "quiz_7c9e6679742540de944be07fc1f90ae7", "name": "Find your routine", "page_count": 3, "status": "draft", "structure": { "dimensions": [ { "dimension_id": "dry", "label": "Dry skin" }, { "dimension_id": "oily", "label": "Oily skin" } ], "page_count": 3, "pages": [ { "component_count": 0, "page_key": "welcome", "role": "start", "title": "Find your routine" }, { "component_count": 2, "components": [ { "component_key": "multi_choice-k3x9q", "kind": "choice_single", "label": "How does your skin feel by noon?", "option_count": 2, "options": [ { "label": "Tight", "option_id": "b1f4d2e0-6c3a-4f0e-9b2a-1d5c7e8f9a01", "scores": [ "dry" ] }, { "label": "Shiny", "option_id": "c2a5e3f1-7d4b-4a1f-8c3b-2e6d8f9a0b12", "scores": [ "oily" ] } ], "required": true, "type": "Multiple Choice" }, { "component_key": "sliders-p8m2t", "kind": "slider", "label": "How many products do you use?", "range": { "max": 10, "min": 1, "step": 1 }, "required": true, "type": "Slider" } ], "jumps": [ { "condition": { "=": [ { "var": "multi_choice-k3x9q" }, "tight" ] }, "rule_key": "jump_1", "target_page_key": "results" } ], "page_key": "skin", "role": "question", "title": "Your skin" }, { "component_count": 2, "components": [ { "component_key": "heading-v7r1c", "kind": "copy", "label": "Your routine", "type": "Heading" }, { "component_key": "shopify_product_block-a4n8s", "kind": "products", "label": "Products", "product_source": "points", "type": "Products" } ], "page_key": "results", "role": "results", "title": "Your routine" } ] }, "updated_at": "2026-09-01T12:00:00Z", "urls": { "dashboard": "https://editor.octaneai.com/bot_123/editor/7c9e6679-7425-40de-944b-e07fc1f90ae7", "self": "https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7", "versions": "https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions" }}The key is missing, malformed, revoked or expired.
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Example
{ "detail": "The API key is missing, malformed, revoked or expired", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": 401, "title": "invalid_api_key", "type": "https://api.octaneai.com/errors/invalid_api_key"}Headers
Section titled “Headers”Example
BearerThe store’s plan has no API access, or the key lacks the scope.
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Examples
{ "detail": "The API key does not carry the scope this route needs", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "required": [ "quizzes:read" ], "status": 403, "title": "insufficient_scope", "type": "https://api.octaneai.com/errors/insufficient_scope"}{ "detail": "The merchant API is available on the Plus and Enterprise plans", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": 403, "title": "plan_required", "type": "https://api.octaneai.com/errors/plan_required"}Not found
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Example
{ "detail": "Not found", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": 404, "title": "not_found", "type": "https://api.octaneai.com/errors/not_found"}A request parameter is invalid.
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Example
{ "detail": "A request parameter is invalid.", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": 422, "title": "validation_error", "type": "https://api.octaneai.com/errors/validation_error"}The key’s or the store’s bucket is full; Retry-After says when to try again.
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Example
{ "detail": "Too many requests", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "retry_after": 1, "status": 429, "title": "rate_limited", "type": "https://api.octaneai.com/errors/rate_limited"}The request timed out.
The body of every non-2xx response.
object
What went wrong, for people
object
The input that failed, as a dotted path (body.label, query.from)
Why it failed
The same value as the Request-Id header; quote it to support
The HTTP status of the response
The machine-readable error code
A stable URI naming the error, on this API’s public host
Example
{ "detail": "The request timed out.", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "status": 504, "title": "timeout", "type": "https://api.octaneai.com/errors/timeout"}