Store analytics summary
const url = 'https://api.octaneai.com/v1/analytics/summary?period=7d&tz=UTC';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/analytics/summary?period=7d&tz=UTC' \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Header Parameters
Section titled “Header Parameters”Responses
Section titled “Responses”Analytics for the range. ETag identifies the cached response.
object
Visits that finished the quiz: reached its last page and answered whatever that page requires
object
The count over the current period
The count over the period of the same length just before it
The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30
object
The last day whose numbers are settled: yesterday in the request’s timezone
True until every update behind these numbers has run once, so they may be incomplete
Email opt-ins plus phone opt-ins; a shopper who submitted both counts in each
object
The count over the current period
The count over the period of the same length just before it
The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30
Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed
object
The count over the current period
The count over the period of the same length just before it
The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30
The period of the same length just before it
object
Last day of the range, inclusive, in timezone
First day of the range, inclusive, in timezone
IANA name of the timezone the days are counted in; UTC unless the request named one
The current period: the last 7 or 30 days through today
object
Last day of the range, inclusive, in timezone
First day of the range, inclusive, in timezone
IANA name of the timezone the days are counted in; UTC unless the request named one
Checkout total of the linked orders in the store’s currency, shipping and tax included, refunds not subtracted
object
Visits where the shopper answered or stepped forward at least once
object
The count over the current period
The count over the period of the same length just before it
The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30
Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted
object
The count over the current period
The count over the period of the same length just before it
The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30
Example
{ "completions": { "current": 10, "delta_pct": 100, "previous": 5, "sparkline": [ 1, 2, 1, 2, 1, 2, 1 ] }, "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 }, "opt_ins": { "current": 10, "delta_pct": 100, "previous": 5, "sparkline": [ 1, 2, 1, 2, 1, 2, 1 ] }, "orders": { "current": 10, "delta_pct": 100, "previous": 5, "sparkline": [ 1, 2, 1, 2, 1, 2, 1 ] }, "period": "7d", "previous_range": { "days": 7, "end": "2026-08-31", "start": "2026-08-25", "timezone": "UTC" }, "range": { "days": 7, "end": "2026-09-07", "start": "2026-09-01", "timezone": "UTC" }, "revenue": { "current": { "amount": "12.50", "currency": "USD" }, "previous": { "amount": "0", "currency": "USD" }, "sparkline": [ { "amount": "12.50", "currency": "USD" }, { "amount": "0", "currency": "USD" }, { "amount": "0", "currency": "USD" }, { "amount": "0", "currency": "USD" }, { "amount": "0", "currency": "USD" }, { "amount": "0", "currency": "USD" }, { "amount": "0", "currency": "USD" } ] }, "starts": { "current": 10, "delta_pct": 100, "previous": 5, "sparkline": [ 1, 2, 1, 2, 1, 2, 1 ] }, "views": { "current": 10, "delta_pct": 100, "previous": 5, "sparkline": [ 1, 2, 1, 2, 1, 2, 1 ] }}Headers
Section titled “Headers”Example
"5a23d8"If-None-Match matches the cached response; no body is sent.
Headers
Section titled “Headers”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; the Errors guide lists every one
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; the Errors guide lists every one
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": [ "analytics: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"}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; the Errors guide lists every one
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; the Errors guide lists every one
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"}Request limits could not be checked for the body, or the store’s details could not be read.
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; the Errors guide lists every one
A stable URI naming the error, on this API’s public host
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"}{ "detail": "Request limits cannot be checked right now; retry shortly", "request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "retry_after": 2, "status": 503, "title": "limiter_unavailable", "type": "https://api.octaneai.com/errors/limiter_unavailable"}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; the Errors guide lists every one
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"}