Skip to content

Quiz analytics overview

GET
/v1/quizzes/{quiz_id}/analytics/overview
curl --request GET \
--url 'https://api.octaneai.com/v1/quizzes/example/analytics/overview?tz=UTC' \
--header 'Authorization: Bearer <token>'
quiz_id
required
Quiz Id
string
from
Any of:
string format: date

First day, inclusive, in tz; 29 days before to when absent

to
Any of:
string format: date

Last day, inclusive, in tz; today when absent

tz
Tz
string
default: UTC <= 64 characters
channel
Any of:
string
device
Any of:
string
new_returning
Any of:
string
country
Any of:
string
if-none-match
Any of:
string
<= 1024 characters

Analytics for the range. ETag identifies the cached response.

Media typeapplication/json
QuizOverview
object
data_start
required
Any of:
string format: date
filters
required
AnalyticsFilters
object
channel
required
Any of:
string
country
required
Any of:
string
device
required
Any of:
string
new_returning
required
Any of:
string
freshness
required
Freshness
object
as_of
required
Any of:
string format: date-time
closed_days_through
required
Closed Days Through

The last day whose numbers are settled: yesterday in the request’s timezone

string format: date
next_refresh_at
required
Any of:
string format: date-time
pending
required
Pending

True until every update behind these numbers has run once, so they may be incomplete

boolean
stale
required
Stale
boolean
today_live
required
Today Live
boolean
live_since
required
Any of:
string format: date-time
live_since_approximate
required
Live Since Approximate

True when the first publish predates publish tracking and live_since is the oldest saved version’s time

boolean
markers
required
Markers

Every publish of the quiz, oldest first

Array<object>
PublishMarker
object
approximate
required
Approximate

True when the publish predates publish tracking and its time is the oldest saved version’s

boolean
day
required
Day

The publish’s day in the request’s timezone, the series day the marker sits on

string format: date
published_at
required
Published At
string format: date-time
version_number
required
Any of:
integer
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
range
required
AnalyticsRange
object
days
required
Days
integer
end
required
End

Last day of the range, inclusive, in timezone

string format: date
start
required
Start

First day of the range, inclusive, in timezone

string format: date
timezone
required
Timezone

IANA name of the timezone the days are counted in; UTC unless the request named one

string
series
required
Series
Array<object>
OverviewPoint
object
avg_time_to_complete_ms
required
Any of:
number
completions
required
Completions

Visits that finished the quiz: reached its last page and answered whatever that page requires

integer
consent_denied
required
Consent Denied

Visits where the shopper had declined tracking on the store

integer
day
required
Day
string format: date
email_opt_ins
required
Email Opt Ins

Visits where the shopper submitted an email address

integer
median_time_to_complete_ms
required
Any of:
number
orders
required
Orders

Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed

integer
orders_inside_window
required
Orders Inside Window

Linked orders placed within the store’s order-matching window after the visit began; orders of items the quiz carted count up to 90 days

integer
phone_opt_ins
required
Phone Opt Ins

Visits where the shopper submitted a phone number

integer
revenue
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
revenue_by_bucket
required
Any of:
ProductBucketMoney
object
added_from_quiz
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
bought_not_shown
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
shown_bought_later
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
starts
required
Starts

Visits where the shopper answered or stepped forward at least once

integer
unique_viewers_approx
required
Unique Viewers Approx

An estimate of how many different people opened the quiz; someone who came back counts once

integer
views
required
Views

Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted

integer
totals
required
OverviewTotals
object
aov
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
avg_came_back_to_buy_ms
required
Any of:
number
avg_quiz_to_checkout_ms
required
Any of:
number
avg_time_to_complete_ms
required
Any of:
number
completion_rate
required
Any of:
number
completions
required
Completions

Visits that finished the quiz: reached its last page and answered whatever that page requires

integer
consent_denied
required
Consent Denied

Visits where the shopper had declined tracking on the store

integer
email_opt_ins
required
Email Opt Ins

Visits where the shopper submitted an email address

integer
median_came_back_to_buy_ms
required
Any of:
number
median_quiz_to_checkout_ms
required
Any of:
number
median_time_to_complete_ms
required
Any of:
number
orders
required
Orders

Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed

integer
orders_inside_window
required
Orders Inside Window

Linked orders placed within the store’s order-matching window after the visit began; orders of items the quiz carted count up to 90 days

integer
phone_opt_ins
required
Phone Opt Ins

Visits where the shopper submitted a phone number

integer
revenue
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
revenue_by_bucket
required
Any of:
ProductBucketMoney
object
added_from_quiz
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
bought_not_shown
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
shown_bought_later
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
start_rate
required
Any of:
number
starts
required
Starts

Visits where the shopper answered or stepped forward at least once

integer
unique_viewers_approx
required
Unique Viewers Approx

An estimate of how many different people opened the quiz; someone who came back counts once

integer
views
required
Views

Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted

integer
Example
{
"data_start": "2026-09-01",
"filters": {},
"freshness": {
"as_of": "2026-09-07T12:00:00Z",
"closed_days_through": "2026-09-06",
"next_refresh_at": "2026-09-07T13:00:00Z",
"pending": false,
"stale": false,
"today_live": true
},
"live_since": "2026-09-01T00:00:00Z",
"live_since_approximate": false,
"markers": [
{
"approximate": false,
"day": "2026-09-03",
"published_at": "2026-09-03T09:00:00Z",
"version_number": 3
}
],
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"range": {
"days": 7,
"end": "2026-09-07",
"start": "2026-09-01",
"timezone": "UTC"
},
"series": [
{
"avg_time_to_complete_ms": 42000,
"completions": 5,
"consent_denied": 0,
"day": "2026-09-01",
"email_opt_ins": 2,
"median_time_to_complete_ms": 40000,
"orders": 1,
"orders_inside_window": 1,
"phone_opt_ins": 1,
"revenue": {
"amount": "12.50",
"currency": "USD"
},
"revenue_by_bucket": {
"added_from_quiz": {
"amount": "12.50",
"currency": "USD"
},
"bought_not_shown": {
"amount": "0",
"currency": "USD"
},
"shown_bought_later": {
"amount": "0",
"currency": "USD"
}
},
"starts": 8,
"unique_viewers_approx": 9,
"views": 10
}
],
"totals": {
"aov": {
"amount": "12.50",
"currency": "USD"
},
"avg_quiz_to_checkout_ms": 60000,
"avg_time_to_complete_ms": 42000,
"completion_rate": 62.5,
"completions": 5,
"consent_denied": 0,
"email_opt_ins": 2,
"median_quiz_to_checkout_ms": 60000,
"median_time_to_complete_ms": 40000,
"orders": 1,
"orders_inside_window": 1,
"phone_opt_ins": 1,
"revenue": {
"amount": "12.50",
"currency": "USD"
},
"revenue_by_bucket": {
"added_from_quiz": {
"amount": "12.50",
"currency": "USD"
},
"bought_not_shown": {
"amount": "0",
"currency": "USD"
},
"shown_bought_later": {
"amount": "0",
"currency": "USD"
}
},
"start_rate": 80,
"starts": 8,
"unique_viewers_approx": 9,
"views": 10
}
}
ETag
string
Example
"5a23d8"

If-None-Match matches the cached response; no body is sent.

ETag
string

The key is missing, malformed, revoked or expired.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
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"
}
WWW-Authenticate
string
Example
Bearer

The store’s plan has no API access, or the key lacks the scope.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Examples
{
"detail": "The API key does not carry the scope this route needs",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"required": [
"analytics:read"
],
"status": 403,
"title": "insufficient_scope",
"type": "https://api.octaneai.com/errors/insufficient_scope"
}

Not found

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
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.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
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.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
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"
}

Request limits could not be checked for the body, or the store’s details could not be read.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Examples
{
"detail": "A backing service is temporarily unavailable; retry shortly",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"retry_after": 2,
"status": 503,
"title": "dependency_unavailable",
"type": "https://api.octaneai.com/errors/dependency_unavailable"
}

The request timed out.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code; the Errors guide lists every one

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "The request timed out.",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 504,
"title": "timeout",
"type": "https://api.octaneai.com/errors/timeout"
}