Quiz image analysis
const url = 'https://api.octaneai.com/v1/quizzes/example/analytics/image_analysis?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/quizzes/example/analytics/image_analysis?tz=UTC' \ --header 'Authorization: Bearer <token>'What became of the photos shoppers sent to each Image analysis block of the quiz: the visits that reached the block’s page, sent a photo and had one read, the photos by outcome, the photos that used credits and the checks photos failed. Ranges are capped at 92 days.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path 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
One row per Image analysis block: the published version’s blocks in page order, then the blocks that took photos in the range but are no longer published; empty when there is none
object
Photos sent to the block: reads + retakes + refused + unavailable; previews are not counted
Photos that used credits: reads + retakes + refused
The block’s key; its description answers under the same key
The checks photos failed, the one with the most retakes first; their retakes add up to retakes
object
The check photos failed, in the words it had when the photo was sent; a removed check when the check can no longer be named
True when the published version still has a check with these words; false for a check reworded or removed since
Photos sent back for failing this check
The block’s label, else its key
The page the block is on
Photos that passed every check and were read
Photos refused for explicit nudity, hate symbols or graphic violence
True for a block that took photos in the range but is gone from the published version
Photos sent back because they failed a check
Visits that entered the block’s page; the page, not the block, so an upper bound when the block has a visibility rule
Visits where a photo passed every check and was read
Visits that sent at least one photo to the block
Photos that could not be read at that moment; they use no credits
How current the numbers are
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
The quiz
The days the numbers cover
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
Example
{ "blocks": [ { "attempts": 104, "charged_reads": 98, "component_key": "dog_photo", "failed_checks": [ { "check": "its whole body", "current": true, "retake_share": 70, "retakes": 21 }, { "check": "a sharp image", "current": false, "retake_share": 30, "retakes": 9 } ], "label": "Dog photo", "page_key": "dog", "page_title": "Your dog", "read_rate": 80, "reads": 66, "refused": 2, "removed": false, "retake_rate": 28.85, "retakes": 30, "send_rate": 66.67, "sessions_reached": 120, "sessions_read": 64, "sessions_sent": 80, "unavailable": 6 } ], "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 }, "quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7", "range": { "days": 7, "end": "2026-09-07", "start": "2026-09-01", "timezone": "UTC" }}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"}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; the Errors guide lists every one
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; 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"}