Skip to content

Compare quiz analytics

GET
/v1/analytics/quizzes
curl --request GET \
--url 'https://api.octaneai.com/v1/analytics/quizzes?limit=25&offset=0&sort=name&dir=asc&tz=UTC' \
--header 'Authorization: Bearer <token>'
q
Any of:
string
<= 200 characters
limit
Limit
integer
default: 25 >= 1 <= 1000
offset
Offset
integer
0
sort
Sort
string
default: name
Allowed values: name views starts completion_rate opt_ins orders revenue share
dir
Dir
string
default: asc
Allowed values: asc desc
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
if-none-match
Any of:
string
<= 1024 characters

Analytics for the range. ETag identifies the cached response.

Media typeapplication/json
AnalyticsQuizzes
object
data
required
Data
Array<object>
QuizRow
object
attributed_share
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
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
name
required
Name
string
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
phone_opt_ins
required
Phone Opt Ins

Visits where the shopper submitted a phone number

integer
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
revenue
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
status
required
AppStatus

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.

string
Allowed values: draft published deleted
views
required
Views

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

integer
dir
required
Dir
string
Allowed values: asc desc
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
has_more
required
Has More
boolean
limit
required
Limit
integer
offset
required
Offset
integer
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
sort
required
Sort
string
Allowed values: name views starts completion_rate opt_ins orders revenue share
total
required
Total

How many quizzes match the search, across every page

integer
Example
{
"data": [
{
"attributed_share": 40,
"avg_time_to_complete_ms": 42000,
"completion_rate": 62.5,
"completions": 5,
"email_opt_ins": 2,
"median_time_to_complete_ms": 40000,
"name": "Routine",
"orders": 1,
"phone_opt_ins": 1,
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"revenue": {
"amount": "12.50",
"currency": "USD"
},
"starts": 8,
"status": "published",
"views": 10
}
],
"dir": "asc",
"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
},
"has_more": false,
"limit": 25,
"offset": 0,
"range": {
"days": 7,
"end": "2026-09-07",
"start": "2026-09-01",
"timezone": "UTC"
},
"sort": "name",
"total": 1
}
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"
}

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