{"openapi":"3.1.0","info":{"title":"Octane AI Merchant API","description":"The public REST API for a store's quizzes, analytics, shopper profiles, exports and webhooks.\n\nCreate a key on the dashboard (Developer > API keys) and send it as a Bearer token. See [Plans](#plans) for API availability.\n\n## Authentication and limits\n\n### Keys\n\nA store admin creates keys on the dashboard (Developer > API keys). A key is shown once and never again, and may carry an expiry chosen when it is created. Send it as a Bearer token:\n\n```\nAuthorization: Bearer oct_live_...\n```\n\nA key carries scopes chosen when it is created and changeable on the dashboard at any time (`quizzes:read`, `quizzes:write`, `quizzes:publish`, `analytics:read`, `experiments:read`, `experiments:write`, `profiles:read`, `webhooks:manage`); the default is read-only (`quizzes:read`, `analytics:read`). A route that needs a scope the key lacks answers `403 insufficient_scope` and names the scope it needs. A missing, malformed, revoked or expired key answers `401 invalid_api_key` with `WWW-Authenticate: Bearer`.\n\nRevoking a key or changing its scopes takes effect on the next request (within two minutes at the outside). To rotate, create the new key first, switch, then revoke the old one.\n\n### Plans\n\nThe API is available on the Plus and Enterprise plans. A key of a store on another plan answers `403 plan_required`; a plan change gates within five minutes.\n\n### Limits\n\nEvery key has a leaky bucket and every store has one larger bucket shared by all its keys: three times a key's on Plus, six times on Enterprise (`bot_multiplier`). A request costs 1 (reads), 2 (writes) or 3 (analytics) units; the bucket drains at a steady rate. An analytics call is charged 1 when the key is accepted and 2 more once an answer body is served, so a `304`, a `404` or a `422` costs 1. The key's bucket is charged first; a request the key's bucket rejects never touches the store's. `GET /v1/store` returns the three numbers in force (`capacity`, `leak_per_second`, `bot_multiplier`).\n\nEvery limited response carries:\n\n```\nRateLimit: limit=72, remaining=42, reset=2\nRateLimit-Policy: 72;w=6\n```\n\nThe headers are absent on a `401` and on a `403` answered before the limit is checked (`plan_required`, `insufficient_scope`). `remaining` is what the bucket can still take now and `reset` is the number of seconds until it is empty again; on an admitted request the headers describe the key's bucket, on a `429` they describe the bucket that rejected (the store's bucket reports its own, larger limit). Past the limit the answer is `429 rate_limited` with a `Retry-After` header (seconds, also in the body as `retry_after`). When limits cannot be checked at all, reads are admitted and writes and analytics bodies answer `503 limiter_unavailable` with `Retry-After: 2`.\n\n### Analytics caching\n\nAnalytics are cached for a short time. If the cache is unavailable or an answer is not ready after two seconds, the answer is computed directly and may be slower. Rate-limit checks still apply: if they cannot run, the request returns `503 limiter_unavailable`.\n\n## Pagination\n\nList endpoints page by cursor:\n\n```\nGET /v1/quizzes?limit=50\nGET /v1/quizzes?limit=50&cursor=<next_cursor from the previous page>\n```\n\n- `limit` is 20 by default, at least 1 and at most 100.\n- The response is `{\"data\": [...], \"has_more\": true, \"next_cursor\": \"...\"}`. When `has_more` is false, `next_cursor` is null.\n- A cursor is opaque and positional: it names a place in the list, never a filter. Send it back unchanged with the same filters. A cursor that was not issued by the API answers `422 validation_error`.\n- Lists are newest first and stable under inserts: a row created after the first page was read appears on a later request of the first page, never in the middle of a walk.\n- Quiz and version lists order by creation time, with quiz UUID and public version UUID respectively breaking ties. Profile lists order by last-seen time, then profile UUID. These lists accept limits from 1 through 100.\n- `POST /v1/profiles/search` pages the same way: send the same body with every page and the `cursor` and `limit` as query parameters; `total` is exact up to 5,000 and `total_capped` says when counting stopped there. Totals on sparse filters can take about a second on very large stores.\n- `/v1/analytics/quizzes` pages by offset (`offset`, `limit`, `sort`, `dir`, and `q`), with no cursor; its default limit is 25 and its maximum is 1000. It answers `data`, `has_more` and `total`, and echoes `limit`, `offset`, `sort` and `dir`.\n- A query parameter the route does not declare answers `422 validation_error` naming it.\n\nIds are prefixed strings (`quiz_...`, `ver_...`, `key_...`); an id of the wrong kind, of another store, or that does not exist answers `404 not_found`.\n\n## Errors\n\nEvery non-2xx response is an RFC 9457 problem body with the media type `application/problem+json`:\n\n```json\n{\n  \"type\": \"https://api.octaneai.com/errors/insufficient_scope\",\n  \"title\": \"insufficient_scope\",\n  \"detail\": \"The API key does not carry the scope this route needs\",\n  \"status\": 403,\n  \"request_id\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n  \"required\": [\"quizzes:read\"]\n}\n```\n\n`type` is a stable identifier on the API's host, `title` is the machine code, `detail` is for people, and `request_id` is the same value as the `Request-Id` response header. Quote the `request_id` when you write to support: it finds the request in the store's API logs.\n\n| status | title | when |\n|---|---|---|\n| 401 | `invalid_api_key` | the key is missing, malformed, revoked or expired; the response carries `WWW-Authenticate: Bearer` |\n| 403 | `plan_required` | the store's plan has no API access, or does not include the view; for a view, `feature` names it and `plan` the lowest plan that includes it |\n| 403 | `insufficient_scope` | the key lacks the scope named in `required` |\n| 403 | `experiments_disabled` | the store's plan does not include experiments; creating, changing, starting or republishing one is refused, reading and ending still answer |\n| 404 | `not_found` | no such resource for this store (an id of another store answers the same); `detail` is always `Not found` and never echoes the id |\n| 405 | `method_not_allowed` | the route exists, the method does not |\n| 409 | `conflict` | the request cannot apply in the resource's current state: publishing a version with no pages, or starting an export of a dataset that is still being built |\n| 409 | `endpoint_limit` | the store already has as many webhook endpoints as its plan allows |\n| 409 | `webhook_conflict` | the webhook request conflicts with the endpoint's state: its URL already has an endpoint configured differently, a test was sent to a disabled endpoint, or the event being redelivered was skipped while the plan was paused |\n| 409 | `ai_run_in_progress` | the AI assistant is editing the quiz right now; archive, unarchive or write again when it has finished |\n| 422 | `validation_error` | the request did not validate; `errors` lists `field` and `message`, a query parameter the route does not declare included |\n| 422 | `invalid_experiment` | the experiment cannot be set up or changed that way; `detail` says why |\n| 422 | `webhook_url_unsafe` | the webhook URL is not a public https address |\n| 422 | `webhook_pii_required` | an endpoint that subscribes to `identity.captured` must include contact details (`include_pii: true`) |\n| 4xx | `http_error`, `request_failed` | a refusal without a code of its own; `detail` says why |\n| 429 | `rate_limited` | the key's or the store's bucket is full; see `Retry-After` (also `retry_after` in the body). A store-level reject has already spent the key's own bucket for that request; there is no refund. |\n| 500 | `internal_error` | something on our side; send the `request_id` |\n| 502 | `upstream_error` | a service this request depends on failed; retry shortly |\n| 503 | `limiter_unavailable` | limits could not be checked for a write or analytics call; retry after `Retry-After` |\n| 503 | `dependency_unavailable` | a backing service is temporarily unavailable; retry after `Retry-After` |\n| 504 | `timeout` | the request ran past 30 seconds |\n\nThe body is the `Problem` schema of the OpenAPI document: the five fields above on every error, `required` on `insufficient_scope`, `feature` and `plan` on a `plan_required` view, `retry_after` on `429` and `503`, `errors` on `validation_error`.\n\n## Versioning\n\nThe version is in the path: `/v1`. Within `v1` the API only grows:\n\n- New endpoints, new optional parameters and new response fields may appear at any time. Clients must ignore fields they do not know.\n- Nothing is removed, renamed or retyped, and no input becomes required, without a deprecation window. A deprecated endpoint or field keeps working for at least 90 days and answers with `Deprecation` and `Sunset` headers naming the date; the replacement is available for the whole window.\n\nWithin `/v1` the API only grows; nothing is removed or renamed.","version":"v1","x-released":false},"servers":[{"url":"https://api.octaneai.com"}],"paths":{"/v1/store":{"get":{"tags":["store"],"summary":"The store behind the key","operationId":"store_get","responses":{"200":{"description":"The store behind the key: who it is, its currency and timezone, its plan class, limits, the key's scopes and credit usage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreResponse"},"example":{"name":"Bench store","shop_domain":"bench-store.myshopify.com","currency":"USD","timezone":"America/New_York","plan_class":"plus","limits":{"capacity":72,"leak_per_second":12,"bot_multiplier":3,"analytics_soft_ttl_seconds":60,"webhook_endpoints":5,"webhook_sends_per_second":50,"export_page_pause_ms":100},"scopes":["analytics:read","quizzes:read"],"credits":{"limit":50000,"used":12450,"overages_enabled":true,"threshold":60000}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["any"]}}}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1}}}}},"security":[{"ApiKey":[]}],"x-scope":"any","x-rate-class":"read"}},"/v1/quizzes":{"get":{"tags":["quizzes"],"summary":"List quizzes","operationId":"quizzes_list","security":[{"ApiKey":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["draft","published"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"archived","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"}},{"name":"kind","in":"query","required":false,"schema":{"enum":["quiz","popup","all"],"type":"string","description":"The record kind: quiz | popup | all","default":"quiz","title":"Kind"},"description":"The record kind: quiz | popup | all"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"const":"latest_version","type":"string"},{"type":"null"}],"title":"Include"}}],"responses":{"200":{"description":"One page of quiz summaries. include=latest_version adds the latest saved version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizList"},"example":{"data":[{"id":"quiz_2ccb8aebb27c463fa783cafb3bf858e0","kind":"quiz","name":"Skin routine finder","status":"published","archived":false,"published_version":"ver_15ce0be06b904d0180b1155da02a6c6f","page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-03T09:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_2ccb8aebb27c463fa783cafb3bf858e0","versions":"https://api.octaneai.com/v1/quizzes/quiz_2ccb8aebb27c463fa783cafb3bf858e0/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_2ccb8aebb27c463fa783cafb3bf858e0"},"latest_version":{"id":"ver_15ce0be06b904d0180b1155da02a6c6f","quiz_id":"quiz_2ccb8aebb27c463fa783cafb3bf858e0","number":2,"label":"Autumn launch","page_count":3,"published":true,"created_at":"2026-09-01T12:00:00Z"}},{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"quiz","name":"Find your routine","status":"draft","archived":false,"page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7","versions":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_7c9e6679742540de944be07fc1f90ae7"}}],"has_more":true,"next_cursor":"eyJhdCI6IjIwMjYtMDktMDFUMTI6MDA6MDBaIiwiaWQiOiI3YzllNjY3OSJ9"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:read","x-rate-class":"read"}},"/v1/quizzes/{quiz_id}":{"get":{"tags":["quizzes"],"summary":"Get a quiz","operationId":"quiz_get","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"200":{"description":"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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizDetail"},"example":{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"quiz","name":"Find your routine","status":"draft","archived":false,"page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7","versions":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_7c9e6679742540de944be07fc1f90ae7"},"structure":{"page_count":3,"pages":[{"page_key":"welcome","title":"Find your routine","role":"start","component_count":0},{"page_key":"skin","title":"Your skin","role":"question","component_count":2,"components":[{"component_key":"multi_choice-k3x9q","type":"Multiple Choice","kind":"choice_single","label":"How does your skin feel by noon?","required":true,"options":[{"option_id":"b1f4d2e0-6c3a-4f0e-9b2a-1d5c7e8f9a01","label":"Tight","scores":["dry"]},{"option_id":"c2a5e3f1-7d4b-4a1f-8c3b-2e6d8f9a0b12","label":"Shiny","scores":["oily"]}],"option_count":2},{"component_key":"sliders-p8m2t","type":"Slider","kind":"slider","label":"How many products do you use?","required":true,"range":{"min":1,"max":10,"step":1}}],"jumps":[{"rule_key":"jump_1","target_page_key":"results","condition":{"=":[{"var":"multi_choice-k3x9q"},"tight"]}}]},{"page_key":"results","title":"Your routine","role":"results","component_count":2,"components":[{"component_key":"heading-v7r1c","type":"Heading","kind":"copy","label":"Your routine"},{"component_key":"shopify_product_block-a4n8s","type":"Products","kind":"products","label":"Products","product_source":"points"}]}],"dimensions":[{"dimension_id":"dry","label":"Dry skin"},{"dimension_id":"oily","label":"Oily skin"}]}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:read","x-rate-class":"read"},"delete":{"tags":["quizzes"],"summary":"Soft-delete a quiz","operationId":"quiz_delete","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"204":{"description":"The quiz was soft-deleted."},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:write","x-rate-class":"write"}},"/v1/quizzes/{quiz_id}/archive":{"post":{"tags":["quizzes"],"summary":"Archive a quiz","operationId":"quiz_archive","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"200":{"description":"The quiz is archived.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizSummary"},"example":{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"quiz","name":"Find your routine","status":"draft","archived":true,"page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7","versions":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_7c9e6679742540de944be07fc1f90ae7"}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The AI assistant is editing the quiz; try again when it has finished.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/ai_run_in_progress","title":"ai_run_in_progress","detail":"The AI assistant is editing this quiz right now. Wait for it to finish, then save.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:write","x-rate-class":"write"}},"/v1/quizzes/{quiz_id}/unarchive":{"post":{"tags":["quizzes"],"summary":"Unarchive a quiz","operationId":"quiz_unarchive","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"200":{"description":"The quiz is no longer archived.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizSummary"},"example":{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"quiz","name":"Find your routine","status":"draft","archived":false,"page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7","versions":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_7c9e6679742540de944be07fc1f90ae7"}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The AI assistant is editing the quiz; try again when it has finished.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/ai_run_in_progress","title":"ai_run_in_progress","detail":"The AI assistant is editing this quiz right now. Wait for it to finish, then save.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:write","x-rate-class":"write"}},"/v1/quizzes/{quiz_id}/versions":{"get":{"tags":["quizzes"],"summary":"List saved versions","operationId":"quiz_versions_list","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"One page of saved version summaries, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionList"},"example":{"data":[{"id":"ver_15ce0be06b904d0180b1155da02a6c6f","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","number":2,"label":"Autumn launch","page_count":3,"published":false,"created_at":"2026-09-01T12:00:00Z"}],"has_more":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:read","x-rate-class":"read"},"post":{"tags":["quizzes"],"summary":"Save the draft as a version","operationId":"quiz_version_create","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCreate"}}}},"responses":{"201":{"description":"The draft was saved as a version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionSummary"},"example":{"id":"ver_15ce0be06b904d0180b1155da02a6c6f","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","number":2,"label":"Autumn launch","page_count":3,"published":false,"created_at":"2026-09-01T12:00:00Z"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:write","x-rate-class":"write"}},"/v1/quizzes/{quiz_id}/versions/{version_id}":{"get":{"tags":["quizzes"],"summary":"Get a saved version summary","operationId":"quiz_version_get","security":[{"ApiKey":[]}],"parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"200":{"description":"The saved version summary.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionSummary"},"example":{"id":"ver_15ce0be06b904d0180b1155da02a6c6f","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","number":2,"label":"Autumn launch","page_count":3,"published":false,"created_at":"2026-09-01T12:00:00Z"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:read","x-rate-class":"read"}},"/v1/quizzes/{quiz_id}/versions/{version_id}/publish":{"post":{"tags":["quizzes"],"summary":"Publish a saved version","description":"Publishing an older version_id is the rollback of what shoppers see; the draft is not changed.","operationId":"quiz_version_publish","security":[{"ApiKey":[]}],"parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}}],"responses":{"200":{"description":"The selected version is now published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizSummary"},"example":{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"quiz","name":"Find your routine","status":"published","archived":false,"published_version":"ver_15ce0be06b904d0180b1155da02a6c6f","page_count":3,"created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7","versions":"https://api.octaneai.com/v1/quizzes/quiz_7c9e6679742540de944be07fc1f90ae7/versions","dashboard":"https://editor.octaneai.com/bot_123/editor/quiz_7c9e6679742540de944be07fc1f90ae7"}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["quizzes:publish"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"The version is the variant of a running test.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"The variant must be a different version from the live one; end the test or publish its winner instead.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The selected version has no pages.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"Cannot publish a version with no pages; an app must have at least one page.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"quizzes:publish","x-rate-class":"write"}},"/v1/experiments":{"get":{"tags":["experiments"],"summary":"List experiments across the store","operationId":"experiments_list","security":[{"ApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Experiments, newest first; limit and offset page the list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentList"},"example":{"data":[{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:read","x-rate-class":"read"},"post":{"tags":["experiments"],"summary":"Create a draft experiment","operationId":"experiment_create","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentCreate"}}}},"responses":{"201":{"description":"A draft with the live version and one variant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A test is already open on this quiz; end it before starting another.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"A test is already open on this quiz; end it before starting another.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:write","x-rate-class":"write"}},"/v1/experiments/attention":{"get":{"tags":["experiments"],"summary":"Read experiment attention rows","operationId":"experiments_attention","responses":{"200":{"description":"What the store's experiments need from the merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentAttentionResponse"},"example":{"items":[]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}}}}},"security":[{"ApiKey":[]}],"x-scope":"experiments:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/experiments":{"get":{"tags":["experiments"],"summary":"List a quiz's experiments","operationId":"quiz_experiments_list","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Experiments, newest first; limit and offset page the list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentList"},"example":{"data":[{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:read","x-rate-class":"read"}},"/v1/experiments/{experiment_id}":{"get":{"tags":["experiments"],"summary":"Read an experiment and its events","operationId":"experiment_get","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}}],"responses":{"200":{"description":"The experiment, its two arms and its ordered events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentDetailResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}],"events":[]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:read","x-rate-class":"read"},"patch":{"tags":["experiments"],"summary":"Change experiment settings","operationId":"experiment_patch","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentPatch"}}}},"responses":{"200":{"description":"The experiment after the action. Start and end require confirm: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"This test has ended; its settings are frozen.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"This test has ended; its settings are frozen.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:write","x-rate-class":"write"}},"/v1/experiments/{experiment_id}/arms/{arm_id}":{"get":{"tags":["experiments"],"summary":"Read one arm of an experiment","operationId":"experiment_arm_get","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"arm_id","in":"path","required":true,"schema":{"type":"string","title":"Arm Id"}}],"responses":{"200":{"description":"One arm of the experiment: the version it renders and its share of the split.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentArmDetail"},"example":{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true,"experiment_id":"expt_7c9e6679742540de944be07fc1f90ae7"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:read","x-rate-class":"read"}},"/v1/experiments/{experiment_id}/results":{"get":{"tags":["experiments"],"summary":"Read the complete experiment results","operationId":"experiment_results","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}}],"responses":{"200":{"description":"The complete results, including decision evidence, gates, periods and attention context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResultsResponse"},"example":{"experiment":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]},"as_of":"2026-09-16T12:00:00Z","frozen":false,"attribution_window_days":7,"attribution_line":"Orders can arrive up to 7 days after a visit, so the newest visits look poorer on both versions for now.","arms":[],"header":{"testing":"Live version (v1) 50% vs Variant B (v2) 50%","current_read":"No completions on either version yet.","next":"Publishes the winner at the first clear result, once the test starts.","day_line":"Day 1"},"changes":[],"progress":{"day":1,"observed":{"control":0,"variant":0},"tier":"min_days","line":""},"gates":[{"key":"decision_metric","label":"Decision metric","met":true,"detail":"Completion rate is measured on both versions."},{"key":"min_days","label":"7-day minimum","met":false,"detail":"168 hours to go."},{"key":"enough_data","label":"Enough data","met":false,"detail":"No completions on either version yet."},{"key":"split_health","label":"Split healthy","met":true,"detail":"Not enough shoppers to check yet."},{"key":"protected","label":"Protected metrics","met":true,"detail":"No protected metric stands in the way."}],"metrics":[],"protection":[],"split":{"units_per_arm":[0,0],"expected":[0.5,0.5],"log_odds":0.0,"latched":false,"surfaced":false,"expected_share":0.5,"n":0},"periods":[],"events":[],"changed_since":false,"explainer_keys":["views","starts","completions","completionRate","experimentLift","experimentInterval"]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:read","x-rate-class":"analytics"}},"/v1/experiments/{experiment_id}/start":{"post":{"tags":["experiments"],"summary":"Start splitting shoppers","operationId":"experiment_start","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartRequest"}}}},"responses":{"200":{"description":"The experiment after the action. Start and end require confirm: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"Automatic decisions wait a full seven days, whatever the numbers look like earlier.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Only a draft test can be started.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"Only a draft test can be started.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:write","x-rate-class":"write"}},"/v1/experiments/{experiment_id}/arms/{arm_id}/republish":{"post":{"tags":["experiments"],"summary":"Republish an experiment arm","operationId":"experiment_arm_republish","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"arm_id","in":"path","required":true,"schema":{"type":"string","title":"Arm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepublishRequest"}}}},"responses":{"200":{"description":"The experiment after the action. Start and end require confirm: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"The variant must be a different version from the live one.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"The variant must be a different version from the live one.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"This test has ended.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"This test has ended.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:write","x-rate-class":"write"}},"/v1/experiments/{experiment_id}/end":{"post":{"tags":["experiments"],"summary":"End an experiment, optionally publishing a winner","operationId":"experiment_end","security":[{"ApiKey":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndRequest"}}}},"responses":{"200":{"description":"The experiment after the action. Start and end require confirm: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"},"example":{"id":"expt_7c9e6679742540de944be07fc1f90ae7","app_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Skip the email page","status":"draft","decision_metric":"completion_rate","decision_option":"when_clear","timezone":"UTC","fallback":"notify","ai_fallback":"when_clear","revenue_tiers":["added_from_quiz","shown_bought_later","bought_not_shown"],"protect_metrics":[],"weekly_digest":true,"long_run_reminders":true,"period":0,"period_reason":"started","revision":0,"created_at":"2026-09-16T12:00:00Z","updated_at":"2026-09-16T12:00:00Z","arms":[{"id":"arm_00000000000000000000000000000001","position":0,"label":"Live version","weight":1,"version_id":"ver_00000000000000000000000000000001","version_number":1,"is_control":true},{"id":"arm_00000000000000000000000000000002","position":1,"label":"Variant B","weight":1,"version_id":"ver_00000000000000000000000000000002","version_number":2,"is_control":false}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["experiments:write"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"That arm is not part of this test.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_experiment","title":"invalid_experiment","detail":"That arm is not part of this test.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"A test that never started has no winner.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"A test that never started has no winner.","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"experiments:write","x-rate-class":"write"}},"/v1/analytics/overview":{"get":{"tags":["analytics"],"summary":"Store analytics overview","operationId":"analytics_overview","security":[{"ApiKey":[]}],"parameters":[{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountOverview"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"filters":{},"series":[{"views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"consent_denied":0,"unique_viewers_approx":9,"orders":1,"orders_inside_window":1,"revenue":{"amount":"12.50","currency":"USD"},"avg_time_to_complete_ms":42000.0,"median_time_to_complete_ms":40000.0,"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"day":"2026-09-01"}],"totals":{"views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"consent_denied":0,"unique_viewers_approx":9,"orders":1,"orders_inside_window":1,"revenue":{"amount":"12.50","currency":"USD"},"avg_time_to_complete_ms":42000.0,"median_time_to_complete_ms":40000.0,"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"start_rate":80.0,"completion_rate":62.5,"aov":{"amount":"12.50","currency":"USD"},"median_quiz_to_checkout_ms":60000.0,"avg_quiz_to_checkout_ms":60000.0},"data_start":"2026-09-01"}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/analytics/breakdown":{"get":{"tags":["analytics"],"summary":"Store analytics by dimension","operationId":"analytics_breakdown","security":[{"ApiKey":[]}],"parameters":[{"name":"by","in":"query","required":true,"schema":{"enum":["channel","device","new_returning","country"],"type":"string","title":"By"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsBreakdown"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"by":"channel","filters":{},"rows":[{"value":"direct","views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"unique_viewers_approx":9}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/analytics/quizzes":{"get":{"tags":["analytics"],"summary":"Compare quiz analytics","operationId":"analytics_quizzes","security":[{"ApiKey":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["name","views","starts","completion_rate","opt_ins","orders","revenue","share"],"type":"string","default":"name","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"asc","title":"Dir"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsQuizzes"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"data":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Routine","status":"published","views":10,"starts":8,"completions":5,"completion_rate":62.5,"email_opt_ins":2,"phone_opt_ins":1,"orders":1,"revenue":{"amount":"12.50","currency":"USD"},"attributed_share":40.0,"avg_time_to_complete_ms":42000.0,"median_time_to_complete_ms":40000.0}],"has_more":false,"total":1,"limit":25,"offset":0,"sort":"name","dir":"asc"}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/analytics/products":{"get":{"tags":["analytics"],"summary":"Products attributed to the store's quizzes","operationId":"analytics_products","security":[{"ApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"bucket","in":"query","required":false,"schema":{"anyOf":[{"enum":["added_from_quiz","shown_bought_later","bought_not_shown"],"type":"string"},{"type":"null"}],"title":"Bucket"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["revenue","units","orders"],"type":"string","default":"revenue","title":"Sort"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsProducts"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"sort":"revenue","total_products":1,"line_revenue":{"amount":"12.50","currency":"USD"},"totals_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"orders_matched_by_email":1,"rows":[{"product_id":"gid://shopify/Product/1","title":"Serum","in_store":true,"quiz_name":"Routine","shown_on":{"page_key":"result","page_title":"Your match","block_key":"product-abc12"},"times_shown":5,"orders_approx":1,"units":1,"line_revenue":{"amount":"12.50","currency":"USD"},"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"had_variants":false}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/analytics/summary":{"get":{"tags":["analytics"],"summary":"Store analytics summary","operationId":"analytics_summary","security":[{"ApiKey":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["7d","30d"],"type":"string","default":"7d","title":"Period"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSummary"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"period":"7d","previous_range":{"start":"2026-08-25","end":"2026-08-31","days":7,"timezone":"UTC"},"views":{"current":10,"previous":5,"delta_pct":100.0,"sparkline":[1,2,1,2,1,2,1]},"starts":{"current":10,"previous":5,"delta_pct":100.0,"sparkline":[1,2,1,2,1,2,1]},"completions":{"current":10,"previous":5,"delta_pct":100.0,"sparkline":[1,2,1,2,1,2,1]},"opt_ins":{"current":10,"previous":5,"delta_pct":100.0,"sparkline":[1,2,1,2,1,2,1]},"orders":{"current":10,"previous":5,"delta_pct":100.0,"sparkline":[1,2,1,2,1,2,1]},"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"}]}}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/overview":{"get":{"tags":["analytics"],"summary":"Quiz analytics overview","operationId":"quiz_analytics_overview","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizOverview"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"filters":{},"series":[{"views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"consent_denied":0,"unique_viewers_approx":9,"orders":1,"orders_inside_window":1,"revenue":{"amount":"12.50","currency":"USD"},"avg_time_to_complete_ms":42000.0,"median_time_to_complete_ms":40000.0,"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"day":"2026-09-01"}],"totals":{"views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"consent_denied":0,"unique_viewers_approx":9,"orders":1,"orders_inside_window":1,"revenue":{"amount":"12.50","currency":"USD"},"avg_time_to_complete_ms":42000.0,"median_time_to_complete_ms":40000.0,"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"start_rate":80.0,"completion_rate":62.5,"aov":{"amount":"12.50","currency":"USD"},"median_quiz_to_checkout_ms":60000.0,"avg_quiz_to_checkout_ms":60000.0},"data_start":"2026-09-01","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","markers":[{"published_at":"2026-09-03T09:00:00Z","day":"2026-09-03","version_number":3,"approximate":false}],"live_since":"2026-09-01T00:00:00Z","live_since_approximate":false}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/funnel":{"get":{"tags":["analytics"],"summary":"Quiz completion funnel","operationId":"quiz_analytics_funnel","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsFunnel"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","filters":{},"views":10,"not_started":2,"starts":8,"completions":7,"in_progress":0,"pages":[{"page_key":"welcome","title":"Welcome","removed":false,"sessions_reached":8,"sessions_reached_by_jump":0,"sessions_continued":7,"sessions_went_back":0,"sessions_skipped":0,"sessions_dropped":1,"dropped_share_of_starts":12.5,"avg_time_on_page_ms":5000.0}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/paths":{"get":{"tags":["analytics"],"summary":"Quiz page-to-page journeys","operationId":"quiz_analytics_paths","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"cohort","in":"query","required":false,"schema":{"enum":["all","finished","left"],"type":"string","default":"all","title":"Cohort"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsPaths"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","filters":{},"cohort":"all","sessions":8,"data_start":"2026-09-01","nodes":[{"page_key":"welcome","title":"Welcome","removed":false,"entries":10,"entries_by_jump":1,"exits_closed":1,"exits_timed_out":1,"exits_restarted":2,"finished_here":0,"still_here":1,"median_time_on_page_ms":5000.0},{"page_key":"gone","title":"Page removed","removed":true,"entries":3,"entries_by_jump":3,"exits_closed":0,"exits_timed_out":0,"exits_restarted":0,"finished_here":3,"still_here":0}],"edges":[{"from_page_key":"welcome","to_page_key":"gone","cause":"jump","jump_rule_key":"jr_1","moves":3,"sessions_moved":3},{"from_page_key":"welcome","to_page_key":"welcome","cause":"restart","moves":2,"sessions_moved":2}],"other_paths":{"routes":1,"moves":1},"rules":[{"jump_rule_key":"jr_1","source_page_key":"welcome","fired":3,"source_entries":10}],"visibility_skips":[{"page_key":"skin","title":"Skin","removed":false,"times_hidden":3}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/breakdown":{"get":{"tags":["analytics"],"summary":"Quiz analytics by dimension","operationId":"quiz_analytics_breakdown","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"by","in":"query","required":true,"schema":{"enum":["channel","device","new_returning","country"],"type":"string","title":"By"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsBreakdown"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","by":"channel","filters":{},"rows":[{"value":"direct","views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"unique_viewers_approx":9}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/products":{"get":{"tags":["analytics"],"summary":"Products attributed to a quiz","operationId":"quiz_analytics_products","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"bucket","in":"query","required":false,"schema":{"anyOf":[{"enum":["added_from_quiz","shown_bought_later","bought_not_shown"],"type":"string"},{"type":"null"}],"title":"Bucket"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["revenue","units","orders"],"type":"string","default":"revenue","title":"Sort"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsProducts"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","sort":"revenue","total_products":1,"line_revenue":{"amount":"12.50","currency":"USD"},"totals_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"orders_matched_by_email":1,"rows":[{"product_id":"gid://shopify/Product/1","title":"Serum","in_store":true,"quiz_name":"Routine","shown_on":{"page_key":"result","page_title":"Your match","block_key":"product-abc12"},"times_shown":5,"orders_approx":1,"units":1,"line_revenue":{"amount":"12.50","currency":"USD"},"revenue_by_bucket":{"added_from_quiz":{"amount":"12.50","currency":"USD"},"shown_bought_later":{"amount":"0","currency":"USD"},"bought_not_shown":{"amount":"0","currency":"USD"}},"had_variants":false}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/answers":{"get":{"tags":["analytics"],"summary":"Quiz answer conversion","operationId":"quiz_analytics_answers","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"component_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Component Key"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsAnswers"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","filters":{},"currency":"USD","questions":[{"page_key":"skin","page_title":"Skin","component_key":"choice-abc12","question":"Skin type?","kind":"choice"}],"question":{"page_key":"skin","page_title":"Skin","component_key":"choice-abc12","question":"Skin type?","kind":"choice"},"answered":5,"options":[{"option_id":"opt-1","label":"Dry","kind":"image","image_url":"https://cdn.shopify.com/s/files/1/0001/skin-dry.jpg","removed":false,"chose":3,"chose_share":60.0,"completed":2,"completion_rate":66.67,"opted_in":1,"opt_in_rate":50.0,"buyers":1,"buyer_rate":50.0,"answer_orders":1,"answer_revenue":{"amount":"12.50","currency":"USD"}}],"buckets":[]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/image_analysis":{"get":{"tags":["analytics"],"summary":"Quiz image analysis","description":"What became of the photos shoppers sent to each Image analysis block of the quiz: the visits\nthat reached the block's page, sent a photo and had one read, the photos by outcome, the photos\nthat used credits and the checks photos failed. Ranges are capped at 92 days.","operationId":"quiz_analytics_image_analysis","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsImageAnalysis"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","filters":{},"blocks":[{"page_key":"dog","page_title":"Your dog","component_key":"dog_photo","label":"Dog photo","removed":false,"sessions_reached":120,"sessions_sent":80,"sessions_read":64,"send_rate":66.67,"read_rate":80.0,"attempts":104,"reads":66,"retakes":30,"refused":2,"unavailable":6,"retake_rate":28.85,"charged_reads":98,"failed_checks":[{"check":"its whole body","current":true,"retakes":21,"retake_share":70.0},{"check":"a sharp image","current":false,"retakes":9,"retake_share":30.0}]}]}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/traffic":{"get":{"tags":["analytics"],"summary":"Quiz traffic sources","operationId":"quiz_analytics_traffic","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"by","in":"query","required":true,"schema":{"enum":["referrer_host","utm_source","utm_medium","utm_campaign"],"type":"string","title":"By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":25,"title":"Limit"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"new_returning","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Analytics for the range. ETag identifies the cached response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsTraffic"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","by":"referrer_host","filters":{},"rows":[{"value":"google.com","views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1,"unique_viewers":9}],"other":{"value":"other","views":10,"starts":8,"completions":5,"email_opt_ins":2,"phone_opt_ins":1}}}},"headers":{"ETag":{"schema":{"type":"string"},"example":"\"5a23d8\""}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"304":{"description":"If-None-Match matches the cached response; no body is sent.","headers":{"ETag":{"schema":{"type":"string"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/quizzes/{quiz_id}/analytics/versions":{"get":{"tags":["analytics"],"summary":"Read quiz analytics by version","operationId":"quiz_analytics_versions","security":[{"ApiKey":[]}],"parameters":[{"name":"quiz_id","in":"path","required":true,"schema":{"type":"string","title":"Quiz Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day, inclusive, in tz; 29 days before `to` when absent","title":"From"},"description":"First day, inclusive, in tz; 29 days before `to` when absent"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Last day, inclusive, in tz; today when absent","title":"To"},"description":"Last day, inclusive, in tz; today when absent"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"UTC","title":"Tz"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Version analytics with public version ids.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsVersions"},"example":{"range":{"start":"2026-09-01","end":"2026-09-07","days":7,"timezone":"UTC"},"freshness":{"as_of":"2026-09-07T12:00:00Z","next_refresh_at":"2026-09-07T13:00:00Z","stale":false,"pending":false,"closed_days_through":"2026-09-06","today_live":true},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","versions":[],"explainer_keys":[]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits could not be checked for the body, or the store's details could not be read.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"limiter_unavailable":{"value":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}},"dependency_unavailable":{"value":{"type":"https://api.octaneai.com/errors/dependency_unavailable","title":"dependency_unavailable","detail":"A backing service is temporarily unavailable; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":2}}}}}},"304":{"description":"The version analytics have not changed."}},"x-scope":"analytics:read","x-rate-class":"analytics"}},"/v1/profiles":{"get":{"tags":["profiles"],"summary":"List or find shopper profiles","operationId":"profiles_list","security":[{"ApiKey":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Q"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"quiz_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"One page of shopper profiles. Contact data requires profiles:read and is never cached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileList"},"example":{"data":[{"id":"prof_50e1b7e458f14dfca7a2a5b971af2821","removed":false,"email":"shopper@example.com","phone":"+14155552671","shopify_customer_id":"gid://shopify/Customer/7208153301032","quizzes":[{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Find your routine"}],"first_seen_at":"2026-09-01T12:00:00Z","last_seen_at":"2026-09-01T12:00:00Z","sessions_count":1,"completed_count":1,"returning":false,"orders_count":1,"spent":{"amount":"79.97","currency":"USD"},"last_order_at":"2026-09-01T12:40:00Z"}],"has_more":false,"total":1,"returning_total":0}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["profiles:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"profiles:read","x-rate-class":"read"}},"/v1/profiles/search":{"post":{"tags":["profiles"],"summary":"Find shopper profiles by what they answered","operationId":"profiles_search","security":[{"ApiKey":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's next_cursor","title":"Cursor"},"description":"From the previous page's next_cursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSearch","examples":[{"match":"any_session","groups":[{"all":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"choice","op":"in","page_key":"skin","component_key":"image_choice-48su5","option_labels":["Dry"]},{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"number","op":"between","page_key":"skin","component_key":"number_input-re853","min":30,"max":50}]},{"all":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"points","op":"gt","dimension_id":"dry","value":10}]}]},{"match":"any_session","groups":[{"all":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"choice","op":"in","page_key":"skin","component_key":"image_choice-48su5","option_labels":["Dry"]},{"any":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"number","op":"gt","page_key":"skin","component_key":"number_input-re853","value":40},{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","kind":"text","op":"contains","page_key":"skin","component_key":"text_input-9k2ma","value":"eczema"}]}]}]}]}}}},"responses":{"200":{"description":"One page of the matching profiles, newest last-seen first; total is exact up to 5,000 and total_capped says when it stopped there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileList"},"example":{"data":[{"id":"prof_50e1b7e458f14dfca7a2a5b971af2821","removed":false,"email":"shopper@example.com","phone":"+14155552671","shopify_customer_id":"gid://shopify/Customer/7208153301032","quizzes":[{"id":"quiz_7c9e6679742540de944be07fc1f90ae7","name":"Find your routine"}],"first_seen_at":"2026-09-01T12:00:00Z","last_seen_at":"2026-09-01T12:00:00Z","sessions_count":1,"completed_count":1,"returning":false,"orders_count":1,"spent":{"amount":"79.97","currency":"USD"},"last_order_at":"2026-09-01T12:40:00Z"}],"has_more":false,"total":1,"returning_total":0,"total_capped":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["profiles:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"profiles:read","x-rate-class":"search"}},"/v1/profiles/{profile_id}":{"get":{"tags":["profiles"],"summary":"Get a shopper profile","operationId":"profile_get","security":[{"ApiKey":[]}],"parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"The shopper's identities, latest answers and results, sessions, and linked orders.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileDetail"},"example":{"id":"prof_50e1b7e458f14dfca7a2a5b971af2821","removed":false,"first_seen_at":"2026-09-01T12:00:00Z","last_seen_at":"2026-09-01T12:00:00Z","sessions_count":1,"completed_count":1,"returning":false,"orders_count":1,"spent":{"amount":"79.97","currency":"USD"},"last_order_at":"2026-09-01T12:40:00Z","identities":[{"kind":"email","value":"shopper@example.com","first_seen_at":"2026-09-01T12:00:00Z","last_seen_at":"2026-09-01T12:00:00Z","consent":true},{"kind":"phone","value":"+14155552671","first_seen_at":"2026-09-01T12:00:00Z","consent":false},{"kind":"shopify_customer_id","value":"gid://shopify/Customer/7208153301032","first_seen_at":"2026-09-01T12:00:00Z","last_seen_at":"2026-09-01T12:00:00Z","consent":false}],"returning_count":0,"quizzes_taken_count":1,"latest_results":[{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","version_number":2,"session_id":"sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","started_at":"2026-09-01T12:00:00Z","completed_at":"2026-09-01T12:04:00Z","answers":[{"page_key":"skin","page_title":"Your skin","component_key":"image_choice-48su5","question":"Skin type?","kind":"image","values":["Dry"],"value":"dry","image_urls":["https://cdn.shopify.com/s/files/1/0001/skin-dry.jpg"],"removed":false},{"page_key":"skin","page_title":"Your skin","component_key":"number_input-re853","question":"Your age","kind":"number","values":["42"],"value":42,"image_urls":[],"removed":false},{"page_key":"contact","page_title":"Stay in touch","component_key":"email_input-abc12","question":"Email","kind":"email","values":["shopper@example.com"],"value":"shopper@example.com","image_urls":[],"removed":false}],"points":[{"dimension_id":"dry","name":"Dry","total":14},{"dimension_id":"oily","name":"Oily","total":6}],"winner":{"dimension_id":"dry","name":"Dry","total":14},"points_total":20,"formulas":[{"page_key":"result","component_key":"formula-tidtk","label":"Hydration score","kind":"formula","value":72},{"page_key":"result","component_key":"value_table-k3x9q","label":"Shade","kind":"table","value_text":"Honey 11"}],"result_page":{"page_key":"result","title":"Your match","position":3,"page_count":3,"shown_products":[{"product_id":"gid://shopify/Product/8692896989320","variant_id":"gid://shopify/ProductVariant/40926435967056","block_key":"products-k3x9q","handle":"hydrating-serum","title":"Hydrating Serum","variant_title":"30 ml","price":39.0,"currency":"USD","image":"https://cdn.shopify.com/s/files/1/0001/serum.jpg"}]},"results_url":"https://shop.example.com/pages/find-your-routine#pqs=sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e"}],"sessions":[{"session_id":"sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","version_number":2,"status":"completed","returning":false,"started_at":"2026-09-01T12:00:00Z","completed_at":"2026-09-01T12:04:00Z","ended_at":"2026-09-01T12:04:00Z","pages_visited":3,"page_count":3,"last_page_key":"result","last_page_title":"Your match","last_page_position":3,"device_class":"mobile","channel":"email","country":"US","order":{"order_id":"5820135686408","order_name":"#1042","created_at":"2026-09-01T12:40:00Z","amount":{"amount":"79.97","currency":"USD"},"minutes_after":36,"matched_tier":"line_item_property"},"results_url":"https://shop.example.com/pages/find-your-routine#pqs=sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","opens":2,"last_opened_at":"2026-09-02T09:15:00Z","last_open_channel":"organic_social"}],"orders":[{"order_id":"5820135686408","order_name":"#1042","created_at":"2026-09-01T12:40:00Z","amount":{"amount":"79.97","currency":"USD"},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","session_id":"sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","matched_tier":"line_item_property"}],"share_orders":[{"order_id":"5820135686501","order_name":"#1057","created_at":"2026-09-02T10:02:00Z","amount":{"amount":"54.00","currency":"USD"},"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","session_id":"sess_2f6c1d0e4b7a4c5d8e9f0a1b2c3d4e5f","matched_tier":"cart_attribute","via":"retake","buyer_person_id":"prof_6a1f0c9d2e3b4a5c8d7e6f5a4b3c2d1e"}]}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["profiles:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"profiles:read","x-rate-class":"read"}},"/v1/exports":{"post":{"tags":["exports"],"summary":"Request an export","operationId":"export_create","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportCreate"}}}},"responses":{"202":{"description":"The export is queued. Poll urls.self until status is completed, then follow download_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportSummary"},"example":{"id":"exp_3f2504e04f8911d39a0c0305e82c3301","dataset":"profiles","format":"csv","source":"api","status":"pending","filters":{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","from":"2026-08-01","to":"2026-08-31"},"requested_at":"2026-09-01T12:00:00Z","expires_at":"2026-10-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301"}}}},"headers":{"Location":{"schema":{"type":"string"},"example":"https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301"}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["profiles:read | analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"An export of this dataset is still being built; wait for it to finish.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/conflict","title":"conflict","detail":"An export of this dataset is already being built; wait for it to finish","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"profiles:read | analytics:read","x-rate-class":"write"},"get":{"tags":["exports"],"summary":"List exports","operationId":"exports_list","security":[{"ApiKey":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"One page of the store's exports, newest first, without download links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportList"},"example":{"data":[{"id":"exp_3f2504e04f8911d39a0c0305e82c3301","dataset":"profiles","format":"csv","source":"api","status":"completed","filters":{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","from":"2026-08-01","to":"2026-08-31"},"row_count":1240,"bytes":58311,"requested_at":"2026-09-01T12:00:00Z","started_at":"2026-09-01T12:00:02Z","completed_at":"2026-09-01T12:00:09Z","expires_at":"2026-10-01T12:00:00Z","urls":{"self":"https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301"}}],"has_more":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["any"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"any","x-rate-class":"read"}},"/v1/exports/{export_id}":{"get":{"tags":["exports"],"summary":"Get an export and its download link","operationId":"export_get","security":[{"ApiKey":[]}],"parameters":[{"name":"export_id","in":"path","required":true,"schema":{"type":"string","title":"Export Id"}}],"responses":{"200":{"description":"The export; while completed, a download link fresh for 15 minutes. Never cached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportSummary"},"example":{"id":"exp_3f2504e04f8911d39a0c0305e82c3301","dataset":"profiles","format":"csv","source":"api","status":"completed","filters":{"quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","from":"2026-08-01","to":"2026-08-31"},"row_count":1240,"bytes":58311,"requested_at":"2026-09-01T12:00:00Z","started_at":"2026-09-01T12:00:02Z","completed_at":"2026-09-01T12:00:09Z","expires_at":"2026-10-01T12:00:00Z","download_url":"https://octaneai-api-exports.s3.amazonaws.com/exports/...?X-Amz-Expires=900&...","download_url_expires_at":"2026-09-01T12:15:09Z","urls":{"self":"https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301"}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["profiles:read | analytics:read"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"profiles:read | analytics:read","x-rate-class":"read"}},"/v1/webhooks":{"get":{"tags":["webhooks"],"summary":"List webhook endpoints","operationId":"webhooks_list","security":[{"ApiKey":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"One page of the store's endpoints; status reads paused_plan while the plan has no API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"},"example":{"data":[{"id":"whe_3f2504e04f8911d39a0c0305e82c3301","url":"https://hooks.example.com/octane","topics":["quiz.finished","profile.created"],"status":"active","include_pii":false,"description":"Order desk","created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:05Z","verified_at":"2026-09-01T12:00:05Z","consecutive_failures":0,"last_delivered_at":"2026-09-07T09:12:00Z"}],"has_more":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"read"},"post":{"tags":["webhooks"],"summary":"Create a webhook endpoint","operationId":"webhook_create","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"The new endpoint, pending until a test ping reaches it, and its secret (shown once here).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"},"example":{"secret":"whsec_AAECAwQFBgcICQoLDA0ODxAREhMUFRYX","endpoint":{"id":"whe_3f2504e04f8911d39a0c0305e82c3301","url":"https://hooks.example.com/octane","topics":["quiz.finished","profile.created"],"status":"pending","include_pii":false,"description":"Order desk","created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:00Z","consecutive_failures":0}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"200":{"description":"The existing endpoint with this URL and configuration, and its secret.","content":{"application/json":{"example":{"secret":"whsec_AAECAwQFBgcICQoLDA0ODxAREhMUFRYX","endpoint":{"id":"whe_3f2504e04f8911d39a0c0305e82c3301","url":"https://hooks.example.com/octane","topics":["quiz.finished","profile.created"],"status":"active","include_pii":false,"description":"Order desk","created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:05Z","verified_at":"2026-09-01T12:00:05Z","consecutive_failures":0,"last_delivered_at":"2026-09-07T09:12:00Z"}},"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}":{"get":{"tags":["webhooks"],"summary":"Get a webhook endpoint","operationId":"webhook_get","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSummary"},"example":{"id":"whe_3f2504e04f8911d39a0c0305e82c3301","url":"https://hooks.example.com/octane","topics":["quiz.finished","profile.created"],"status":"active","include_pii":false,"description":"Order desk","created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:05Z","verified_at":"2026-09-01T12:00:05Z","consecutive_failures":0,"last_delivered_at":"2026-09-07T09:12:00Z"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"read"},"patch":{"tags":["webhooks"],"summary":"Update webhook subscriptions or status","operationId":"webhook_update","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"The updated endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSummary"},"example":{"id":"whe_3f2504e04f8911d39a0c0305e82c3301","url":"https://hooks.example.com/octane","topics":["quiz.finished","profile.created"],"status":"active","include_pii":false,"description":"Order desk","created_at":"2026-09-01T12:00:00Z","updated_at":"2026-09-01T12:00:05Z","verified_at":"2026-09-01T12:00:05Z","consecutive_failures":0,"last_delivered_at":"2026-09-07T09:12:00Z"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"},"delete":{"tags":["webhooks"],"summary":"Delete a webhook endpoint and its deliveries","operationId":"webhook_delete","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"The endpoint and its deliveries are gone."},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}/reveal-secret":{"post":{"tags":["webhooks"],"summary":"Reveal the endpoint signing secret","operationId":"webhook_reveal_secret","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"The current signing secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecret"},"example":{"secret":"whsec_AAECAwQFBgcICQoLDA0ODxAREhMUFRYX"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}/rotate-secret":{"post":{"tags":["webhooks"],"summary":"Rotate the signing secret with 24-hour overlap","operationId":"webhook_rotate_secret","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"The new signing secret; the previous one keeps signing for 24 hours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecret"},"example":{"secret":"whsec_AAECAwQFBgcICQoLDA0ODxAREhMUFRYX"}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}/test":{"post":{"tags":["webhooks"],"summary":"Queue a signed ping","operationId":"webhook_test","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"202":{"description":"The queued ping delivery.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverySummary"},"example":{"id":"whd_15ce0be06b904d0180b1155da02a6c6f","endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301","event_id":"evt_15ce0be06b904d0180b1155da02a6c6f","topic":"ping","status":"pending","attempts":0,"next_attempt_at":"2026-09-07T09:12:00Z","created_at":"2026-09-07T09:11:58Z","payload":{"id":"evt_15ce0be06b904d0180b1155da02a6c6f","type":"ping","created":"2026-09-07T09:11:58Z","api_version":"v1","data":{"object":{"endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301"}}}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}/deliveries":{"get":{"tags":["webhooks"],"summary":"List deliveries and their stored payloads","description":"The stored payloads of an endpoint created with include_pii carry contact details, so reading them needs profiles:read as well.","operationId":"webhook_deliveries_list","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"One page of the endpoint's deliveries, newest first, each with the payload as it was signed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryList"},"example":{"data":[{"id":"whd_7c9e6679742540de944be07fc1f90ae7","endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301","event_id":"evt_6ba7b8109dad11d180b400c04fd430c8","topic":"quiz.finished","status":"delivered","attempts":1,"next_attempt_at":"2026-09-07T09:12:00Z","last_status_code":200,"last_response":"ok","created_at":"2026-09-07T09:11:58Z","delivered_at":"2026-09-07T09:12:00Z","payload":{"id":"evt_6ba7b8109dad11d180b400c04fd430c8","type":"quiz.finished","created":"2026-09-07T09:11:58Z","api_version":"v1","data":{"object":{"id":"sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","version_id":"ver_15ce0be06b904d0180b1155da02a6c6f","version_number":2,"visitor_id":"vis_0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d","started_at":"2026-09-07T09:08:00Z","ended_at":"2026-09-07T09:11:30Z","completed_at":"2026-09-07T09:11:30Z","channel":"email","device":{"class":"mobile","family":"iPhone","vendor":"Apple","model":"iPhone","browser":"Mobile Safari","browser_version":"17.5","os":"iOS","os_version":"17.5"},"country":"US","page_url":"https://shop.example.com/pages/quiz","utm_source":"newsletter","answers":{"image_choice-48su5":{"page_key":"skin","kind":"image","option_ids":["dry"],"value":"dry","values":["Dry"],"label":"Skin type?"}},"last_page":"result","answered_count":1,"formulas":[{"page_key":"result","component_key":"formula-tidtk","label":"Hydration score","kind":"formula","value":72}],"points":[{"dimension_id":"dry","name":"Dry","total":14}],"products_shown":[],"property_mappings":[]}}}},{"id":"whd_15ce0be06b904d0180b1155da02a6c6f","endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301","event_id":"evt_15ce0be06b904d0180b1155da02a6c6f","topic":"ping","status":"pending","attempts":0,"next_attempt_at":"2026-09-07T09:12:00Z","created_at":"2026-09-07T09:11:58Z","payload":{"id":"evt_15ce0be06b904d0180b1155da02a6c6f","type":"ping","created":"2026-09-07T09:11:58Z","api_version":"v1","data":{"object":{"endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301"}}}}],"has_more":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"read"}},"/v1/webhooks/{endpoint_id}/deliveries/{delivery_id}/redeliver":{"post":{"tags":["webhooks"],"summary":"Redeliver an event and replace its previous outcome","description":"The response carries the stored payload; on an endpoint created with include_pii it holds contact details, so redelivering needs profiles:read as well.","operationId":"webhook_redeliver","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"}}],"responses":{"202":{"description":"The delivery, queued again with its attempt history kept.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverySummary"},"example":{"id":"whd_7c9e6679742540de944be07fc1f90ae7","endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301","event_id":"evt_6ba7b8109dad11d180b400c04fd430c8","topic":"quiz.finished","status":"pending","attempts":1,"next_attempt_at":"2026-09-07T09:12:00Z","last_status_code":200,"last_response":"ok","created_at":"2026-09-07T09:11:58Z","payload":{"id":"evt_6ba7b8109dad11d180b400c04fd430c8","type":"quiz.finished","created":"2026-09-07T09:11:58Z","api_version":"v1","data":{"object":{"id":"sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e","quiz_id":"quiz_7c9e6679742540de944be07fc1f90ae7","quiz_name":"Find your routine","version_id":"ver_15ce0be06b904d0180b1155da02a6c6f","version_number":2,"visitor_id":"vis_0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d","started_at":"2026-09-07T09:08:00Z","ended_at":"2026-09-07T09:11:30Z","completed_at":"2026-09-07T09:11:30Z","channel":"email","device":{"class":"mobile","family":"iPhone","vendor":"Apple","model":"iPhone","browser":"Mobile Safari","browser_version":"17.5","os":"iOS","os_version":"17.5"},"country":"US","page_url":"https://shop.example.com/pages/quiz","utm_source":"newsletter","answers":{"image_choice-48su5":{"page_key":"skin","kind":"image","option_ids":["dry"],"value":"dry","values":["Dry"],"label":"Skin type?"}},"last_page":"result","answered_count":1,"formulas":[{"page_key":"result","component_key":"formula-tidtk","label":"Hydration score","kind":"formula","value":72}],"points":[{"dimension_id":"dry","name":"Dry","total":14}],"products_shown":[],"property_mappings":[]}}}}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/webhooks/{endpoint_id}/redeliver-failed":{"post":{"tags":["webhooks"],"summary":"Redeliver failed events since a timestamp","operationId":"webhook_redeliver_failed","security":[{"ApiKey":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRedeliverFailed","examples":[{"since":"2026-09-05T00:00:00Z"}]}}}},"responses":{"202":{"description":"How many failed deliveries were queued again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRedelivered"},"example":{"count":3}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Not found","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/not_found","title":"not_found","detail":"Not found","status":404,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Request limits cannot be checked right now; retry shortly.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/limiter_unavailable","title":"limiter_unavailable","detail":"Request limits cannot be checked right now; retry shortly","status":503,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The endpoint limit was reached or the requested change conflicts with the endpoint's state.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/webhook_conflict","title":"webhook_conflict","detail":"The endpoint cannot be changed in its current state","status":409,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"write"}},"/v1/events":{"get":{"tags":["webhooks"],"summary":"List distinct events retained for webhook delivery","operationId":"events_list","security":[{"ApiKey":[]}],"parameters":[{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"enum":["quiz.started","quiz.finished","quiz.abandoned","identity.captured","quiz.published","experiment.started","experiment.ended","profile.created","profile.updated","export.completed","webhook.endpoint.disabled"],"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"From the previous page's nextCursor","title":"Cursor"},"description":"From the previous page's nextCursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"One page of the store's retained events, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"},"example":{"data":[{"id":"evt_6ba7b8109dad11d180b400c04fd430c8","type":"quiz.finished","topic":"quiz.finished","endpoint_id":"whe_3f2504e04f8911d39a0c0305e82c3301","created":"2026-09-07T09:11:58Z"}],"has_more":false}}}},"401":{"description":"The key is missing, malformed, revoked or expired.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/invalid_api_key","title":"invalid_api_key","detail":"The API key is missing, malformed, revoked or expired","status":401,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer"}}},"403":{"description":"The store's plan has no API access, or the key lacks the scope.","content":{"application/problem+json":{"examples":{"plan_required":{"value":{"type":"https://api.octaneai.com/errors/plan_required","title":"plan_required","detail":"The merchant API is available on the Plus and Enterprise plans","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}},"insufficient_scope":{"value":{"type":"https://api.octaneai.com/errors/insufficient_scope","title":"insufficient_scope","detail":"The API key does not carry the scope this route needs","status":403,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","required":["webhooks:manage"]}}},"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The key's or the store's bucket is full; Retry-After says when to try again.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/rate_limited","title":"rate_limited","detail":"Too many requests","status":429,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","retry_after":1},"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A request parameter is invalid.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/validation_error","title":"validation_error","detail":"A request parameter is invalid.","status":422,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}},"504":{"description":"The request timed out.","content":{"application/problem+json":{"example":{"type":"https://api.octaneai.com/errors/timeout","title":"timeout","detail":"The request timed out.","status":504,"request_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"},"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-scope":"webhooks:manage","x-rate-class":"read"}}},"webhooks":{"quiz.started":{"post":{"tags":["webhooks"],"summary":"A shopper started a quiz","description":"Once per session, on the shopper's first move forward or first collected answer. Carries the start only: no answers and no identities.","operationId":"webhook_quiz_started","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookSessionStarted_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"quiz.finished":{"post":{"tags":["webhooks"],"summary":"A shopper finished a quiz","description":"About a minute after the session completes, with the answers, outcomes and products shown through that minute, and identities on endpoints with include_pii.","operationId":"webhook_quiz_finished","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookSession_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"quiz.abandoned":{"post":{"tags":["webhooks"],"summary":"A started session went idle","description":"When a started session has been idle for 30 minutes: the answers so far and the last page, no outcomes.","operationId":"webhook_quiz_abandoned","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookSessionSummary_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"identity.captured":{"post":{"tags":["webhooks"],"summary":"A shopper left an email or phone","description":"The moment a session writes an email or phone it had not written before; only to endpoints with include_pii. The session as of the capture, plus the identity.","operationId":"webhook_identity_captured","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookIdentityCaptured_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"quiz.published":{"post":{"tags":["webhooks"],"summary":"A quiz version was published","description":"When a version of a quiz goes live.","operationId":"webhook_quiz_published","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookPublished_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"experiment.started":{"post":{"tags":["webhooks"],"summary":"An experiment started","description":"The experiment as its start recorded it.","operationId":"webhook_experiment_started","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookExperiment_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"experiment.ended":{"post":{"tags":["webhooks"],"summary":"An experiment ended","description":"A manual end, with or without a winner, or the scheduler's own decision; a winner is already live.","operationId":"webhook_experiment_ended","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookExperiment_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"profile.created":{"post":{"tags":["webhooks"],"summary":"A shopper profile was created","description":"When an identity creates a new person; identities on endpoints with include_pii.","operationId":"webhook_profile_created","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookProfile_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"profile.updated":{"post":{"tags":["webhooks"],"summary":"A shopper profile changed","description":"When an identity is attached to, moved to or rewritten on a person; not when a shopper types a contact the person already has.","operationId":"webhook_profile_updated","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookProfile_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"export.completed":{"post":{"tags":["webhooks"],"summary":"An export finished","description":"Once when an export reaches completed. download_url is null: fetch urls.self with your key for a fresh link.","operationId":"webhook_export_completed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_ExportSummary_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"webhook.endpoint.disabled":{"post":{"tags":["webhooks"],"summary":"A webhook endpoint was disabled","description":"Sent to the store's other subscribed endpoints when one answered 410 or kept failing for five days.","operationId":"webhook_webhook_endpoint_disabled","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookDisabled_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}},"ping":{"post":{"tags":["webhooks"],"summary":"A test event","description":"Sent to the endpoint you ping; a successful ping activates an unverified endpoint. GET /v1/events does not list it.","operationId":"webhook_ping","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent_WebhookPing_"}}},"required":true},"responses":{"200":{"description":"Any 2xx within 10 seconds acknowledges the event"},"4XX":{"description":"410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it"},"5XX":{"description":"Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead"}}}}},"components":{"schemas":{"AccountOverview":{"properties":{"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"series":{"items":{"$ref":"#/components/schemas/OverviewPoint"},"type":"array","title":"Series"},"totals":{"$ref":"#/components/schemas/OverviewTotals"},"data_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Start","description":"The first day the store has analytics numbers: its first recorded visit or order, or the day analytics was last reset; null before any"}},"additionalProperties":false,"type":"object","required":["range","filters","freshness","series","totals","data_start"],"title":"AccountOverview"},"AiFallback":{"type":"string","enum":["when_clear","notify"],"title":"AiFallback","description":"What the test does once the AI has run ai_max_runs times without ending it: decide at the first\nclear result without the AI, or tell the merchant and wait."},"AiTrigger":{"type":"string","enum":["when_clear","on_date"],"title":"AiTrigger"},"AiVerdict":{"type":"string","enum":["publish","keep_running","no_change"],"title":"AiVerdict","description":"What the AI decided last, as the trusted decide path accepted it; a refused verdict lives on the\ntimeline only."},"AnalyticsAnswers":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"ISO 4217 code of the amounts: the one most linked orders carry, else the store's; null when neither is known"},"questions":{"items":{"$ref":"#/components/schemas/AnswersQuestion"},"type":"array","title":"Questions"},"question":{"anyOf":[{"$ref":"#/components/schemas/AnswersQuestion"},{"type":"null"}],"description":"The question reported; null when the published version has no answerable question"},"answered":{"type":"integer","title":"Answered","description":"Visits that answered the question in the range"},"options":{"items":{"$ref":"#/components/schemas/AnswerOptionRow"},"type":"array","title":"Options","description":"A choice question's rows, one per option; empty for a number question"},"buckets":{"items":{"$ref":"#/components/schemas/AnswerBucketRow"},"type":"array","title":"Buckets","description":"A number question's rows, one per band of values; empty for a choice question"},"summary":{"anyOf":[{"$ref":"#/components/schemas/AnswerNumericSummary"},{"type":"null"}],"description":"A number question's answers as numbers; null for a choice question or while nobody answered"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","filters","freshness","currency","questions","question","answered","options","buckets","summary"],"title":"AnalyticsAnswers"},"AnalyticsBreakdown":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"The quiz; null for every quiz of the store"},"by":{"type":"string","enum":["channel","device","new_returning","country"],"title":"By","description":"The dimension the rows are grouped by"},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"rows":{"items":{"$ref":"#/components/schemas/BreakdownRow"},"type":"array","title":"Rows"}},"additionalProperties":false,"type":"object","required":["quiz_id","by","range","filters","freshness","rows"],"title":"AnalyticsBreakdown"},"AnalyticsFilters":{"properties":{"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel","description":"The channel filter applied: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results; null for all"},"device":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device","description":"The device filter applied: mobile | tablet | desktop; null for all"},"new_returning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Returning","description":"The visitor filter applied: new | returning; null for all"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The country filter applied, ISO 3166-1 alpha-2; null for all"}},"additionalProperties":false,"type":"object","required":["channel","device","new_returning","country"],"title":"AnalyticsFilters"},"AnalyticsFunnel":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"views":{"type":"integer","title":"Views","description":"Sessions that opened the quiz inside the range, plus the cohort itself."},"not_started":{"type":"integer","title":"Not Started","description":"views minus starts: sessions that viewed the quiz but had neither answered nor stepped forward by the end of the range."},"starts":{"type":"integer","title":"Starts","description":"The cohort: sessions whose first interaction with the quiz (the first answer or the first step forward, whichever comes first) fell inside the range, each followed to its end. starts == completions + sum(sessions_dropped) + in_progress, where pages are served."},"completions":{"type":"integer","title":"Completions","description":"Cohort sessions that finished the quiz, even past the range end."},"in_progress":{"type":"integer","title":"In Progress","description":"Cohort sessions that have neither completed nor ended yet."},"pages":{"anyOf":[{"items":{"$ref":"#/components/schemas/FunnelPage"},"type":"array"},{"type":"null"}],"title":"Pages","description":"Null on a plan that does not include the funnel by page: the counts are served, the pages are not."}},"additionalProperties":false,"type":"object","required":["quiz_id","range","filters","freshness","views","not_started","starts","completions","in_progress","pages"],"title":"AnalyticsFunnel"},"AnalyticsImageAnalysis":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange","description":"The days the numbers cover"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters","description":"The visit filters applied"},"freshness":{"$ref":"#/components/schemas/Freshness","description":"How current the numbers are"},"blocks":{"items":{"$ref":"#/components/schemas/ImageBlockRow"},"type":"array","title":"Blocks","description":"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"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","filters","freshness","blocks"],"title":"AnalyticsImageAnalysis"},"AnalyticsPaths":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"cohort":{"type":"string","enum":["all","finished","left"],"title":"Cohort","description":"Which visits are counted: all | finished (completed the quiz) | left (ended without completing)"},"freshness":{"$ref":"#/components/schemas/Freshness"},"sessions":{"type":"integer","title":"Sessions","description":"Visits counted in this view: the cohort's visits that opened at least one page in the range"},"data_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Start","description":"The first day the store has analytics numbers: its first recorded visit or order, or the day analytics was last reset; null before any"},"nodes":{"items":{"$ref":"#/components/schemas/PathNode"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/PathEdge"},"type":"array","title":"Edges","description":"The observed moves between pages: the 50 busiest and every jump; the rest are in other_paths"},"other_paths":{"$ref":"#/components/schemas/OtherPaths"},"rules":{"items":{"$ref":"#/components/schemas/PathRule"},"type":"array","title":"Rules","description":"Every jump rule of the published version, fired or not, and any other seen in the range"},"visibility_skips":{"items":{"$ref":"#/components/schemas/PathVisibilitySkip"},"type":"array","title":"Visibility Skips"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","filters","cohort","freshness","sessions","data_start","nodes","edges","other_paths","rules","visibility_skips"],"title":"AnalyticsPaths"},"AnalyticsProducts":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"The quiz; null for every quiz of the store"},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"freshness":{"$ref":"#/components/schemas/Freshness"},"bucket":{"anyOf":[{"type":"string","enum":["added_from_quiz","shown_bought_later","bought_not_shown"]},{"type":"null"}],"title":"Bucket","description":"The how-it-was-bought group the rows and totals are narrowed to; null for all"},"sort":{"type":"string","enum":["revenue","units","orders"],"title":"Sort"},"total_products":{"type":"integer","title":"Total Products","description":"How many different products appear in linked orders in the range, within bucket when set"},"line_revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"The revenue of every product in the range within bucket when set, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"},"totals_by_bucket":{"$ref":"#/components/schemas/ProductBucketMoney","description":"The revenue of every product in the range split by how it reached the cart, whatever bucket is set"},"orders_matched_by_email":{"type":"integer","title":"Orders Matched By Email","description":"Linked orders in the range matched by the email the shopper gave"},"rows":{"items":{"$ref":"#/components/schemas/ProductRow"},"type":"array","title":"Rows"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","freshness","bucket","sort","total_products","line_revenue","totals_by_bucket","orders_matched_by_email","rows"],"title":"AnalyticsProducts"},"AnalyticsQuizzes":{"properties":{"range":{"$ref":"#/components/schemas/AnalyticsRange"},"freshness":{"$ref":"#/components/schemas/Freshness"},"data":{"items":{"$ref":"#/components/schemas/QuizRow"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"total":{"type":"integer","title":"Total","description":"How many quizzes match the search, across every page"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"sort":{"type":"string","enum":["name","views","starts","completion_rate","opt_ins","orders","revenue","share"],"title":"Sort"},"dir":{"type":"string","enum":["asc","desc"],"title":"Dir"}},"additionalProperties":false,"type":"object","required":["range","freshness","data","has_more","total","limit","offset","sort","dir"],"title":"AnalyticsQuizzes"},"AnalyticsRange":{"properties":{"start":{"type":"string","format":"date","title":"Start","description":"First day of the range, inclusive, in timezone"},"end":{"type":"string","format":"date","title":"End","description":"Last day of the range, inclusive, in timezone"},"days":{"type":"integer","title":"Days"},"timezone":{"type":"string","title":"Timezone","description":"IANA name of the timezone the days are counted in; UTC unless the request named one"}},"additionalProperties":false,"type":"object","required":["start","end","days","timezone"],"title":"AnalyticsRange"},"AnalyticsSummary":{"properties":{"period":{"type":"string","enum":["7d","30d"],"title":"Period"},"range":{"$ref":"#/components/schemas/AnalyticsRange","description":"The current period: the last 7 or 30 days through today"},"previous_range":{"$ref":"#/components/schemas/AnalyticsRange","description":"The period of the same length just before it"},"freshness":{"$ref":"#/components/schemas/Freshness"},"views":{"$ref":"#/components/schemas/SummaryCount","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"$ref":"#/components/schemas/SummaryCount","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"$ref":"#/components/schemas/SummaryCount","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"opt_ins":{"$ref":"#/components/schemas/SummaryCount","description":"Email opt-ins plus phone opt-ins; a shopper who submitted both counts in each"},"orders":{"$ref":"#/components/schemas/SummaryCount","description":"Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed"},"revenue":{"$ref":"#/components/schemas/SummaryMoney","description":"Checkout total of the linked orders in the store's currency, shipping and tax included, refunds not subtracted"}},"additionalProperties":false,"type":"object","required":["period","range","previous_range","freshness","views","starts","completions","opt_ins","orders","revenue"],"title":"AnalyticsSummary"},"AnalyticsTraffic":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"The quiz; null for every quiz of the store"},"by":{"type":"string","enum":["referrer_host","utm_source","utm_medium","utm_campaign"],"title":"By","description":"What the rows are grouped by"},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"rows":{"items":{"$ref":"#/components/schemas/TrafficRow"},"type":"array","title":"Rows"},"other":{"anyOf":[{"$ref":"#/components/schemas/TrafficRow"},{"type":"null"}],"description":"Every source past limit summed into one row; null when there are none"}},"additionalProperties":false,"type":"object","required":["quiz_id","by","range","filters","freshness","rows","other"],"title":"AnalyticsTraffic"},"AnalyticsVersion":{"properties":{"version_id":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Version Id"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The version's number as the editor shows it (v14); null once the version is gone"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At","description":"When the version was first published, UTC ISO 8601; null once the version is gone"},"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"Completions as a percentage of starts, 0 to 100; null without starts"},"orders":{"type":"integer","title":"Orders","description":"Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed"},"revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of the linked orders in the store's currency, shipping and tax included, refunds not subtracted; null without linked orders"}},"additionalProperties":false,"type":"object","required":["version_id","version_number","published_at","views","starts","completions","completion_rate","orders","revenue"],"title":"AnalyticsVersion"},"AnalyticsVersions":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"freshness":{"$ref":"#/components/schemas/Freshness"},"versions":{"items":{"$ref":"#/components/schemas/AnalyticsVersion"},"type":"array","title":"Versions","description":"One row per version with activity in the range, newest first; activity of an unknown version last"},"explainer_keys":{"items":{"type":"string"},"type":"array","title":"Explainer Keys","description":"The camelCase names of the help topics that explain the numbers in this response"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","freshness","versions","explainer_keys"],"title":"AnalyticsVersions"},"AnswerBucketRow":{"properties":{"label":{"type":"string","title":"Label"},"low":{"type":"number","title":"Low","description":"The band's lowest value, included"},"high":{"type":"number","title":"High","description":"The band's highest value, excluded except on the last band; equal to low on a one-step band"},"answered":{"type":"integer","title":"Answered","description":"Visits whose answer fell in this band"},"answered_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Answered Share","description":"answered as a percentage of the visits that answered the question, 0 to 100; null when none did"},"completed":{"type":"integer","title":"Completed","description":"Of this row's visits, how many finished the quiz"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"completed as a percentage of this row's visits, 0 to 100; null without visits"},"opted_in":{"type":"integer","title":"Opted In","description":"Of this row's visits, how many submitted an email address or phone number"},"opt_in_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opt In Rate","description":"opted_in as a percentage of this row's visits, 0 to 100; null without visits"},"buyers":{"type":"integer","title":"Buyers","description":"Of this row's visits, how many were followed by a linked order, even after the range ended"},"buyer_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Buyer Rate","description":"buyers as a percentage of this row's visits, 0 to 100; null without visits"},"answer_orders":{"type":"integer","title":"Answer Orders","description":"Linked orders that followed this row's visits; a visit with several answers brings its orders to each"},"answer_revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of those orders in currency, shipping and tax included, refunds not subtracted; null when no currency is known to label it with"}},"additionalProperties":false,"type":"object","required":["label","low","high","answered","answered_share","completed","completion_rate","opted_in","opt_in_rate","buyers","buyer_rate","answer_orders","answer_revenue"],"title":"AnswerBucketRow"},"AnswerNumericSummary":{"properties":{"count":{"type":"integer","title":"Count"},"min":{"type":"number","title":"Min"},"max":{"type":"number","title":"Max"},"mean":{"type":"number","title":"Mean"},"median":{"type":"number","title":"Median"}},"additionalProperties":false,"type":"object","required":["count","min","max","mean","median"],"title":"AnswerNumericSummary"},"AnswerOptionRow":{"properties":{"option_id":{"type":"string","title":"Option Id"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","enum":["choice","image"],"title":"Kind","description":"choice | image (an image choice)"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"removed":{"type":"boolean","title":"Removed","description":"True for an option that has answers but is gone from the published version; its id is its label"},"chose":{"type":"integer","title":"Chose","description":"Visits that picked this option; a multi-select visit counts under each option it picked"},"chose_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Chose Share","description":"chose as a percentage of the visits that answered the question, 0 to 100; null when none did"},"completed":{"type":"integer","title":"Completed","description":"Of this row's visits, how many finished the quiz"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"completed as a percentage of this row's visits, 0 to 100; null without visits"},"opted_in":{"type":"integer","title":"Opted In","description":"Of this row's visits, how many submitted an email address or phone number"},"opt_in_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opt In Rate","description":"opted_in as a percentage of this row's visits, 0 to 100; null without visits"},"buyers":{"type":"integer","title":"Buyers","description":"Of this row's visits, how many were followed by a linked order, even after the range ended"},"buyer_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Buyer Rate","description":"buyers as a percentage of this row's visits, 0 to 100; null without visits"},"answer_orders":{"type":"integer","title":"Answer Orders","description":"Linked orders that followed this row's visits; a visit with several answers brings its orders to each"},"answer_revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of those orders in currency, shipping and tax included, refunds not subtracted; null when no currency is known to label it with"}},"additionalProperties":false,"type":"object","required":["option_id","label","kind","image_url","removed","chose","chose_share","completed","completion_rate","opted_in","opt_in_rate","buyers","buyer_rate","answer_orders","answer_revenue"],"title":"AnswerOptionRow"},"AnswersQuestion":{"properties":{"page_key":{"type":"string","title":"Page Key"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"},"component_key":{"type":"string","title":"Component Key"},"question":{"type":"string","title":"Question"},"kind":{"type":"string","enum":["choice","number"],"title":"Kind","description":"choice: answered by options | number: a slider or number input, answered in bands of values"}},"additionalProperties":false,"type":"object","required":["page_key","page_title","component_key","question","kind"],"title":"AnswersQuestion"},"AppKind":{"type":"string","enum":["quiz","popup"],"title":"AppKind","description":"What a stored app is: a quiz the store embeds, or a popup the store shows over its pages. One\nspelling everywhere: the ``phoenix.apps.kind`` column, the wire ``kind`` field, the TS mirror."},"AppStatus":{"type":"string","enum":["draft","published","deleted"],"title":"AppStatus","description":"Publish-lifecycle status for an app.\nDRAFT: editable; not served to the storefront embed.\nPUBLISHED: a version is live; the embed serves the published snapshot.\nDELETED: soft-deleted; hidden from the dashboard list and the embed, but the\nrow (pages, versions) is retained for recoverability. The column is a plain\nVARCHAR (native_enum=False), so this value needs no migration."},"BreakdownRow":{"properties":{"value":{"type":"string","title":"Value","description":"The group: a channel (direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results), a device (mobile | tablet | desktop), new | returning, or a country code, per the breakdown's by"},"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"unique_viewers_approx":{"type":"integer","title":"Unique Viewers Approx","description":"An estimate of how many different people opened the quiz; someone who came back counts once"}},"additionalProperties":false,"type":"object","required":["value","views","starts","completions","email_opt_ins","phone_opt_ins","unique_viewers_approx"],"title":"BreakdownRow"},"DecisionOption":{"type":"string","enum":["manual","when_clear","on_date","ai"],"title":"DecisionOption","description":"manual: the merchant decides. when_clear: publish at the first clear result. on_date: decide on\na date. ai: the AI decides."},"DeliveryList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DeliverySummary"},"type":"array","title":"Data","description":"The deliveries, newest first"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"DeliveryList"},"DeliveryPayload":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"{object} exactly as it was signed and sent"}},"additionalProperties":false,"type":"object","required":["id","type","created","api_version","data"],"title":"DeliveryPayload"},"DeliverySummary":{"properties":{"id":{"type":"string","pattern":"^whd_[0-9a-f]{32}$","title":"Id","description":"The delivery: one event to one endpoint","examples":["whd_7c9e6679742540de944be07fc1f90ae7"]},"endpoint_id":{"type":"string","pattern":"^whe_[0-9a-f]{32}$","title":"Endpoint Id","description":"The endpoint","examples":["whe_7c9e6679742540de944be07fc1f90ae7"]},"event_id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Event Id","description":"The event, the webhook-id header","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"topic":{"type":"string","title":"Topic","description":"quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"status":{"type":"string","enum":["pending","retrying","delivering","delivered","dead"],"title":"Status","description":"pending | retrying | delivering | delivered | dead"},"attempts":{"type":"integer","title":"Attempts","description":"How many times it was sent"},"next_attempt_at":{"type":"string","format":"date-time","title":"Next Attempt At","description":"When it is sent next"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code","description":"The HTTP status of the last attempt; null when none was received"},"last_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Response","description":"The start of the last response body, at most 1024 bytes"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error","description":"Why the last attempt failed without a status, or why the delivery died; null otherwise"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the event was queued for this endpoint"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At","description":"When it was delivered; null until then"},"payload":{"anyOf":[{"$ref":"#/components/schemas/DeliveryPayload"},{"type":"null"}],"description":"The envelope as signed; null until the first attempt builds it"}},"additionalProperties":false,"type":"object","required":["id","endpoint_id","event_id","topic","status","attempts","next_attempt_at","last_status_code","last_response","last_error","created_at","delivered_at","payload"],"title":"DeliverySummary"},"EndRequest":{"properties":{"confirm":{"type":"boolean","const":true,"title":"Confirm"},"winner_arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Winner Arm Id","description":"The arm to keep or publish as the winner; leave it out to end with no winner"}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"EndRequest"},"EndedBy":{"type":"string","enum":["manual","auto","ai","fallback_revert"],"title":"EndedBy"},"EventList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EventSummary"},"type":"array","title":"Data","description":"The events, newest first"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"EventList"},"EventSummary":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event, the webhook-id header","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled"},"topic":{"type":"string","enum":["quiz.started","quiz.finished","quiz.abandoned","identity.captured","quiz.published","experiment.started","experiment.ended","profile.created","profile.updated","export.completed","webhook.endpoint.disabled"],"title":"Topic","description":"The topic"},"endpoint_id":{"type":"string","pattern":"^whe_[0-9a-f]{32}$","title":"Endpoint Id","description":"The first endpoint the event was queued for","examples":["whe_7c9e6679742540de944be07fc1f90ae7"]},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"}},"additionalProperties":false,"type":"object","required":["id","type","topic","endpoint_id","created"],"title":"EventSummary"},"ExperimentArmCounts":{"properties":{"arm_id":{"type":"string","pattern":"^arm_[0-9a-f]{32}$","title":"Arm Id","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},"label":{"type":"string","title":"Label"},"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"version_number":{"type":"integer","title":"Version Number"},"weight":{"type":"integer","title":"Weight","description":"The arm's share of the split, a whole number weighed against the other arm's"},"is_control":{"type":"boolean","title":"Is Control"},"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"Completions as a percentage of starts, 0 to 100; null without starts"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"orders":{"type":"integer","title":"Orders","description":"Orders linked to these visits with a line in a revenue kind the test counts"},"visits_with_order":{"type":"integer","title":"Visits With Order","description":"Visits followed by at least one such order"},"revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Product revenue of those visits in all three kinds, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"},"revenue_by_bucket":{"$ref":"#/components/schemas/ProductBucketMoney","description":"That revenue split by how each item reached the cart"},"counted_revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"The part of revenue in the kinds the test counts, what the money metrics read; null when no currency is known to label it with"},"assignment_units":{"type":"integer","title":"Assignment Units","description":"Distinct shoppers assigned to this version; a shopper without cookies counts once per visit"}},"additionalProperties":false,"type":"object","required":["arm_id","label","version_id","version_number","weight","is_control","views","starts","completions","completion_rate","email_opt_ins","phone_opt_ins","orders","visits_with_order","revenue","revenue_by_bucket","counted_revenue","assignment_units"],"title":"ExperimentArmCounts"},"ExperimentArmDetail":{"properties":{"id":{"type":"string","pattern":"^arm_[0-9a-f]{32}$","title":"Id","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},"position":{"type":"integer","title":"Position","description":"0 for the live version, 1 for the variant"},"label":{"type":"string","title":"Label"},"weight":{"type":"integer","title":"Weight","description":"The arm's share of the split, a whole number weighed against the other arm's"},"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"version_number":{"type":"integer","title":"Version Number"},"is_control":{"type":"boolean","title":"Is Control"},"experiment_id":{"type":"string","pattern":"^expt_[0-9a-f]{32}$","title":"Experiment Id","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]}},"additionalProperties":false,"type":"object","required":["id","position","label","weight","version_id","version_number","is_control","experiment_id"],"title":"ExperimentArmDetail","description":"One arm on its own: the arm as the experiment lists it, plus the experiment it belongs to."},"ExperimentArmReadout":{"properties":{"arm_id":{"type":"string","pattern":"^arm_[0-9a-f]{32}$","title":"Arm Id","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},"label":{"type":"string","title":"Label"},"n":{"type":"integer","title":"N","description":"The visits the metric is read on: starts for completion and opt-in rates, visits for the rest"},"events":{"type":"integer","title":"Events","description":"How many of those did what the metric counts; for the money metrics, the distinct counted orders"},"mean":{"type":"number","title":"Mean","description":"The metric on this version: a rate from 0 to 1, or revenue per visit or per order in the store's currency"},"se":{"type":"number","title":"Se","description":"The standard error of mean, with each returning shopper's visits grouped"},"design_effect":{"type":"number","title":"Design Effect","description":"How much returning shoppers widened the range; 1 means repeats made no difference"},"raw_money":{"type":"number","title":"Raw Money","description":"Counted revenue before the cap on unusually large visits, in the store's currency; 0 for a rate"},"capped_money":{"type":"number","title":"Capped Money","description":"Counted revenue with unusually large visits counted at the cap, in the store's currency; 0 for a rate"},"floors":{"items":{"$ref":"#/components/schemas/ExperimentFloor"},"type":"array","title":"Floors"}},"additionalProperties":false,"type":"object","required":["arm_id","label","n","events","mean","se","design_effect","raw_money","capped_money","floors"],"title":"ExperimentArmReadout"},"ExperimentArmResponse":{"properties":{"id":{"type":"string","pattern":"^arm_[0-9a-f]{32}$","title":"Id","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},"position":{"type":"integer","title":"Position","description":"0 for the live version, 1 for the variant"},"label":{"type":"string","title":"Label"},"weight":{"type":"integer","title":"Weight","description":"The arm's share of the split, a whole number weighed against the other arm's"},"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"version_number":{"type":"integer","title":"Version Number"},"is_control":{"type":"boolean","title":"Is Control"}},"additionalProperties":false,"type":"object","required":["id","position","label","weight","version_id","version_number","is_control"],"title":"ExperimentArmResponse"},"ExperimentAttentionItem":{"properties":{"experiment_id":{"type":"string","pattern":"^expt_[0-9a-f]{32}$","title":"Experiment Id","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},"app_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"App Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name"},"kind":{"type":"string","enum":["clear","waiting","long_run","split_unhealthy","ai_recommended"],"title":"Kind","description":"What the test needs: split_unhealthy | ai_recommended | waiting (you decide) | clear | long_run"},"since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since","description":"Since when, UTC ISO 8601"},"week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Week","description":"Weeks since the test started, on long_run only; null otherwise"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["experiment_id","app_id","name","kind","since","week","message"],"title":"ExperimentAttentionItem"},"ExperimentAttentionResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExperimentAttentionItem"},"type":"array","title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"ExperimentAttentionResponse"},"ExperimentCreate":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"variant":{"$ref":"#/components/schemas/VariantSpec"},"control_weight":{"type":"integer","minimum":1.0,"title":"Control Weight","description":"The live version's share of the split, a whole number weighed against the variant's","default":1},"decision_metric":{"$ref":"#/components/schemas/MetricDefinitionSchema","description":"The metric the test is decided on"},"decision_option":{"$ref":"#/components/schemas/DecisionOption","default":"when_clear"},"ai_trigger":{"anyOf":[{"$ref":"#/components/schemas/AiTrigger"},{"type":"null"}],"description":"When our AI decides, with decision_option ai only: when_clear (at the first clear result) | on_date"},"decision_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Decision Date","description":"The day the test decides, read in timezone, at least seven days out; null when it decides on no date"},"timezone":{"type":"string","title":"Timezone","description":"IANA name of the timezone decision_date is read in","default":"UTC"},"fallback":{"$ref":"#/components/schemas/Fallback","default":"notify"},"ai_max_runs":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Ai Max Runs","description":"How many times the AI may run before it stops; null lets it run as often as the test asks"},"ai_fallback":{"$ref":"#/components/schemas/AiFallback","description":"After that many runs: decide at the first clear result without the AI, or wait for you","default":"when_clear"},"revenue_tiers":{"items":{"$ref":"#/components/schemas/RevenueTier"},"type":"array","title":"Revenue Tiers","description":"The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown"},"protect_metrics":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetricKind"},"type":"array"},{"type":"null"}],"title":"Protect Metrics","description":"The metrics the test watches for harm: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"weekly_digest":{"type":"boolean","title":"Weekly Digest","description":"Whether a weekly email reports where the test stands","default":true},"long_run_reminders":{"type":"boolean","title":"Long Run Reminders","description":"Whether reminder emails go out six weeks after the start and every two weeks after until it ends","default":true},"merchant_note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Merchant Note","description":"A note our AI weighs when it decides, up to 2000 characters: context, never an order"}},"additionalProperties":false,"type":"object","required":["quiz_id","name","variant"],"title":"ExperimentCreate"},"ExperimentDecisionTrace":{"properties":{"plain_line":{"type":"string","title":"Plain Line"},"as_of":{"type":"string","format":"date-time","title":"As Of","description":"When the decision was made, UTC ISO 8601"},"judgement":{"type":"boolean","title":"Judgement","description":"True for our AI's decision, its own judgement rather than the automatic rule's"},"attribution_window_days":{"type":"integer","title":"Attribution Window Days","description":"The store's order-matching window in days: how long after a visit an order still counts"},"revenue_tiers":{"items":{"type":"string"},"type":"array","title":"Revenue Tiers","description":"The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown"},"compared_version_ids":{"items":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"type":"array","title":"Compared Version Ids","description":"The live version and the variant, in that order"},"revision":{"type":"integer","title":"Revision","description":"The test's revision when decided"},"period":{"type":"integer","title":"Period"},"cap_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cap Value","description":"The revenue above which a visit was counted at the cap, in the store's currency; null without a cap"},"alpha":{"type":"number","title":"Alpha","description":"The error rate the range allows, 0.05"},"n_star":{"type":"number","title":"N Star","description":"The visits expected by the decision date, where the range is tuned to be narrowest"},"decision_metric":{"type":"string","title":"Decision Metric","description":"completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta","description":"The variant's number minus the live version's, a rate as a fraction (0.05 is five points) or money in the store's currency; null until both versions have visits"},"lo":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lo","description":"The low end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"hi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hi","description":"The high end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"winner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Winner","description":"The label of the version the evidence favoured; null when it favoured neither"},"publish_arm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Arm","description":"The label of the version the rule would publish; null when it would publish none"},"reason":{"type":"string","title":"Reason","description":"under_minimum_hours | split_unhealthy | collecting | leaning | clear_for_control | clear | protected_harmed:<metric kind>"},"arms":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Arms","description":"The decision metric per version, live version first: label, n, events, rate, se, raw_money, capped_money, design_effect"},"bound":{"additionalProperties":true,"type":"object","title":"Bound","description":"What the range had to clear: k, alpha_used, se, n and needed_lo (the lead that excludes zero)"},"floors":{"items":{"$ref":"#/components/schemas/ExperimentFloor"},"type":"array","title":"Floors"},"split":{"$ref":"#/components/schemas/ExperimentSplitCheck"},"protection":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Protection","description":"Each protected metric when decided: kind, label, lo, hi, assessed, harmed"},"formulas":{"items":{"$ref":"#/components/schemas/ExperimentTraceFormula"},"type":"array","title":"Formulas"},"changes":{"items":{"type":"string"},"type":"array","title":"Changes","description":"Notes recorded with the decision; currently always empty"}},"additionalProperties":false,"type":"object","required":["plain_line","as_of","judgement","attribution_window_days","revenue_tiers","compared_version_ids","revision","period","cap_value","alpha","n_star","decision_metric","delta","lo","hi","winner","publish_arm","reason","arms","bound","floors","split","protection","formulas","changes"],"title":"ExperimentDecisionTrace"},"ExperimentDetailResponse":{"properties":{"id":{"type":"string","pattern":"^expt_[0-9a-f]{32}$","title":"Id","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},"app_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"App Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/ExperimentStatus"},"decision_metric":{"type":"string","title":"Decision Metric","description":"completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"decision_target":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Decision Target","description":"What a targeted metric points at: reached_page {mode: specific | after, page_key}, button_clicked {page_key, component_key}, chose_answer {page_key, component_key, option_id}; null for any other metric"},"decision_option":{"$ref":"#/components/schemas/DecisionOption"},"ai_trigger":{"anyOf":[{"$ref":"#/components/schemas/AiTrigger"},{"type":"null"}],"description":"When our AI decides, with decision_option ai only: when_clear (at the first clear result) | on_date"},"decision_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Decision Date","description":"The day the test decides, read in timezone, at least seven days out; null when it decides on no date"},"decides_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Decides At","description":"decision_date as an instant, midnight at its start in timezone, UTC ISO 8601; null without a date"},"timezone":{"type":"string","title":"Timezone","description":"IANA name of the timezone decision_date is read in"},"fallback":{"$ref":"#/components/schemas/Fallback"},"ai_max_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Max Runs","description":"How many times the AI may run before it stops; null lets it run as often as the test asks"},"ai_fallback":{"$ref":"#/components/schemas/AiFallback","description":"After that many runs: decide at the first clear result without the AI, or wait for you"},"revenue_tiers":{"items":{"type":"string"},"type":"array","title":"Revenue Tiers","description":"The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown"},"protect_metrics":{"items":{"type":"string"},"type":"array","title":"Protect Metrics","description":"The metrics the test watches for harm: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"weekly_digest":{"type":"boolean","title":"Weekly Digest","description":"Whether a weekly email reports where the test stands"},"long_run_reminders":{"type":"boolean","title":"Long Run Reminders","description":"Whether reminder emails go out six weeks after the start and every two weeks after until it ends"},"merchant_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Note","description":"A note our AI weighs when it decides, up to 2000 characters: context, never an order"},"period":{"type":"integer","title":"Period","description":"The current counting period: 0 on a draft, 1 once started, one higher each time a new one opens"},"period_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Started At","description":"When the current counting period began, UTC ISO 8601; null on a draft"},"period_reason":{"$ref":"#/components/schemas/PeriodReason"},"clear_since_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Clear Since At","description":"When the decision metric first read clear in this counting period, UTC ISO 8601; null until then"},"srm_flagged_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Srm Flagged At","description":"When the split check found shoppers not landing in the versions as set, UTC ISO 8601; null while healthy"},"ai_verdict":{"anyOf":[{"$ref":"#/components/schemas/AiVerdict"},{"type":"null"}],"description":"What the AI decided last; null before it has run"},"ai_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Rationale","description":"Our AI's reasoning for its last decision; null before it has decided"},"winner_arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Winner Arm Id"},"ended_by":{"anyOf":[{"$ref":"#/components/schemas/EndedBy"},{"type":"null"}],"description":"Who ended the test: manual (you) | auto (the automatic rule) | ai | fallback_revert (the fallback kept the live version); null until it ends"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"outcome":{"anyOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"revision":{"type":"integer","title":"Revision","description":"A number that goes up with every change to the test"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"arms":{"items":{"$ref":"#/components/schemas/ExperimentArmResponse"},"type":"array","title":"Arms"},"events":{"items":{"$ref":"#/components/schemas/ExperimentEventResponse"},"type":"array","title":"Events"}},"additionalProperties":false,"type":"object","required":["id","app_id","name","status","decision_metric","decision_option","timezone","fallback","ai_fallback","revenue_tiers","protect_metrics","weekly_digest","long_run_reminders","period","period_reason","revision","created_at","updated_at","arms","events"],"title":"ExperimentDetailResponse"},"ExperimentEventResponse":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"kind":{"type":"string","title":"Kind","description":"created | started | period_opened | weights_changed | control_published | arm_republished | decision_metric_changed | decision_option_changed | protect_changed | revenue_tiers_changed | settings_changed | evaluation_delayed | decision_traced | ai_decided | srm_flagged | clear | nudged | digest_sent | warning_sent | result_sent | ended | target_missing; a new kind may be added"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"What the event recorded, by kind; version ids in it are public ids, null once that version is deleted"}},"additionalProperties":false,"type":"object","required":["at","kind","arm_id","data"],"title":"ExperimentEventResponse"},"ExperimentFloor":{"properties":{"name":{"type":"string","title":"Name","description":"What the minimum counts: starts | visits | orders | events"},"needed":{"type":"integer","title":"Needed","description":"The minimum a version needs before its number is read"},"have":{"type":"integer","title":"Have"},"met":{"type":"boolean","title":"Met"}},"additionalProperties":false,"type":"object","required":["name","needed","have","met"],"title":"ExperimentFloor"},"ExperimentGate":{"properties":{"key":{"type":"string","enum":["decision_metric","min_days","enough_data","split_health","protected"],"title":"Key","description":"decision_metric | min_days (seven days in the period) | enough_data | split_health | protected (no protected metric harmed)"},"label":{"type":"string","title":"Label"},"met":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Met"},"detail":{"type":"string","title":"Detail"}},"additionalProperties":false,"type":"object","required":["key","label","met","detail"],"title":"ExperimentGate"},"ExperimentHeader":{"properties":{"testing":{"type":"string","title":"Testing","description":"What is tested: each version with its number and share of shoppers"},"difference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Difference","description":"Which pages the variant adds, removes or changes; null when both hold the same pages"},"current_read":{"type":"string","title":"Current Read","description":"What the decision metric reads now, in one sentence"},"current_read_numbers":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Read Numbers","description":"The numbers behind current_read; null while collecting or when it cannot be read"},"next":{"type":"string","title":"Next","description":"What happens next, per how the test decides"},"day_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Line","description":"The day of the counting period in words; null past day 42"},"evaluated_on_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluated On Line","description":"Why the decision waits past decision_date; null when it does not"}},"additionalProperties":false,"type":"object","required":["testing","difference","current_read","next","day_line","evaluated_on_line"],"title":"ExperimentHeader"},"ExperimentList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExperimentResponse"},"type":"array","title":"Data"}},"additionalProperties":false,"type":"object","required":["data"],"title":"ExperimentList"},"ExperimentMetricReadout":{"properties":{"kind":{"type":"string","title":"Kind","description":"completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"label":{"type":"string","title":"Label"},"target":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Target","description":"What the decision metric points at, as decision_target; null on every other metric"},"role":{"type":"string","enum":["decider","exploratory"],"title":"Role","description":"decider: the decision metric | exploratory: reported beside it, never decides"},"population":{"type":"string","title":"Population","description":"What the metric counts over: starts | visits | orders"},"unit":{"type":"string","title":"Unit","description":"The unit of delta and its range: percentage points, sent as a fraction (0.05 is five points) | currency per order | currency per visit"},"state":{"type":"string","enum":["collecting","leaning","clear"],"title":"State","description":"collecting: not enough data | leaning: one version ahead, range still includes zero | clear: range excludes zero"},"why":{"type":"string","title":"Why"},"control":{"$ref":"#/components/schemas/ExperimentArmReadout"},"variant":{"$ref":"#/components/schemas/ExperimentArmReadout"},"delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta","description":"The variant's number minus the live version's, a rate as a fraction (0.05 is five points) or money in the store's currency; null until both versions have visits"},"abs_lo":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Abs Lo","description":"The low end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"abs_hi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Abs Hi","description":"The high end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"lift":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lift","description":"delta relative to the live version's number, 0.1 is 10 percent better; null until that number is clear of zero"},"lo":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lo","description":"The low end of the range for lift; null with lift"},"hi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hi","description":"The high end of the range for lift; null with lift"},"k":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"K","description":"The width multiplier of the range, used instead of 1.96 so the range holds however often it is read"},"se":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Se","description":"The standard error of delta; null with delta"},"alpha":{"type":"number","title":"Alpha","description":"The error rate the range allows, 0.05"},"n_star":{"type":"number","title":"N Star","description":"The visits expected by the decision date, where the range is tuned to be narrowest"},"design_effect":{"type":"number","title":"Design Effect","description":"The larger of the two versions' design effects"},"line":{"type":"string","title":"Line","description":"The gap between the versions in one sentence, relative to the live version"},"level":{"type":"boolean","title":"Level","description":"Whether the line reads the two versions as level so far"}},"additionalProperties":false,"type":"object","required":["kind","label","target","role","population","unit","state","why","control","variant","delta","abs_lo","abs_hi","lift","lo","hi","k","se","alpha","n_star","design_effect","line","level"],"title":"ExperimentMetricReadout"},"ExperimentPageChange":{"properties":{"kind":{"type":"string","enum":["added","removed","changed"],"title":"Kind","description":"How the variant differs on this page: added | removed | changed"},"page_key":{"type":"string","title":"Page Key"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"}},"additionalProperties":false,"type":"object","required":["kind","page_key","page_title"],"title":"ExperimentPageChange"},"ExperimentPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"control_weight":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Control Weight","description":"The live version's share of the split; the other arm's is kept when absent"},"variant_weight":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Variant Weight","description":"The variant's share of the split; the other arm's is kept when absent"},"decision_metric":{"anyOf":[{"$ref":"#/components/schemas/MetricDefinitionSchema"},{"type":"null"}],"description":"The metric the test is decided on"},"decision_option":{"anyOf":[{"$ref":"#/components/schemas/DecisionOption"},{"type":"null"}]},"ai_trigger":{"anyOf":[{"$ref":"#/components/schemas/AiTrigger"},{"type":"null"}],"description":"When our AI decides, with decision_option ai only: when_clear (at the first clear result) | on_date"},"decision_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Decision Date","description":"The day the test decides, read in timezone, at least seven days out; null when it decides on no date"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA name of the timezone decision_date is read in"},"fallback":{"anyOf":[{"$ref":"#/components/schemas/Fallback"},{"type":"null"}]},"ai_max_runs":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Ai Max Runs","description":"How many times the AI may run before it stops; send null to lift the limit"},"ai_fallback":{"anyOf":[{"$ref":"#/components/schemas/AiFallback"},{"type":"null"}],"description":"After that many runs: decide at the first clear result without the AI, or wait for you"},"revenue_tiers":{"anyOf":[{"items":{"$ref":"#/components/schemas/RevenueTier"},"type":"array"},{"type":"null"}],"title":"Revenue Tiers","description":"The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown"},"protect_metrics":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetricKind"},"type":"array"},{"type":"null"}],"title":"Protect Metrics","description":"The metrics the test watches for harm: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"weekly_digest":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Weekly Digest","description":"Whether a weekly email reports where the test stands"},"long_run_reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Long Run Reminders","description":"Whether reminder emails go out six weeks after the start and every two weeks after until it ends"},"merchant_note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Merchant Note","description":"A note our AI weighs when it decides, up to 2000 characters: context, never an order"}},"additionalProperties":false,"type":"object","title":"ExperimentPatch"},"ExperimentPeriod":{"properties":{"period":{"type":"integer","title":"Period"},"reason":{"type":"string","title":"Reason","description":"Why the period began: started | split_changed | control_published | variant_republished | metric_changed | revenue_tiers_changed"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"current":{"type":"boolean","title":"Current"},"label":{"type":"string","title":"Label"}},"additionalProperties":false,"type":"object","required":["period","reason","started_at","ended_at","current","label"],"title":"ExperimentPeriod"},"ExperimentProgress":{"properties":{"day":{"type":"integer","title":"Day","description":"The day of the current counting period, 1 on the day it began"},"share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Share","description":"The lower of the two versions' progress toward its planned traffic, 0 to 1; null without a plan"},"pace":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pace","description":"Starts or visits a day, as the decision metric counts them, over the latest seven days; null without a plan"},"days_at_pace":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days At Pace","description":"About how many more days the planned traffic takes at this pace; null past six weeks, at no pace or once ended"},"planned":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Planned","description":"The visits both versions together need to spot a 10 percent difference; null when the period has no plan"},"quotas":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Quotas","description":"planned split by version, keyed control and variant; null without a plan"},"observed":{"additionalProperties":{"type":"integer"},"type":"object","title":"Observed","description":"What each version has so far toward its quota, keyed control and variant"},"tier":{"type":"string","title":"Tier","description":"min_days: inside the minimum days | estimating: no pace yet | reached: enough shoppers and clear | reached_unclear: enough shoppers, not clear | on_track | slow"},"line":{"type":"string","title":"Line","description":"What the progress says; empty when the period has no planned sample or the decision metric is clear"}},"additionalProperties":false,"type":"object","required":["day","share","pace","days_at_pace","planned","quotas","observed","tier","line"],"title":"ExperimentProgress"},"ExperimentProtection":{"properties":{"kind":{"type":"string","title":"Kind","description":"The protected metric: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"label":{"type":"string","enum":["not checked yet","no harm","worse"],"title":"Label","description":"not checked yet: too little data | no harm | worse: blocks an automatic publish"},"lo":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lo","description":"The low end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"hi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hi","description":"The high end of the range for the variant's number minus the live version's, in the same unit as delta; null until it can be read"},"assessed":{"type":"boolean","title":"Assessed","description":"Whether the metric has enough data to be checked"},"harmed":{"type":"boolean","title":"Harmed","description":"Whether even the best case for the variant is worse than the live version"},"detail":{"type":"string","title":"Detail"}},"additionalProperties":false,"type":"object","required":["kind","label","lo","hi","assessed","harmed","detail"],"title":"ExperimentProtection"},"ExperimentResponse":{"properties":{"id":{"type":"string","pattern":"^expt_[0-9a-f]{32}$","title":"Id","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},"app_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"App Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/ExperimentStatus"},"decision_metric":{"type":"string","title":"Decision Metric","description":"completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"decision_target":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Decision Target","description":"What a targeted metric points at: reached_page {mode: specific | after, page_key}, button_clicked {page_key, component_key}, chose_answer {page_key, component_key, option_id}; null for any other metric"},"decision_option":{"$ref":"#/components/schemas/DecisionOption"},"ai_trigger":{"anyOf":[{"$ref":"#/components/schemas/AiTrigger"},{"type":"null"}],"description":"When our AI decides, with decision_option ai only: when_clear (at the first clear result) | on_date"},"decision_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Decision Date","description":"The day the test decides, read in timezone, at least seven days out; null when it decides on no date"},"decides_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Decides At","description":"decision_date as an instant, midnight at its start in timezone, UTC ISO 8601; null without a date"},"timezone":{"type":"string","title":"Timezone","description":"IANA name of the timezone decision_date is read in"},"fallback":{"$ref":"#/components/schemas/Fallback"},"ai_max_runs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Max Runs","description":"How many times the AI may run before it stops; null lets it run as often as the test asks"},"ai_fallback":{"$ref":"#/components/schemas/AiFallback","description":"After that many runs: decide at the first clear result without the AI, or wait for you"},"revenue_tiers":{"items":{"type":"string"},"type":"array","title":"Revenue Tiers","description":"The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown"},"protect_metrics":{"items":{"type":"string"},"type":"array","title":"Protect Metrics","description":"The metrics the test watches for harm: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer"},"weekly_digest":{"type":"boolean","title":"Weekly Digest","description":"Whether a weekly email reports where the test stands"},"long_run_reminders":{"type":"boolean","title":"Long Run Reminders","description":"Whether reminder emails go out six weeks after the start and every two weeks after until it ends"},"merchant_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Note","description":"A note our AI weighs when it decides, up to 2000 characters: context, never an order"},"period":{"type":"integer","title":"Period","description":"The current counting period: 0 on a draft, 1 once started, one higher each time a new one opens"},"period_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Started At","description":"When the current counting period began, UTC ISO 8601; null on a draft"},"period_reason":{"$ref":"#/components/schemas/PeriodReason"},"clear_since_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Clear Since At","description":"When the decision metric first read clear in this counting period, UTC ISO 8601; null until then"},"srm_flagged_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Srm Flagged At","description":"When the split check found shoppers not landing in the versions as set, UTC ISO 8601; null while healthy"},"ai_verdict":{"anyOf":[{"$ref":"#/components/schemas/AiVerdict"},{"type":"null"}],"description":"What the AI decided last; null before it has run"},"ai_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Rationale","description":"Our AI's reasoning for its last decision; null before it has decided"},"winner_arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Winner Arm Id"},"ended_by":{"anyOf":[{"$ref":"#/components/schemas/EndedBy"},{"type":"null"}],"description":"Who ended the test: manual (you) | auto (the automatic rule) | ai | fallback_revert (the fallback kept the live version); null until it ends"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"outcome":{"anyOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"revision":{"type":"integer","title":"Revision","description":"A number that goes up with every change to the test"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"arms":{"items":{"$ref":"#/components/schemas/ExperimentArmResponse"},"type":"array","title":"Arms"}},"additionalProperties":false,"type":"object","required":["id","app_id","name","status","decision_metric","decision_option","timezone","fallback","ai_fallback","revenue_tiers","protect_metrics","weekly_digest","long_run_reminders","period","period_reason","revision","created_at","updated_at","arms"],"title":"ExperimentResponse"},"ExperimentResultsResponse":{"properties":{"experiment":{"$ref":"#/components/schemas/ExperimentResponse"},"as_of":{"type":"string","format":"date-time","title":"As Of","description":"When these numbers were read, UTC ISO 8601; a read is served again for up to two hours"},"window_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Window Start","description":"The start of the visits counted, when the counting period began, UTC ISO 8601; null on a draft"},"window_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Window End","description":"The end of the visits counted, as_of or when the test ended, UTC ISO 8601; null on a draft"},"frozen":{"type":"boolean","title":"Frozen","description":"True once the test has ended: the visits counted stop at its end while their orders keep arriving"},"admission_cutoff":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Admission Cutoff","description":"For a money decision metric on a live test, the decision counts only visits before this, UTC ISO 8601; null otherwise"},"admission_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admission Line"},"attribution_window_days":{"type":"integer","title":"Attribution Window Days","description":"The store's order-matching window in days: how long after a visit an order still counts"},"attribution_line":{"type":"string","title":"Attribution Line"},"cookieless_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cookieless Share","description":"Share of visits without cookies, assigned a version per visit, 0 to 1; null without visits"},"cookieless_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cookieless Line"},"arms":{"items":{"$ref":"#/components/schemas/ExperimentArmCounts"},"type":"array","title":"Arms","description":"Each version's numbers in the current counting period, live version first"},"header":{"$ref":"#/components/schemas/ExperimentHeader"},"changes":{"items":{"$ref":"#/components/schemas/ExperimentPageChange"},"type":"array","title":"Changes","description":"Pages the variant adds, removes or changes against the live version"},"progress":{"$ref":"#/components/schemas/ExperimentProgress"},"gates":{"items":{"$ref":"#/components/schemas/ExperimentGate"},"type":"array","title":"Gates"},"metrics":{"items":{"$ref":"#/components/schemas/ExperimentMetricReadout"},"type":"array","title":"Metrics"},"protection":{"items":{"$ref":"#/components/schemas/ExperimentProtection"},"type":"array","title":"Protection"},"split":{"$ref":"#/components/schemas/ExperimentSplitCheck"},"periods":{"items":{"$ref":"#/components/schemas/ExperimentPeriod"},"type":"array","title":"Periods"},"events":{"items":{"$ref":"#/components/schemas/ExperimentTimelineEvent"},"type":"array","title":"Events"},"decision_trace":{"anyOf":[{"$ref":"#/components/schemas/ExperimentDecisionTrace"},{"type":"null"}],"description":"The evidence the latest decision was made on, frozen; null before any"},"ai_decision_trace":{"anyOf":[{"$ref":"#/components/schemas/ExperimentDecisionTrace"},{"type":"null"}],"description":"The evidence our AI's latest decision was made on, frozen; null before any"},"changed_since":{"type":"boolean","title":"Changed Since","description":"Whether revenue arriving since the decision moved the lead past half the recorded range"},"changed_since_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Changed Since Line"},"explainer_keys":{"items":{"type":"string"},"type":"array","title":"Explainer Keys","description":"The camelCase names of the help topics that explain the numbers in this response"}},"additionalProperties":false,"type":"object","required":["experiment","as_of","window_start","window_end","frozen","admission_cutoff","admission_line","attribution_window_days","attribution_line","cookieless_share","cookieless_line","arms","header","changes","progress","gates","metrics","protection","split","periods","events","decision_trace","ai_decision_trace","changed_since","changed_since_line","explainer_keys"],"title":"ExperimentResultsResponse"},"ExperimentSplitCheck":{"properties":{"units_per_arm":{"items":{"type":"integer"},"type":"array","title":"Units Per Arm","description":"Shoppers counted per version, live version first"},"expected":{"items":{"type":"number"},"type":"array","title":"Expected","description":"The share of shoppers each version should get, 0 to 1, live version first"},"log_odds":{"type":"number","title":"Log Odds","description":"The evidence that shoppers are not landing as the split was set; the check fires above 6.91"},"latched":{"type":"boolean","title":"Latched","description":"Whether the check has fired; once fired it stays on for the rest of the test"},"surfaced":{"type":"boolean","title":"Surfaced","description":"Whether the 200 shoppers the check needs have been counted"},"expected_share":{"type":"number","title":"Expected Share","description":"The variant's share of shoppers the split was set to, 0 to 1"},"observed_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed Share","description":"The variant's share of the shoppers counted, 0 to 1; null before any shopper is counted"},"n":{"type":"integer","title":"N","description":"The shoppers counted on both versions"},"line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line","description":"What share of shoppers the variant should get and got; null before any shopper is counted"}},"additionalProperties":false,"type":"object","required":["units_per_arm","expected","log_odds","latched","surfaced","expected_share","observed_share","n","line"],"title":"ExperimentSplitCheck"},"ExperimentStatus":{"type":"string","enum":["draft","running","waiting","ended"],"title":"ExperimentStatus","description":"draft: set up, not started. running: shoppers are being split. waiting: still splitting,\nautomatic decisions paused. ended: no longer assigning."},"ExperimentTimelineEvent":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"kind":{"type":"string","title":"Kind","description":"created | started | period_opened | weights_changed | control_published | arm_republished | decision_metric_changed | decision_option_changed | protect_changed | revenue_tiers_changed | settings_changed | evaluation_delayed | decision_traced | ai_decided | srm_flagged | clear | nudged | digest_sent | warning_sent | result_sent | ended | target_missing; a new kind may be added"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"What the event recorded, by kind; version ids in it are public ids, null once that version is deleted"},"label":{"type":"string","title":"Label"}},"additionalProperties":false,"type":"object","required":["at","kind","arm_id","data","label"],"title":"ExperimentTimelineEvent"},"ExperimentTraceFormula":{"properties":{"key":{"type":"string","title":"Key","description":"formula_cs | formula_k | formula_se | formula_srm | formula_floor | formula_guardrail | formula_rpv_cap"},"label":{"type":"string","title":"Label"},"latex":{"type":"string","title":"Latex","description":"The formula as written, in LaTeX"},"latex_plugged":{"type":"string","title":"Latex Plugged","description":"The formula with this test's numbers, in LaTeX"},"terms":{"additionalProperties":{"type":"string"},"type":"object","title":"Terms","description":"Each symbol with its meaning in words"}},"additionalProperties":false,"type":"object","required":["key","label","latex","latex_plugged","terms"],"title":"ExperimentTraceFormula"},"ExportCreate":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"Only this quiz (profiles and responses)"},"from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From","description":"First day, inclusive, UTC"},"to":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To","description":"Last day, inclusive, UTC"},"tz":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Tz","description":"quiz_analytics only: the timezone the days are counted in"},"search":{"anyOf":[{"$ref":"#/components/schemas/ProfileSearch"},{"type":"null"}],"description":"profiles only: the answer filter of POST /v1/profiles/search (its groups, match and has_* fields); the file's quiz and days are the export's own quiz_id, from and to"},"dataset":{"type":"string","enum":["profiles","responses","quiz_analytics"],"title":"Dataset","description":"profiles or responses need profiles:read; quiz_analytics needs analytics:read"},"format":{"type":"string","enum":["csv","json"],"title":"Format","description":"csv: one row per line behind a UTF-8 byte-order mark; json: one object {dataset, filters, generated_at, items} whose items are the rows as the API returns them","default":"csv"}},"additionalProperties":false,"type":"object","required":["dataset"],"title":"ExportCreate"},"ExportFilters":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"Only this quiz (profiles and responses)"},"from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From","description":"First day, inclusive, UTC"},"to":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To","description":"Last day, inclusive, UTC"},"tz":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Tz","description":"quiz_analytics only: the timezone the days are counted in"},"search":{"anyOf":[{"$ref":"#/components/schemas/ProfileSearch"},{"type":"null"}],"description":"profiles only: the answer filter of POST /v1/profiles/search (its groups, match and has_* fields); the file's quiz and days are the export's own quiz_id, from and to"}},"additionalProperties":false,"type":"object","title":"ExportFilters"},"ExportList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExportSummary"},"type":"array","title":"Data","description":"The exports, newest first"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"ExportList"},"ExportSummary":{"properties":{"id":{"type":"string","pattern":"^exp_[0-9a-f]{32}$","title":"Id","description":"The export","examples":["exp_7c9e6679742540de944be07fc1f90ae7"]},"dataset":{"type":"string","enum":["profiles","responses","quiz_analytics","audit_events"],"title":"Dataset","description":"What the file holds"},"format":{"type":"string","enum":["csv","json"],"title":"Format","description":"The file's format"},"source":{"type":"string","enum":["api","dashboard"],"title":"Source","description":"Where the export was requested"},"status":{"type":"string","enum":["pending","running","completed","failed","expired"],"title":"Status","description":"pending | running | completed | failed | expired"},"filters":{"$ref":"#/components/schemas/ExportFilters","description":"The filters the export was requested with"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count","description":"Rows in the file; null until completed"},"bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bytes","description":"The file's size in bytes; null until completed"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Why the build failed; null otherwise"},"requested_at":{"type":"string","format":"date-time","title":"Requested At","description":"When the export was requested"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"When the build started; null before"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the file was ready; null before"},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"When the export and its file are deleted"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url","description":"Set on GET /v1/exports/{export_id} while completed; valid 15 minutes"},"download_url_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Download Url Expires At","description":"When download_url stops working; null with it"},"urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Urls","description":"self: this export on the API; fetch it for a fresh download link"}},"additionalProperties":false,"type":"object","required":["id","dataset","format","source","status","filters","row_count","bytes","error","requested_at","started_at","completed_at","expires_at","urls"],"title":"ExportSummary"},"Fallback":{"type":"string","enum":["keep","revert","notify"],"title":"Fallback","description":"What happens on the date without a clear result: keep running, put the live version back, or\ntell the merchant and wait."},"Freshness":{"properties":{"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"When the numbers for past hours were last brought up to date, UTC ISO 8601; today's visits and orders are always counted live; null before the first update"},"next_refresh_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Refresh At","description":"When the next update is due, UTC ISO 8601; null when none is scheduled or the numbers are read live"},"stale":{"type":"boolean","title":"Stale"},"pending":{"type":"boolean","title":"Pending","description":"True until every update behind these numbers has run once, so they may be incomplete"},"closed_days_through":{"type":"string","format":"date","title":"Closed Days Through","description":"The last day whose numbers are settled: yesterday in the request's timezone"},"today_live":{"type":"boolean","title":"Today Live"}},"additionalProperties":false,"type":"object","required":["as_of","next_refresh_at","stale","pending","closed_days_through","today_live"],"title":"Freshness"},"FunnelPage":{"properties":{"page_key":{"type":"string","title":"Page Key"},"title":{"type":"string","title":"Title"},"removed":{"type":"boolean","title":"Removed","description":"True for a page the published version no longer has"},"sessions_reached":{"type":"integer","title":"Sessions Reached","description":"Sessions that opened this page at least once (one per person)."},"sessions_reached_by_jump":{"type":"integer","title":"Sessions Reached By Jump","description":"Sessions whose first arrival on this page was a jump rule."},"sessions_continued":{"type":"integer","title":"Sessions Continued","description":"Sessions that moved on from this page: reached minus dropped minus those still on it."},"sessions_went_back":{"type":"integer","title":"Sessions Went Back","description":"Sessions that went back to the previous page from here. A Back or Skip pressed after a long idle, once the visit was already closed as timed out, is not recorded."},"sessions_skipped":{"type":"integer","title":"Sessions Skipped","description":"Sessions that used the skip button on this page. A Back or Skip pressed after a long idle, once the visit was already closed as timed out, is not recorded."},"sessions_dropped":{"type":"integer","title":"Sessions Dropped","description":"Sessions whose last page was this one and that ended without completing."},"dropped_share_of_starts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dropped Share Of Starts","description":"sessions_dropped as a percentage of the funnel's starts; null while nothing started."},"avg_time_on_page_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Time On Page Ms","description":"Average time on the page per visit, in milliseconds."}},"additionalProperties":false,"type":"object","required":["page_key","title","removed","sessions_reached","sessions_reached_by_jump","sessions_continued","sessions_went_back","sessions_skipped","sessions_dropped","dropped_share_of_starts","avg_time_on_page_ms"],"title":"FunnelPage"},"ImageBlockRow":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The page the block is on"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title","description":"That page's title; null when it has none"},"component_key":{"type":"string","title":"Component Key","description":"The block's key; its description answers under the same key"},"label":{"type":"string","title":"Label","description":"The block's label, else its key"},"removed":{"type":"boolean","title":"Removed","description":"True for a block that took photos in the range but is gone from the published version"},"sessions_reached":{"type":"integer","title":"Sessions Reached","description":"Visits that entered the block's page; the page, not the block, so an upper bound when the block has a visibility rule"},"sessions_sent":{"type":"integer","title":"Sessions Sent","description":"Visits that sent at least one photo to the block"},"sessions_read":{"type":"integer","title":"Sessions Read","description":"Visits where a photo passed every check and was read"},"send_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Send Rate","description":"sessions_sent as a percentage of sessions_reached, 0 to 100; null under 30 visits that sent a photo"},"read_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read Rate","description":"sessions_read as a percentage of sessions_sent, 0 to 100; null under 30 visits that sent a photo"},"attempts":{"type":"integer","title":"Attempts","description":"Photos sent to the block: reads + retakes + refused + unavailable; previews are not counted"},"reads":{"type":"integer","title":"Reads","description":"Photos that passed every check and were read"},"retakes":{"type":"integer","title":"Retakes","description":"Photos sent back because they failed a check"},"refused":{"type":"integer","title":"Refused","description":"Photos refused for explicit nudity, hate symbols or graphic violence"},"unavailable":{"type":"integer","title":"Unavailable","description":"Photos that could not be read at that moment; they use no credits"},"retake_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retake Rate","description":"retakes as a percentage of attempts, 0 to 100; null under 30 visits that sent a photo"},"charged_reads":{"type":"integer","title":"Charged Reads","description":"Photos that used credits: reads + retakes + refused"},"failed_checks":{"items":{"$ref":"#/components/schemas/ImageFailedCheck"},"type":"array","title":"Failed Checks","description":"The checks photos failed, the one with the most retakes first; their retakes add up to retakes"}},"additionalProperties":false,"type":"object","required":["page_key","page_title","component_key","label","removed","sessions_reached","sessions_sent","sessions_read","send_rate","read_rate","attempts","reads","retakes","refused","unavailable","retake_rate","charged_reads","failed_checks"],"title":"ImageBlockRow"},"ImageFailedCheck":{"properties":{"check":{"type":"string","title":"Check","description":"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"},"current":{"type":"boolean","title":"Current","description":"True when the published version still has a check with these words; false for a check reworded or removed since"},"retakes":{"type":"integer","title":"Retakes","description":"Photos sent back for failing this check"},"retake_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retake Share","description":"retakes as a percentage of the block's retakes, 0 to 100; null under 30 visits that sent a photo"}},"additionalProperties":false,"type":"object","required":["check","current","retakes","retake_share"],"title":"ImageFailedCheck"},"Limits":{"properties":{"capacity":{"type":"integer","title":"Capacity","description":"Requests a key may burst before its bucket is full"},"leak_per_second":{"type":"number","title":"Leak Per Second","description":"Sustained requests per second per key"},"bot_multiplier":{"type":"integer","title":"Bot Multiplier","description":"The store-wide bucket is this many times the key bucket"},"analytics_soft_ttl_seconds":{"type":"integer","title":"Analytics Soft Ttl Seconds","description":"Seconds before a cached analytics answer may refresh"},"webhook_endpoints":{"type":"integer","minimum":1.0,"title":"Webhook Endpoints","description":"Maximum webhook endpoints for the store"},"webhook_sends_per_second":{"type":"integer","minimum":1.0,"title":"Webhook Sends Per Second","description":"Sustained webhook sends per second per endpoint"},"export_page_pause_ms":{"type":"integer","minimum":1.0,"title":"Export Page Pause Ms","description":"Milliseconds an export job rests between pages of the store's data"}},"additionalProperties":false,"type":"object","required":["capacity","leak_per_second","bot_multiplier","analytics_soft_ttl_seconds","webhook_endpoints","webhook_sends_per_second","export_page_pause_ms"],"title":"Limits"},"MetricDefinitionSchema":{"properties":{"kind":{"$ref":"#/components/schemas/MetricKind","description":"The metric"},"target":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Target","description":"What a targeted metric points at: reached_page {mode: specific | after, page_key}, button_clicked {page_key, component_key}, chose_answer {page_key, component_key, option_id}; null for any other metric"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"MetricDefinitionSchema"},"MetricKind":{"type":"string","enum":["completion_rate","email_opt_in","order_conversion","rpv","aov","phone_opt_in","reached_page","product_page_clicked","custom_url_clicked","button_clicked","chose_answer"],"title":"MetricKind"},"Money":{"properties":{"amount":{"type":"string","title":"Amount","description":"A decimal string, as \"79.97\""},"currency":{"type":"string","title":"Currency","description":"ISO 4217 code"}},"additionalProperties":false,"type":"object","required":["amount","currency"],"title":"Money"},"OtherPaths":{"properties":{"routes":{"type":"integer","title":"Routes","description":"How many less-travelled routes are summed here instead of listed"},"moves":{"type":"integer","title":"Moves","description":"Their moves added up, so the listed edges plus these cover every move"}},"additionalProperties":false,"type":"object","required":["routes","moves"],"title":"OtherPaths"},"Outcome":{"type":"string","enum":["winner_manual","winner_auto","winner_ai","ai_no_change","ai_recommended","ai_keep_running","ai_blocked_credits","srm_flagged","no_winner_notify","reverted","plan_downgraded","ended_manual","cancelled"],"title":"Outcome","description":"How a test ended, in one word."},"OverviewPoint":{"properties":{"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"consent_denied":{"type":"integer","title":"Consent Denied","description":"Visits where the shopper had declined tracking on the store"},"unique_viewers_approx":{"type":"integer","title":"Unique Viewers Approx","description":"An estimate of how many different people opened the quiz; someone who came back counts once"},"orders":{"type":"integer","title":"Orders","description":"Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed"},"orders_inside_window":{"type":"integer","title":"Orders Inside Window","description":"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"},"revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of the linked orders in the store's currency, shipping and tax included, refunds not subtracted; null when no currency is known to label it with"},"avg_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Time To Complete Ms","description":"Average milliseconds from the first answer to finishing, over visits that finished on a later page than their first answer; null without one"},"median_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Time To Complete Ms","description":"Median milliseconds from the first answer to finishing, an estimate over visits that finished on a later page than their first answer; null without one"},"revenue_by_bucket":{"anyOf":[{"$ref":"#/components/schemas/ProductBucketMoney"},{"type":"null"}],"description":"Product revenue split by how each item reached the cart; null while a channel, device, visitor or country filter is on"},"day":{"type":"string","format":"date","title":"Day"}},"additionalProperties":false,"type":"object","required":["views","starts","completions","email_opt_ins","phone_opt_ins","consent_denied","unique_viewers_approx","orders","orders_inside_window","revenue","avg_time_to_complete_ms","median_time_to_complete_ms","revenue_by_bucket","day"],"title":"OverviewPoint"},"OverviewTotals":{"properties":{"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"consent_denied":{"type":"integer","title":"Consent Denied","description":"Visits where the shopper had declined tracking on the store"},"unique_viewers_approx":{"type":"integer","title":"Unique Viewers Approx","description":"An estimate of how many different people opened the quiz; someone who came back counts once"},"orders":{"type":"integer","title":"Orders","description":"Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed"},"orders_inside_window":{"type":"integer","title":"Orders Inside Window","description":"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"},"revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of the linked orders in the store's currency, shipping and tax included, refunds not subtracted; null when no currency is known to label it with"},"avg_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Time To Complete Ms","description":"Average milliseconds from the first answer to finishing, over visits that finished on a later page than their first answer; null without one"},"median_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Time To Complete Ms","description":"Median milliseconds from the first answer to finishing, an estimate over visits that finished on a later page than their first answer; null without one"},"revenue_by_bucket":{"anyOf":[{"$ref":"#/components/schemas/ProductBucketMoney"},{"type":"null"}],"description":"Product revenue split by how each item reached the cart; null while a channel, device, visitor or country filter is on"},"start_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start Rate","description":"Starts as a percentage of views, 0 to 100; null without views"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"Completions as a percentage of starts, 0 to 100; null without starts"},"aov":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Revenue divided by linked orders; zero without orders; null when no currency is known to label it with"},"median_quiz_to_checkout_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Quiz To Checkout Ms","description":"Median milliseconds from the start of the visit to the order, for orders of items the quiz put in the cart; null without one or for a range over 92 days"},"avg_quiz_to_checkout_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Quiz To Checkout Ms","description":"Average milliseconds from the start of the visit to the order, for orders of items the quiz put in the cart; null without one or for a range over 92 days"},"median_came_back_to_buy_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Came Back To Buy Ms","description":"Median milliseconds from the visit to the order, for orders of a product the quiz showed and the shopper added later; null without one or for a range over 92 days"},"avg_came_back_to_buy_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Came Back To Buy Ms","description":"Average milliseconds from the visit to the order, for orders of a product the quiz showed and the shopper added later; null without one or for a range over 92 days"}},"additionalProperties":false,"type":"object","required":["views","starts","completions","email_opt_ins","phone_opt_ins","consent_denied","unique_viewers_approx","orders","orders_inside_window","revenue","avg_time_to_complete_ms","median_time_to_complete_ms","revenue_by_bucket","start_rate","completion_rate","aov","median_quiz_to_checkout_ms","avg_quiz_to_checkout_ms","median_came_back_to_buy_ms","avg_came_back_to_buy_ms"],"title":"OverviewTotals"},"PageRole":{"type":"string","enum":["start","question","loading","results"],"title":"PageRole","description":"What a page is for, derived from what it holds (App.page_role): a loading visual, products,\nthe first page in order, else a question page."},"PathEdge":{"properties":{"from_page_key":{"type":"string","title":"From Page Key"},"to_page_key":{"type":"string","title":"To Page Key"},"cause":{"type":"string","enum":["sequential","jump","back","restart"],"title":"Cause","description":"How the destination was entered: sequential (the next page) | jump (a jump rule) | back | restart"},"jump_rule_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jump Rule Key","description":"The jump rule that fired, unknown for one recorded without a key; null unless cause is jump"},"moves":{"type":"integer","title":"Moves","description":"How many times shoppers made this move; a shopper who made it twice counts twice"},"sessions_moved":{"type":"integer","title":"Sessions Moved","description":"How many different visits made this move at least once"}},"additionalProperties":false,"type":"object","required":["from_page_key","to_page_key","cause","jump_rule_key","moves","sessions_moved"],"title":"PathEdge"},"PathNode":{"properties":{"page_key":{"type":"string","title":"Page Key"},"title":{"type":"string","title":"Title"},"removed":{"type":"boolean","title":"Removed","description":"True for a page the published version no longer has"},"entries":{"type":"integer","title":"Entries","description":"How many times shoppers opened this page"},"entries_by_jump":{"type":"integer","title":"Entries By Jump","description":"How many of those arrivals came from a jump rule rather than the page before"},"exits_closed":{"type":"integer","title":"Exits Closed","description":"Visits that ended on this page because the shopper closed the quiz"},"exits_timed_out":{"type":"integer","title":"Exits Timed Out","description":"Visits that ended on this page because the shopper stopped without closing and it timed out"},"exits_restarted":{"type":"integer","title":"Exits Restarted","description":"Visits that ended on this page because the shopper started the quiz over"},"finished_here":{"type":"integer","title":"Finished Here","description":"Visits that finished the quiz on this page"},"still_here":{"type":"integer","title":"Still Here","description":"Visits still on this page when the numbers were read, not counted as an exit"},"median_time_on_page_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Time On Page Ms","description":"Median milliseconds shoppers spent on this page; null without a timed visit"}},"additionalProperties":false,"type":"object","required":["page_key","title","removed","entries","entries_by_jump","exits_closed","exits_timed_out","exits_restarted","finished_here","still_here","median_time_on_page_ms"],"title":"PathNode"},"PathRule":{"properties":{"jump_rule_key":{"type":"string","title":"Jump Rule Key"},"source_page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Page Key","description":"The page the rule lives on; null for a rule gone from the published version"},"fired":{"type":"integer","title":"Fired","description":"How many arrivals the rule caused in the range"},"source_entries":{"type":"integer","title":"Source Entries","description":"Arrivals on the rule's page in the range, the denominator for fired"}},"additionalProperties":false,"type":"object","required":["jump_rule_key","source_page_key","fired","source_entries"],"title":"PathRule"},"PathVisibilitySkip":{"properties":{"page_key":{"type":"string","title":"Page Key"},"title":{"type":"string","title":"Title"},"removed":{"type":"boolean","title":"Removed","description":"True for a page the published version no longer has"},"times_hidden":{"type":"integer","title":"Times Hidden","description":"How many times visibility rules hid this page as shoppers moved forward past it; jumps are not counted"}},"additionalProperties":false,"type":"object","required":["page_key","title","removed","times_hidden"],"title":"PathVisibilitySkip"},"PeriodReason":{"type":"string","enum":["started","split_changed","control_published","variant_republished","metric_changed","revenue_tiers_changed"],"title":"PeriodReason","description":"Why a counting period began."},"ProductBucketMoney":{"properties":{"added_from_quiz":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Product revenue of items the quiz itself put in the cart, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"},"shown_bought_later":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Product revenue of items the quiz showed and the shopper added to the cart themselves, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"},"bought_not_shown":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Product revenue of items in linked orders the quiz never showed that shopper, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"}},"additionalProperties":false,"type":"object","required":["added_from_quiz","shown_bought_later","bought_not_shown"],"title":"ProductBucketMoney"},"ProductRow":{"properties":{"product_id":{"type":"string","title":"Product Id","examples":["gid://shopify/Product/8692896989320"]},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"in_store":{"type":"boolean","title":"In Store"},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"The quiz that earned most of this product's revenue; null once that quiz is deleted"},"shown_on":{"anyOf":[{"$ref":"#/components/schemas/ProductShownOn"},{"type":"null"}],"description":"Where the quiz showed the product most often; null when it never showed it"},"times_shown":{"type":"integer","title":"Times Shown","description":"How many times the quiz showed the product, once per visit for each card that showed it"},"orders_approx":{"type":"integer","title":"Orders Approx","description":"An estimate of the linked orders containing the product, once per order"},"units":{"type":"integer","title":"Units","description":"Units of the product bought across linked orders"},"line_revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"The product's revenue in linked orders, after discounts and before shipping and tax, in the store's currency; null when no currency is known to label it with"},"revenue_by_bucket":{"$ref":"#/components/schemas/ProductBucketMoney","description":"That revenue split by how each item reached the cart"},"had_variants":{"type":"boolean","title":"Had Variants"}},"additionalProperties":false,"type":"object","required":["product_id","title","image_url","in_store","quiz_name","shown_on","times_shown","orders_approx","units","line_revenue","revenue_by_bucket","had_variants"],"title":"ProductRow"},"ProductShownOn":{"properties":{"page_key":{"type":"string","title":"Page Key"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title","description":"The page's title; null once the page is gone from the published quiz"},"block_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Key"}},"additionalProperties":false,"type":"object","required":["page_key","page_title","block_key"],"title":"ProductShownOn"},"ProfileAnswer":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The page the question is on"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title","description":"That page's title; null when it has none"},"component_key":{"type":"string","title":"Component Key","description":"The question"},"question":{"type":"string","title":"Question","description":"The question as the quiz labels it"},"kind":{"type":"string","enum":["choice","image","text","email","phone","number","date","other"],"title":"Kind","description":"What kind of answer this is"},"values":{"items":{"type":"string"},"type":"array","title":"Values","description":"The answer as the shopper saw it: option labels, or the typed value as text"},"value":{"title":"Value","description":"The answer as stored: an option id or the typed text, a JSON number for a number, a {date, time} object for a date"},"image_urls":{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array","title":"Image Urls","description":"For an image choice: one entry per label in values, the option's image or null"},"removed":{"type":"boolean","title":"Removed","description":"True when the question is no longer in the quiz"}},"additionalProperties":false,"type":"object","required":["page_key","page_title","component_key","question","kind","values","value","image_urls","removed"],"title":"ProfileAnswer"},"ProfileDetail":{"properties":{"id":{"type":"string","pattern":"^prof_[0-9a-f]{32}$","title":"Id","description":"The profile","examples":["prof_7c9e6679742540de944be07fc1f90ae7"]},"removed":{"type":"boolean","title":"Removed","description":"True once the shopper's data was erased on a data-deletion request: no identities or contact values remain"},"removed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Removed At","description":"When the data was erased; null otherwise"},"identities":{"items":{"$ref":"#/components/schemas/ProfileIdentity"},"type":"array","title":"Identities","description":"The shopper's emails, phones and Shopify customer id; empty on a removed profile"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At","description":"The start of the shopper's first session; null when not known"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At","description":"The latest moment the shopper was seen"},"sessions_count":{"type":"integer","title":"Sessions Count","description":"How many quiz sessions the shopper had"},"completed_count":{"type":"integer","title":"Completed Count","description":"How many of them completed"},"returning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Returning","description":"True when the shopper took a quiz again after we first knew them, on any device; null on a removed profile"},"returning_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Returning Count","description":"Sessions that began after we first knew the shopper; null on a removed profile"},"quizzes_taken_count":{"type":"integer","title":"Quizzes Taken Count","description":"How many different quizzes the shopper took"},"orders_count":{"type":"integer","title":"Orders Count","description":"Orders linked to the shopper's quiz sessions"},"spent":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"What those orders came to, in the store's currency; null without orders"},"last_order_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Order At","description":"When the latest of them was placed; null without orders"},"latest_results":{"items":{"$ref":"#/components/schemas/ProfileResult"},"type":"array","title":"Latest Results","description":"The latest completed result of each quiz"},"sessions":{"items":{"$ref":"#/components/schemas/ProfileSession"},"type":"array","title":"Sessions","description":"The shopper's sessions, newest first, at most 200"},"orders":{"items":{"$ref":"#/components/schemas/ProfileOrder"},"type":"array","title":"Orders","description":"Orders linked to the shopper's quiz sessions"},"share_orders":{"items":{"$ref":"#/components/schemas/ProfileShareOrder"},"type":"array","title":"Share Orders","description":"Orders bought through this shopper's shared results; never part of orders, orders_count or spent"}},"additionalProperties":false,"type":"object","required":["id","removed","removed_at","identities","first_seen_at","last_seen_at","sessions_count","completed_count","returning","returning_count","quizzes_taken_count","orders_count","spent","last_order_at","latest_results","sessions","orders","share_orders"],"title":"ProfileDetail"},"ProfileFormula":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The page the formula or value table is on"},"component_key":{"type":"string","title":"Component Key","description":"The formula or value table"},"label":{"type":"string","title":"Label","description":"Its label"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"The number it computed; null for a value table that holds text"},"kind":{"type":"string","enum":["formula","table"],"title":"Kind","description":"A formula's number, or the value a value table resolved","default":"formula"},"value_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Text","description":"The text a value table resolved; null for a formula or a number table"}},"additionalProperties":false,"type":"object","required":["page_key","component_key","label","value"],"title":"ProfileFormula"},"ProfileIdentity":{"properties":{"kind":{"type":"string","title":"Kind","description":"email | phone | shopify_customer_id. A new kind may be added, so skip one you do not know. shopify_customer_id arrives when the shopper takes a quiz logged in to the store or places an order linked to a quiz session; its consent is always false"},"value":{"type":"string","title":"Value","description":"The email (lowercase), the phone (E.164), or the Shopify customer as a gid://shopify/Customer/<id> GID"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At","description":"When the identity was first captured"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At","description":"The latest moment one of the shopper's sessions typed this kind of contact, never earlier than first_seen_at"},"consent":{"type":"boolean","title":"Consent","description":"True only when the shopper ticked the marketing-consent box on their newest run that showed it; anything else, including a skipped page or a quiz without the box, is false"}},"additionalProperties":false,"type":"object","required":["kind","value","first_seen_at","last_seen_at","consent"],"title":"ProfileIdentity"},"ProfileList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ProfileSummary"},"type":"array","title":"Data","description":"The profiles, newest last seen first"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"},"total":{"type":"integer","title":"Total","description":"How many profiles match"},"returning_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Returning Total","description":"How many of total came back; null once the total is capped"},"total_capped":{"type":"boolean","title":"Total Capped","description":"A search stops counting at 5,000: total is then that cap, read it as 5,000+","default":false}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor","total","returning_total"],"title":"ProfileList"},"ProfileOrder":{"properties":{"order_id":{"type":"string","title":"Order Id","description":"The Shopify order id"},"order_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Name","description":"The order's name, as #1042; null when unknown"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the order was placed"},"amount":{"$ref":"#/components/schemas/Money","description":"Its total in the store's currency"},"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"The quiz of the session it was tied to; null when not known"},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"That quiz's name; null with it"},"session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Session Id","description":"The session it was tied to; null when not known"},"matched_tier":{"type":"string","title":"Matched Tier","description":"How the order was tied to the quiz session: line_item_property | cart_attribute | pixel_claim | email. The first two: the quiz put the product in the cart; pixel_claim: the checkout pixel named the session; email: the order's email belongs to the shopper"}},"additionalProperties":false,"type":"object","required":["order_id","order_name","created_at","amount","quiz_id","quiz_name","session_id","matched_tier"],"title":"ProfileOrder"},"ProfilePoints":{"properties":{"dimension_id":{"type":"string","title":"Dimension Id","description":"The points dimension"},"name":{"type":"string","title":"Name","description":"Its name"},"total":{"type":"number","title":"Total","description":"The points the session scored on it"}},"additionalProperties":false,"type":"object","required":["dimension_id","name","total"],"title":"ProfilePoints"},"ProfileQuiz":{"properties":{"id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Id","description":"The quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name","description":"Its name"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"ProfileQuiz"},"ProfileResult":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"type":"string","title":"Quiz Name","description":"Its name"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The version the session ran; null when that version is gone"},"session_id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Session Id","description":"The latest completed session of this quiz","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When that session opened"},"completed_at":{"type":"string","format":"date-time","title":"Completed At","description":"When it completed"},"answers":{"items":{"$ref":"#/components/schemas/ProfileAnswer"},"type":"array","title":"Answers","description":"Its answers"},"points":{"items":{"$ref":"#/components/schemas/ProfilePoints"},"type":"array","title":"Points","description":"Its points per dimension"},"winner":{"anyOf":[{"$ref":"#/components/schemas/ProfilePoints"},{"type":"null"}],"description":"The top dimension; null when the quiz scores none"},"points_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Points Total","description":"The points summed over the dimensions; null when the quiz scores none"},"formulas":{"items":{"$ref":"#/components/schemas/ProfileFormula"},"type":"array","title":"Formulas","description":"Its formula values"},"result_page":{"anyOf":[{"$ref":"#/components/schemas/ProfileResultPage"},{"type":"null"}],"description":"The result page it ended on; null when not known"},"results_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Results Url","description":"The link to this result: the page the quiz ran on plus the session's public id; null when the page was not recorded"}},"additionalProperties":false,"type":"object","required":["quiz_id","quiz_name","version_number","session_id","started_at","completed_at","answers","points","winner","points_total","formulas","result_page","results_url"],"title":"ProfileResult"},"ProfileResultPage":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The result page"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Its title; null when it has none"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position","description":"Its position in the quiz, from 1; null when not known"},"page_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Count","description":"How many pages the quiz version has; null when not known"},"shown_products":{"items":{"$ref":"#/components/schemas/ProfileShownProduct"},"type":"array","title":"Shown Products","description":"The products it showed"}},"additionalProperties":false,"type":"object","required":["page_key","title","position","page_count","shown_products"],"title":"ProfileResultPage"},"ProfileSearch":{"properties":{"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"Only people who took this quiz"},"from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From","description":"Last seen on or after this UTC day"},"to":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To","description":"Last seen on or before this UTC day"},"has_order":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Order","description":"Placed an order we linked to a quiz session"},"has_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email","description":"Has an email"},"has_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Phone","description":"Has a phone"},"has_marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Marketing Consent","description":"Ticked the marketing-consent checkbox beside their newest email or phone answer"},"is_returning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Returning","description":"Took a quiz again after we first knew them, on any device"},"match":{"type":"string","enum":["any_session","latest_completed_per_quiz"],"title":"Match","description":"any_session: any time they took the quiz counts; latest_completed_per_quiz: only their latest completed take of each quiz","default":"any_session"},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileSearchGroup"},"type":"array","maxItems":4},{"type":"null"}],"title":"Groups","description":"OR of AND groups: up to 4 groups of 8 terms"}},"additionalProperties":false,"type":"object","title":"ProfileSearch","description":"Who to find: the list filters of GET /v1/profiles except q, plus person facts and an answer filter, an OR of\nAND groups. Send the same body with every page: a cursor belongs to the search that answered it and\nis refused with any other body."},"ProfileSearchAny":{"properties":{"any":{"items":{"$ref":"#/components/schemas/ProfileSearchTerm"},"type":"array","maxItems":8,"minItems":2,"title":"Any","description":"At least one of these terms must hold; plain terms only"}},"additionalProperties":false,"type":"object","required":["any"],"title":"ProfileSearchAny"},"ProfileSearchGroup":{"properties":{"all":{"items":{"anyOf":[{"$ref":"#/components/schemas/ProfileSearchTerm"},{"$ref":"#/components/schemas/ProfileSearchAny"}]},"type":"array","maxItems":8,"minItems":1,"title":"All","description":"Every slot must hold: a term, or {any: [terms]}; at most 8 terms in the group, counting the terms inside any"}},"additionalProperties":false,"type":"object","required":["all"],"title":"ProfileSearchGroup"},"ProfileSearchTerm":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz the term reads","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"kind":{"type":"string","enum":["choice","number","date","text","email","phone","points","formula","winner","session"],"title":"Kind","description":"choice | number | date | text | email | phone: a question of the quiz (page_key + component_key); points: a dimension (dimension_id); formula: a formula component (page_key + component_key); winner: the top dimension (dimension ids in option_ids); session: how the shopper's session ended (value completed | abandoned, page_key the page they left on)"},"op":{"type":"string","enum":["in","not_in","eq","lt","gt","between","before","after","contains","equals","matches","answered","not_answered"],"title":"Op","description":"choice: in | not_in; number, points, formula: eq | lt | gt | between; date: eq | before | after | between; text: contains | equals | matches | answered | not_answered; email, phone: answered | not_answered; winner: in; session: equals. not_in means answered the question and picked none of these; not_answered means took the quiz and left the question unanswered."},"page_key":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Page Key","description":"The question's page (choice, number, date, text, email, phone, formula) or the page left on (session)"},"component_key":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Component Key","description":"The question or formula"},"dimension_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Dimension Id","description":"points: the dimension"},"option_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Option Ids","description":"Option ids (exact)"},"option_labels":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Option Labels","description":"Option labels, matched trim- and case-insensitively against every version of the quiz"},"min":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Min","description":"between: the low bound (a number, or a YYYY-MM-DD day)"},"max":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Max","description":"between: the high bound"},"value":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"eq, lt, gt, before, after, contains, equals: the operand; matches: a case-insensitive regular expression of at most 64 characters with a run of three plain letters or digits, no lookarounds or backreferences; session: completed | abandoned"}},"additionalProperties":false,"type":"object","required":["quiz_id","kind","op"],"title":"ProfileSearchTerm"},"ProfileSession":{"properties":{"session_id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Session Id","description":"The session","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"Its quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"type":"string","title":"Quiz Name","description":"The quiz's name"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The version it ran; null when that version is gone"},"status":{"type":"string","enum":["completed","in_progress","left"],"title":"Status","description":"completed | in_progress | left"},"returning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Returning","description":"True when the session began after we first knew the shopper; null on a removed profile"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When it opened"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When it completed; null otherwise"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When it ended; null while it runs"},"pages_visited":{"type":"integer","title":"Pages Visited","description":"How many pages the shopper visited in the session"},"page_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Count","description":"How many pages the version has; null when not known"},"last_page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Page Key","description":"The last page visited; null before any"},"last_page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Page Title","description":"Its title; null when it has none"},"last_page_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Page Position","description":"Its position in the quiz, from 1; null when not known"},"device_class":{"type":"string","title":"Device Class","description":"mobile | tablet | desktop"},"channel":{"type":"string","title":"Channel","description":"How the shopper arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown"},"order":{"anyOf":[{"$ref":"#/components/schemas/ProfileSessionOrder"},{"type":"null"}],"description":"The first order that followed the session; null when none did"},"source_session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Source Session Id","description":"The session this one was started from: a shared result (source_kind share) or a Restart (source_kind restart); null for a session the shopper opened themselves"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind","description":"share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves","examples":["share","restart",null]},"results_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Results Url","description":"The link to this session's results once completed; null before"},"opens":{"type":"integer","title":"Opens","description":"Times this session's shared result was opened"},"last_opened_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Opened At","description":"When the session's shared result was last opened; null when never"},"last_open_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Open Channel","description":"How that last open arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results; null when never opened"}},"additionalProperties":false,"type":"object","required":["session_id","quiz_id","quiz_name","version_number","status","returning","started_at","completed_at","ended_at","pages_visited","page_count","last_page_key","last_page_title","last_page_position","device_class","channel","country","order","source_session_id","source_kind","results_url","opens","last_opened_at","last_open_channel"],"title":"ProfileSession"},"ProfileSessionOrder":{"properties":{"order_id":{"type":"string","title":"Order Id","description":"The Shopify order id"},"order_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Name","description":"The order's name, as #1042; null when unknown"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the order was placed"},"amount":{"$ref":"#/components/schemas/Money","description":"Its total in the store's currency"},"minutes_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minutes After","description":"Minutes from the session's completion (else its start) to the order"},"matched_tier":{"type":"string","title":"Matched Tier","description":"How the order was tied to the quiz session: line_item_property | cart_attribute | pixel_claim | email. The first two: the quiz put the product in the cart; pixel_claim: the checkout pixel named the session; email: the order's email belongs to the shopper"}},"additionalProperties":false,"type":"object","required":["order_id","order_name","created_at","amount","minutes_after","matched_tier"],"title":"ProfileSessionOrder"},"ProfileShareOrder":{"properties":{"order_id":{"type":"string","title":"Order Id","description":"The Shopify order id"},"order_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Name","description":"The order's name, as #1042; null when unknown"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the order was placed"},"amount":{"$ref":"#/components/schemas/Money","description":"Its total in the store's currency"},"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"The quiz of the session it was tied to; null when not known"},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"That quiz's name; null with it"},"session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Session Id","description":"The session it was tied to; null when not known"},"matched_tier":{"type":"string","title":"Matched Tier","description":"How the order was tied to the quiz session: line_item_property | cart_attribute | pixel_claim | email. The first two: the quiz put the product in the cart; pixel_claim: the checkout pixel named the session; email: the order's email belongs to the shopper"},"via":{"type":"string","enum":["retake","shared_page"],"title":"Via","description":"retake: bought in a session started from this shopper's shared result (session_id is that session's); shared_page: bought straight from the shared results page (session_id is the shopper's own)"},"buyer_person_id":{"anyOf":[{"type":"string","pattern":"^prof_[0-9a-f]{32}$","examples":["prof_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Buyer Person Id","description":"The buyer's profile when one is known"}},"additionalProperties":false,"type":"object","required":["order_id","order_name","created_at","amount","quiz_id","quiz_name","session_id","matched_tier","via","buyer_person_id"],"title":"ProfileShareOrder"},"ProfileShownProduct":{"properties":{"product_id":{"type":"string","title":"Product Id","description":"The product's Shopify GID","examples":["gid://shopify/Product/8692896989320"]},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id","description":"The variant's Shopify GID; null when the block showed the product only","examples":["gid://shopify/ProductVariant/40926435967056"]},"block_key":{"type":"string","title":"Block Key","description":"The product block that showed it"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle","description":"The product's handle; null when unknown"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The product's title; null when unknown"},"variant_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Title","description":"The variant's title; null when unknown"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price","description":"The variant's price in the store's currency; null when unknown"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"The store's currency; null when unknown"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"The product's image URL; null when unknown"}},"additionalProperties":false,"type":"object","required":["product_id","variant_id","block_key","handle","title","variant_title","price","currency","image"],"title":"ProfileShownProduct"},"ProfileSummary":{"properties":{"id":{"type":"string","pattern":"^prof_[0-9a-f]{32}$","title":"Id","description":"The profile","examples":["prof_7c9e6679742540de944be07fc1f90ae7"]},"removed":{"type":"boolean","title":"Removed","description":"True once the shopper's data was erased on a data-deletion request: no identities or contact values remain"},"removed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Removed At","description":"When the data was erased; null otherwise"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The shopper's email, lowercase; null when none was captured or the profile was removed"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"The shopper's phone in E.164; null when none was captured or the profile was removed"},"shopify_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shopify Customer Id","description":"The shopper's Shopify customer as a gid://shopify/Customer/<id> GID: known once they took a quiz logged in to the store or placed an order linked to a quiz session; null otherwise"},"quizzes":{"items":{"$ref":"#/components/schemas/ProfileQuiz"},"type":"array","title":"Quizzes","description":"The quizzes the shopper took"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At","description":"The start of the shopper's first session; null when not known"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At","description":"The latest moment the shopper was seen"},"sessions_count":{"type":"integer","title":"Sessions Count","description":"How many quiz sessions the shopper had"},"completed_count":{"type":"integer","title":"Completed Count","description":"How many of them completed"},"returning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Returning","description":"True when the shopper took a quiz again after we first knew them, on any device; null on a removed profile"},"orders_count":{"type":"integer","title":"Orders Count","description":"Orders linked to the shopper's quiz sessions"},"spent":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"What those orders came to, in the store's currency; null without orders"},"last_order_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Order At","description":"When the latest of them was placed; null without orders"}},"additionalProperties":false,"type":"object","required":["id","removed","removed_at","email","phone","shopify_customer_id","quizzes","first_seen_at","last_seen_at","sessions_count","completed_count","returning","orders_count","spent","last_order_at"],"title":"ProfileSummary"},"PublishMarker":{"properties":{"published_at":{"type":"string","format":"date-time","title":"Published At"},"day":{"type":"string","format":"date","title":"Day","description":"The publish's day in the request's timezone, the series day the marker sits on"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The version's number as the editor shows it (v14); null once the version is gone"},"approximate":{"type":"boolean","title":"Approximate","description":"True when the publish predates publish tracking and its time is the oldest saved version's"}},"additionalProperties":false,"type":"object","required":["published_at","day","version_number","approximate"],"title":"PublishMarker"},"QuizDetail":{"properties":{"id":{"type":"string","pattern":"^(quiz|pop)_[0-9a-f]{32}$","title":"Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"kind":{"$ref":"#/components/schemas/AppKind","description":"The record kind: quiz | popup"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/AppStatus"},"archived":{"type":"boolean","title":"Archived"},"published_version":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Published Version","description":"The version shoppers see; null when none is published"},"page_count":{"type":"integer","title":"Page Count","description":"How many pages the quiz's draft has"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Urls","description":"self: this quiz on the API | versions: its versions on the API | dashboard: the quiz in the editor"},"latest_version":{"anyOf":[{"$ref":"#/components/schemas/VersionSummary"},{"type":"null"}],"description":"The newest saved version, with include=latest_version only; null when none is saved"},"structure":{"$ref":"#/components/schemas/QuizStructure"}},"additionalProperties":false,"type":"object","required":["id","kind","name","status","archived","published_version","page_count","created_at","updated_at","urls","structure"],"title":"QuizDetail"},"QuizList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/QuizSummary"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"QuizList"},"QuizOverview":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"filters":{"$ref":"#/components/schemas/AnalyticsFilters"},"freshness":{"$ref":"#/components/schemas/Freshness"},"series":{"items":{"$ref":"#/components/schemas/OverviewPoint"},"type":"array","title":"Series"},"totals":{"$ref":"#/components/schemas/OverviewTotals"},"markers":{"items":{"$ref":"#/components/schemas/PublishMarker"},"type":"array","title":"Markers","description":"Every publish of the quiz, oldest first"},"live_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Live Since","description":"When the quiz was first published, UTC ISO 8601; null if it never was"},"live_since_approximate":{"type":"boolean","title":"Live Since Approximate","description":"True when the first publish predates publish tracking and live_since is the oldest saved version's time"},"data_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Start","description":"The first day the store has analytics numbers: its first recorded visit or order, or the day analytics was last reset; null before any"}},"additionalProperties":false,"type":"object","required":["quiz_id","range","filters","freshness","series","totals","markers","live_since","live_since_approximate","data_start"],"title":"QuizOverview"},"QuizRow":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/AppStatus"},"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"completion_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Completion Rate","description":"Completions as a percentage of starts, 0 to 100; null without starts"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"orders":{"type":"integer","title":"Orders","description":"Shopify orders linked to the quiz by its cart, the checkout or the email the shopper gave, by the day they were placed"},"revenue":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Checkout total of the linked orders in the store's currency, shipping and tax included, refunds not subtracted; null when no currency is known to label it with"},"attributed_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attributed Share","description":"This quiz's revenue as a percentage of all quiz-linked revenue in the store for the range, 0 to 100; null when there is none"},"avg_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Time To Complete Ms","description":"Average milliseconds from the first answer to finishing, over visits that finished on a later page than their first answer; null without one"},"median_time_to_complete_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Time To Complete Ms","description":"Median milliseconds from the first answer to finishing, an estimate over visits that finished on a later page than their first answer; null without one"}},"additionalProperties":false,"type":"object","required":["quiz_id","name","status","views","starts","completions","completion_rate","email_opt_ins","phone_opt_ins","orders","revenue","attributed_share","avg_time_to_complete_ms","median_time_to_complete_ms"],"title":"QuizRow"},"QuizStructure":{"properties":{"page_count":{"type":"integer","title":"Page Count","description":"How many pages the quiz's draft has"},"pages":{"items":{"$ref":"#/components/schemas/StructurePage"},"type":"array","title":"Pages","description":"In quiz order, the first 50","default":[]},"dimensions":{"items":{"$ref":"#/components/schemas/StructureDimension"},"type":"array","title":"Dimensions","description":"The scoring dimensions, in declared order","default":[]}},"additionalProperties":false,"type":"object","required":["page_count"],"title":"QuizStructure"},"QuizSummary":{"properties":{"id":{"type":"string","pattern":"^(quiz|pop)_[0-9a-f]{32}$","title":"Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"kind":{"$ref":"#/components/schemas/AppKind","description":"The record kind: quiz | popup"},"name":{"type":"string","title":"Name"},"status":{"$ref":"#/components/schemas/AppStatus"},"archived":{"type":"boolean","title":"Archived"},"published_version":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Published Version","description":"The version shoppers see; null when none is published"},"page_count":{"type":"integer","title":"Page Count","description":"How many pages the quiz's draft has"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Urls","description":"self: this quiz on the API | versions: its versions on the API | dashboard: the quiz in the editor"},"latest_version":{"anyOf":[{"$ref":"#/components/schemas/VersionSummary"},{"type":"null"}],"description":"The newest saved version, with include=latest_version only; null when none is saved"}},"additionalProperties":false,"type":"object","required":["id","kind","name","status","archived","published_version","page_count","created_at","updated_at","urls"],"title":"QuizSummary"},"RepublishRequest":{"properties":{"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"keep_results":{"type":"boolean","title":"Keep Results","description":"True keeps the current counting period (a formatting fix); false starts a new one","default":false}},"additionalProperties":false,"type":"object","required":["version_id"],"title":"RepublishRequest"},"RevenueTier":{"type":"string","enum":["added_from_quiz","shown_bought_later","bought_not_shown"],"title":"RevenueTier"},"StartRequest":{"properties":{"confirm":{"type":"boolean","const":true,"title":"Confirm"}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"StartRequest"},"StoreCredits":{"properties":{"limit":{"anyOf":[{"type":"integer","title":"Number of credits"},{"type":"string","const":"unlimited","title":"Unlimited"}],"title":"Limit","description":"Monthly credit cap; 'unlimited' when plan is unmetered"},"used":{"type":"integer","title":"Used","description":"Credits consumed in the current billing cycle"},"overages_enabled":{"type":"boolean","title":"Overages Enabled","description":"Whether overage charges are permitted past the limit"},"threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Threshold","description":"Hard overage cap (null when overages_enabled is false)"}},"additionalProperties":false,"type":"object","required":["limit","used","overages_enabled","threshold"],"title":"StoreCredits"},"StoreResponse":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The store's display name, as the dashboard names it"},"shop_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shop Domain","description":"The store's myshopify.com domain; null until its details sync"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"ISO code of the currency every money amount is in; null until the store's details sync"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA name of the store's own timezone, the one to read 'last week' in; null until its details sync. Analytics answer in the tz asked for, UTC by default"},"plan_class":{"type":"string","title":"Plan Class","description":"basic | plus | enterprise | paused; picks the limit table"},"limits":{"$ref":"#/components/schemas/Limits","description":"The rate limits in force for this key"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","description":"The scopes this key carries"},"credits":{"$ref":"#/components/schemas/StoreCredits","description":"The store's credits this month"}},"additionalProperties":false,"type":"object","required":["name","shop_domain","currency","timezone","plan_class","limits","scopes","credits"],"title":"StoreResponse"},"StructureComponent":{"properties":{"component_key":{"type":"string","title":"Component Key","description":"The component"},"type":{"type":"string","title":"Type","description":"What a person calls this kind of component"},"kind":{"type":"string","title":"Kind","description":"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)"},"label":{"type":"string","title":"Label","description":"The authored label or copy without markup; a copy block is cut at 500 characters"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required","description":"Present on a question the shopper cannot leave empty"},"consent_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Consent Required","description":"The marketing consent box under this input must be ticked before the shopper can continue"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/StructureOption"},"type":"array"},{"type":"null"}],"title":"Options","description":"Choice questions only, every option"},"option_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Option Count","description":"Choice questions only: how many options the question has"},"range":{"anyOf":[{"$ref":"#/components/schemas/StructureRange"},{"type":"null"}],"description":"Sliders and number inputs: the stored bounds and step"},"product_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Source","description":"Product blocks only: where the products come from: manual | rankings | points | smart"},"badges":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Badges","description":"Product blocks only: the texts of the badges on its cards, by card position then by product"},"visible_if":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"boolean"},{"type":"null"}],"title":"Visible If","description":"The authored rule, as stored"}},"additionalProperties":false,"type":"object","required":["component_key","type","kind","label"],"title":"StructureComponent"},"StructureDimension":{"properties":{"dimension_id":{"type":"string","title":"Dimension Id","description":"The dimension"},"label":{"type":"string","title":"Label","description":"Its label"}},"additionalProperties":false,"type":"object","required":["dimension_id","label"],"title":"StructureDimension"},"StructureJump":{"properties":{"rule_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Key","description":"The jump rule"},"target_page_key":{"title":"Target Page Key","description":"The stored target page key"},"condition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"boolean"},{"type":"null"}],"title":"Condition","description":"Absent on a jump that always applies"}},"additionalProperties":false,"type":"object","title":"StructureJump"},"StructureOption":{"properties":{"option_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Option Id","description":"The option"},"label":{"type":"string","title":"Label","description":"Its label"},"scores":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scores","description":"The scoring dimensions this option adds points to"}},"additionalProperties":false,"type":"object","required":["label"],"title":"StructureOption"},"StructurePage":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The page"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Its title"},"role":{"$ref":"#/components/schemas/PageRole","description":"What the page is for: start (the first page), question, loading (a loading visual), results (it shows products)"},"visible_if":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"boolean"},{"type":"null"}],"title":"Visible If","description":"The authored rule, as stored"},"component_count":{"type":"integer","title":"Component Count","description":"How many content components the page has"},"components":{"items":{"$ref":"#/components/schemas/StructureComponent"},"type":"array","title":"Components","description":"Content components in stored order, the first 40; layout, buttons and links are left out","default":[]},"jumps":{"items":{"$ref":"#/components/schemas/StructureJump"},"type":"array","title":"Jumps","description":"The page's jump rules in stored order","default":[]},"redirect":{"anyOf":[{"$ref":"#/components/schemas/StructureRedirect"},{"type":"null"}],"description":"Present on a page that sends shoppers to a link instead of showing what comes next"}},"additionalProperties":false,"type":"object","required":["page_key","role","component_count"],"title":"StructurePage"},"StructureRange":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min","description":"The lowest value"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max","description":"The highest value"},"step":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Step","description":"The step between values"}},"additionalProperties":false,"type":"object","title":"StructureRange"},"StructureRedirect":{"properties":{"url":{"type":"string","title":"Url","description":"The link shoppers are sent to; a `{{token}}` in it is filled from their answers"},"delay_seconds":{"type":"integer","title":"Delay Seconds","description":"Whole seconds the page shows before the shopper is sent"},"new_tab":{"type":"boolean","title":"New Tab","description":"Whether the link opens in a new tab"},"answer_values":{"type":"boolean","title":"Answer Values","description":"Whether a choice `{{token}}` fills with the picked option values, joined by a comma, instead of the text shoppers see"}},"additionalProperties":false,"type":"object","required":["url","delay_seconds","new_tab","answer_values"],"title":"StructureRedirect"},"SummaryCount":{"properties":{"current":{"type":"integer","title":"Current","description":"The count over the current period"},"previous":{"type":"integer","title":"Previous","description":"The count over the period of the same length just before it"},"delta_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Pct","description":"The change from previous to current as a percentage of previous; null when previous is zero"},"sparkline":{"items":{"type":"integer"},"type":"array","title":"Sparkline","description":"The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30"}},"additionalProperties":false,"type":"object","required":["current","previous","delta_pct","sparkline"],"title":"SummaryCount"},"SummaryMoney":{"properties":{"current":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"The amount over the current period; null when no currency is known to label it with"},"previous":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"The amount over the period of the same length just before it; null when no currency is known to label it with"},"delta_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Pct","description":"The change from previous to current as a percentage of previous; null when previous is zero"},"sparkline":{"items":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"type":"array","title":"Sparkline","description":"The current period in seven points, oldest first: one day each over 7 days, four or five days each over 30"}},"additionalProperties":false,"type":"object","required":["current","previous","delta_pct","sparkline"],"title":"SummaryMoney"},"TrafficRow":{"properties":{"value":{"type":"string","title":"Value","description":"The referrer host or UTM value the shopper arrived with, as text; direct for no referrer and no tags, unknown when missing, other on the overflow row"},"views":{"type":"integer","title":"Views","description":"Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted"},"starts":{"type":"integer","title":"Starts","description":"Visits where the shopper answered or stepped forward at least once"},"completions":{"type":"integer","title":"Completions","description":"Visits that finished the quiz: reached its last page and answered whatever that page requires"},"email_opt_ins":{"type":"integer","title":"Email Opt Ins","description":"Visits where the shopper submitted an email address"},"phone_opt_ins":{"type":"integer","title":"Phone Opt Ins","description":"Visits where the shopper submitted a phone number"},"unique_viewers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Viewers","description":"Distinct browsers, counted exactly; null on the overflow row"}},"additionalProperties":false,"type":"object","required":["value","views","starts","completions","email_opt_ins","phone_opt_ins","unique_viewers"],"title":"TrafficRow"},"VariantSpec":{"properties":{"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"weight":{"type":"integer","minimum":1.0,"title":"Weight","description":"The arm's share of the split, a whole number weighed against the other arm's","default":1}},"additionalProperties":false,"type":"object","required":["version_id"],"title":"VariantSpec"},"VersionCreate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Label"}},"additionalProperties":false,"type":"object","title":"VersionCreate"},"VersionList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VersionSummary"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"VersionList"},"VersionSummary":{"properties":{"id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Id","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^(quiz|pop)_[0-9a-f]{32}$","title":"Quiz Id","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"number":{"type":"integer","title":"Number","description":"The version's number as the editor shows it (v14)"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"page_count":{"type":"integer","title":"Page Count","description":"How many pages the version has"},"published":{"type":"boolean","title":"Published","description":"Whether this is the version shoppers see now"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","quiz_id","number","label","page_count","published","created_at"],"title":"VersionSummary"},"WebhookAnswer":{"properties":{"page_key":{"type":"string","title":"Page Key","description":"The page the component is on"},"kind":{"type":"string","enum":["choice","image","text","email","phone","number","date","other"],"title":"Kind","description":"What kind of answer this is"},"option_ids":{"items":{"type":"string"},"type":"array","title":"Option Ids","description":"The chosen options' ids; empty for a typed answer"},"value":{"title":"Value","description":"The answer as stored: an option id or the typed text, a JSON number for a number, a {date, time} object for a date"},"values":{"items":{"type":"string"},"type":"array","title":"Values","description":"The answer as the shopper saw it: option labels, or the typed value as text","examples":[["Blue"]]},"label":{"type":"string","title":"Label","description":"The question as the quiz labels it"}},"additionalProperties":false,"type":"object","required":["page_key","kind","option_ids","value","values","label"],"title":"WebhookAnswer"},"WebhookCreate":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url","description":"Where deliveries go: a public https address"},"topics":{"items":{"type":"string","enum":["quiz.started","quiz.finished","quiz.abandoned","identity.captured","quiz.published","experiment.started","experiment.ended","profile.created","profile.updated","export.completed","webhook.endpoint.disabled"]},"type":"array","minItems":1,"title":"Topics","description":"The topics to receive"},"include_pii":{"type":"boolean","title":"Include Pii","description":"Send contact details (identities, email and phone answers); needs profiles:read, and identity.captured needs it","default":false},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description","description":"Your own label for the endpoint, at most 200 characters"}},"additionalProperties":false,"type":"object","required":["url","topics"],"title":"WebhookCreate"},"WebhookCreated":{"properties":{"endpoint":{"$ref":"#/components/schemas/WebhookSummary","description":"The endpoint"},"secret":{"type":"string","title":"Secret","description":"The signing secret (whsec_...); shown only here"}},"additionalProperties":false,"type":"object","required":["endpoint","secret"],"title":"WebhookCreated"},"WebhookData_ExportSummary_":{"properties":{"object":{"$ref":"#/components/schemas/ExportSummary","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_ExportSummary_"},"WebhookData_WebhookDisabled_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookDisabled","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookDisabled_"},"WebhookData_WebhookExperiment_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookExperiment","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookExperiment_"},"WebhookData_WebhookIdentityCaptured_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookIdentityCaptured","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookIdentityCaptured_"},"WebhookData_WebhookPing_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookPing","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookPing_"},"WebhookData_WebhookProfile_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookProfile","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookProfile_"},"WebhookData_WebhookPublished_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookPublished","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookPublished_"},"WebhookData_WebhookSessionStarted_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookSessionStarted","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookSessionStarted_"},"WebhookData_WebhookSessionSummary_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookSessionSummary","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookSessionSummary_"},"WebhookData_WebhookSession_":{"properties":{"object":{"$ref":"#/components/schemas/WebhookSession","description":"The topic's object"}},"additionalProperties":false,"type":"object","required":["object"],"title":"WebhookData_WebhookSession_"},"WebhookDevice":{"properties":{"class":{"type":"string","title":"Class","description":"mobile | tablet | desktop"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family","description":"The device family; null when the user agent did not say"},"vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor","description":"The device vendor; null when the user agent did not say"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"The device model; null when the user agent did not say"},"browser":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Browser","description":"The browser; null when the user agent did not say"},"browser_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Browser Version","description":"The browser version; null when the user agent did not say"},"os":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os","description":"The operating system; null when the user agent did not say"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version","description":"The operating system version; null when the user agent did not say"}},"additionalProperties":false,"type":"object","required":["class","family","vendor","model","browser","browser_version","os","os_version"],"title":"WebhookDevice"},"WebhookDisabled":{"properties":{"endpoint_id":{"type":"string","pattern":"^whe_[0-9a-f]{32}$","title":"Endpoint Id","description":"The endpoint disabled","examples":["whe_7c9e6679742540de944be07fc1f90ae7"]},"reason":{"type":"string","title":"Reason","description":"gone: it answered 410 | failing_five_days: it kept failing for five days"},"disabled_at":{"type":"string","format":"date-time","title":"Disabled At","description":"When it was disabled"}},"additionalProperties":false,"type":"object","required":["endpoint_id","reason","disabled_at"],"title":"WebhookDisabled"},"WebhookEvent_ExportSummary_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_ExportSummary_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_ExportSummary_"},"WebhookEvent_WebhookDisabled_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookDisabled_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookDisabled_"},"WebhookEvent_WebhookExperiment_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookExperiment_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookExperiment_"},"WebhookEvent_WebhookIdentityCaptured_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookIdentityCaptured_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookIdentityCaptured_"},"WebhookEvent_WebhookPing_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookPing_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookPing_"},"WebhookEvent_WebhookProfile_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookProfile_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookProfile_"},"WebhookEvent_WebhookPublished_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookPublished_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookPublished_"},"WebhookEvent_WebhookSessionStarted_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookSessionStarted_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookSessionStarted_"},"WebhookEvent_WebhookSessionSummary_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookSessionSummary_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookSessionSummary_"},"WebhookEvent_WebhookSession_":{"properties":{"id":{"type":"string","pattern":"^evt_[0-9a-f]{32}$","title":"Id","description":"The event id, also sent as the webhook-id header; deduplicate on it","examples":["evt_7c9e6679742540de944be07fc1f90ae7"]},"type":{"type":"string","title":"Type","description":"The topic: quiz.started | quiz.finished | quiz.abandoned | identity.captured | quiz.published | experiment.started | experiment.ended | profile.created | profile.updated | export.completed | webhook.endpoint.disabled | ping"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the event happened"},"api_version":{"type":"string","const":"v1","title":"Api Version","description":"The payload version","default":"v1"},"data":{"$ref":"#/components/schemas/WebhookData_WebhookSession_","description":"The event's object"}},"additionalProperties":false,"type":"object","required":["id","type","created","data"],"title":"WebhookEvent_WebhookSession_"},"WebhookExperiment":{"properties":{"experiment_id":{"type":"string","pattern":"^expt_[0-9a-f]{32}$","title":"Experiment Id","description":"The experiment","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"Its quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"name":{"type":"string","title":"Name","description":"Its name"},"status":{"type":"string","enum":["running","waiting","ended"],"title":"Status","description":"Its status as the lifecycle recorded it"},"arms":{"items":{"$ref":"#/components/schemas/WebhookExperimentArm"},"type":"array","title":"Arms","description":"The arms in position order"},"winner":{"anyOf":[{"$ref":"#/components/schemas/WebhookExperimentArm"},{"type":"null"}],"description":"The arm that won; null when none did"},"period":{"type":"integer","title":"Period","description":"The counting period the event closed or opened"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"When the test started"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the test ended; null on experiment.started"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome","description":"How the test ended, on experiment.ended: winner_manual | winner_auto | winner_ai | ai_no_change | no_winner_notify | ended_manual | cancelled | reverted | plan_downgraded; null on experiment.started"}},"additionalProperties":false,"type":"object","required":["experiment_id","quiz_id","name","status","arms","winner","period","started_at","ended_at","outcome"],"title":"WebhookExperiment"},"WebhookExperimentArm":{"properties":{"arm_id":{"type":"string","pattern":"^arm_[0-9a-f]{32}$","title":"Arm Id","description":"The arm","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},"label":{"type":"string","title":"Label","description":"The arm's label"},"is_control":{"type":"boolean","title":"Is Control","description":"True for the live version the test compares against"},"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","description":"The version the arm shows","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"version_number":{"type":"integer","title":"Version Number","description":"That version's number"}},"additionalProperties":false,"type":"object","required":["arm_id","label","is_control","version_id","version_number"],"title":"WebhookExperimentArm"},"WebhookIdentity":{"properties":{"kind":{"type":"string","title":"Kind","description":"email | phone"},"value":{"type":"string","title":"Value","description":"The value as stored: the email lowercase, the phone in E.164; the text as typed is in answers"},"consent":{"type":"boolean","title":"Consent","description":"True only when the shopper ticked the marketing-consent box beside this field"},"page_key":{"type":"string","title":"Page Key","description":"The page of the field that collected it"},"component_key":{"type":"string","title":"Component Key","description":"The field that collected it"}},"additionalProperties":false,"type":"object","required":["kind","value","consent","page_key","component_key"],"title":"WebhookIdentity"},"WebhookIdentityCaptured":{"properties":{"id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Id","description":"The session's id, the same session_id the profiles API shows","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz the session ran","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"The quiz's name as the session's version carried it; null when the quiz was deleted before the delivery was built"},"version_id":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Version Id","description":"The version the session ran; null when that version row is gone"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The number of that version; null when it is gone"},"experiment_id":{"anyOf":[{"type":"string","pattern":"^expt_[0-9a-f]{32}$","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Experiment Id","description":"The A/B test the session was split into; null outside one"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id","description":"The arm the session was shown; null outside a test"},"visitor_id":{"type":"string","pattern":"^vis_[0-9a-f]{32}$","title":"Visitor Id","description":"The shopper's browser: the persistent visitor, or a visitor of this session only until analytics consent is given","examples":["vis_7c9e6679742540de944be07fc1f90ae7"]},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the session opened"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the session ended: finished, closed or idle for 30 minutes; null while it runs"},"channel":{"type":"string","title":"Channel","description":"How the shopper arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results"},"device":{"$ref":"#/components/schemas/WebhookDevice","description":"The device as parsed from the session's user agent when it opened"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","description":"The page the session opened on, origin and path without the query string; null when the embed did not report one"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source","description":"The utm_source of the page the session opened on; null when absent"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium","description":"The utm_medium of the page the session opened on; null when absent"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign","description":"The utm_campaign of the page the session opened on; null when absent"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content","description":"The utm_content of the page the session opened on; null when absent"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term","description":"The utm_term of the page the session opened on; null when absent"},"answers":{"additionalProperties":{"$ref":"#/components/schemas/WebhookAnswer"},"type":"object","title":"Answers","description":"The session's answers keyed by component_key; a component on two pages holds its last answer. Email and phone answers only on endpoints with include_pii"},"last_page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Page","description":"The page_key of the last page the shopper visited; null before any"},"answered_count":{"type":"integer","title":"Answered Count","description":"How many components answers holds"},"source_session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Source Session Id","description":"The session this one was started from: a shared result (source_kind share) or a Restart (source_kind restart); null for a session the shopper opened themselves"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind","description":"share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves","examples":["share","restart",null]},"identities":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileIdentity"},"type":"array"},{"type":"null"}],"title":"Identities","description":"Endpoints with include_pii only: the identities of the session's person"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the session completed; null on identity.captured before completion"},"results_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Results Url","description":"The link to this session's results once completed; null before"},"formulas":{"items":{"$ref":"#/components/schemas/ProfileFormula"},"type":"array","title":"Formulas","description":"The formula values the quiz computed"},"points":{"items":{"$ref":"#/components/schemas/ProfilePoints"},"type":"array","title":"Points","description":"The points per dimension the quiz computed"},"terminal_page":{"anyOf":[{"$ref":"#/components/schemas/ProfileResultPage"},{"type":"null"}],"description":"The result page the session ended on, with the products it showed; null before completion"},"products_shown":{"items":{"$ref":"#/components/schemas/WebhookProduct"},"type":"array","title":"Products Shown","description":"Every product the session showed; on quiz.finished those shown within a minute of completion"},"property_mappings":{"items":{"$ref":"#/components/schemas/WebhookPropertyMapping"},"type":"array","title":"Property Mappings","description":"The quiz's enabled question-to-property mappings for integrations; contact questions only on endpoints with include_pii"},"identity":{"$ref":"#/components/schemas/WebhookIdentity","description":"The email or phone just captured"}},"additionalProperties":false,"type":"object","required":["id","quiz_id","quiz_name","version_id","version_number","visitor_id","started_at","ended_at","channel","device","country","page_url","utm_source","utm_medium","utm_campaign","utm_content","utm_term","answers","last_page","answered_count","source_session_id","source_kind","completed_at","results_url","formulas","points","terminal_page","products_shown","property_mappings","identity"],"title":"WebhookIdentityCaptured"},"WebhookList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookSummary"},"type":"array","title":"Data","description":"The endpoints"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Send as cursor for the next page; null on the last"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_cursor"],"title":"WebhookList"},"WebhookPing":{"properties":{"endpoint_id":{"type":"string","pattern":"^whe_[0-9a-f]{32}$","title":"Endpoint Id","description":"The endpoint pinged","examples":["whe_7c9e6679742540de944be07fc1f90ae7"]}},"additionalProperties":false,"type":"object","required":["endpoint_id"],"title":"WebhookPing"},"WebhookProduct":{"properties":{"product_id":{"type":"string","title":"Product Id","description":"The product's Shopify GID","examples":["gid://shopify/Product/8692896989320"]},"variant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Id","description":"The variant's Shopify GID; null when the block showed the product only","examples":["gid://shopify/ProductVariant/40926435967056"]},"block_key":{"type":"string","title":"Block Key","description":"The product block that showed it"},"page_key":{"type":"string","title":"Page Key","description":"The page of that block"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position","description":"Its position in the block as shown; null when not recorded"},"source":{"type":"string","title":"Source","description":"How the block picked it: manual | rankings | points | smart"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle","description":"The product's handle; null when unknown"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"The product's title; null when unknown"},"variant_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Title","description":"The variant's title; null when unknown"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price","description":"The variant's price in the store's currency; null when unknown"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"The store's currency; null when unknown"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"The product's image URL; null when unknown"}},"additionalProperties":false,"type":"object","required":["product_id","variant_id","block_key","page_key","position","source","handle","title","variant_title","price","currency","image"],"title":"WebhookProduct"},"WebhookProfile":{"properties":{"id":{"type":"string","pattern":"^prof_[0-9a-f]{32}$","title":"Id","description":"The profile","examples":["prof_7c9e6679742540de944be07fc1f90ae7"]},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the profile was created"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At","description":"The start of the profile's first session; null when not known"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At","description":"The latest moment the profile was seen"},"session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Session Id","description":"The session that captured the identity behind this event; null when none did or its row is gone"},"quiz_id":{"anyOf":[{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Quiz Id","description":"That session's quiz; null with it"},"identities_from_session":{"items":{"type":"string"},"type":"array","title":"Identities From Session","description":"Every identity kind that session contributed so far (email | phone | shopify_customer_id), not only what this event changed","examples":[["email"]]},"urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Urls","description":"dashboard: the profile's page on the dashboard"},"share_orders":{"items":{"$ref":"#/components/schemas/ProfileShareOrder"},"type":"array","title":"Share Orders","description":"Orders bought through this shopper's shared results"},"identities":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileIdentity"},"type":"array"},{"type":"null"}],"title":"Identities","description":"Endpoints with include_pii only: the profile's identities"}},"additionalProperties":false,"type":"object","required":["id","created_at","first_seen_at","last_seen_at","session_id","quiz_id","identities_from_session","urls","share_orders"],"title":"WebhookProfile"},"WebhookPropertyMapping":{"properties":{"question_key":{"type":"string","title":"Question Key","description":"The question's component_key"},"question_label":{"type":"string","title":"Question Label","description":"The question as the quiz labels it"},"property_name":{"type":"string","title":"Property Name","description":"The profile property the answer is written to"},"option_values":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Option Values","description":"The value written for each option id; null when the answer is written as is"}},"additionalProperties":false,"type":"object","required":["question_key","question_label","property_name","option_values"],"title":"WebhookPropertyMapping"},"WebhookPublished":{"properties":{"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"type":"string","title":"Quiz Name","description":"The quiz's name when it was published"},"version_id":{"type":"string","pattern":"^ver_[0-9a-f]{32}$","title":"Version Id","description":"The version now live","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},"version_number":{"type":"integer","title":"Version Number","description":"That version's number"},"published_at":{"type":"string","format":"date-time","title":"Published At","description":"When it went live"}},"additionalProperties":false,"type":"object","required":["quiz_id","quiz_name","version_id","version_number","published_at"],"title":"WebhookPublished"},"WebhookRedeliverFailed":{"properties":{"since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since","description":"Redeliver the failed events created since this moment; the last 7 days when absent"}},"additionalProperties":false,"type":"object","title":"WebhookRedeliverFailed"},"WebhookRedelivered":{"properties":{"count":{"type":"integer","title":"Count","description":"How many deliveries were queued again"}},"additionalProperties":false,"type":"object","required":["count"],"title":"WebhookRedelivered"},"WebhookSecret":{"properties":{"secret":{"type":"string","title":"Secret","description":"The signing secret (whsec_...); shown only here"}},"additionalProperties":false,"type":"object","required":["secret"],"title":"WebhookSecret"},"WebhookSession":{"properties":{"id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Id","description":"The session's id, the same session_id the profiles API shows","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz the session ran","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"The quiz's name as the session's version carried it; null when the quiz was deleted before the delivery was built"},"version_id":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Version Id","description":"The version the session ran; null when that version row is gone"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The number of that version; null when it is gone"},"experiment_id":{"anyOf":[{"type":"string","pattern":"^expt_[0-9a-f]{32}$","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Experiment Id","description":"The A/B test the session was split into; null outside one"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id","description":"The arm the session was shown; null outside a test"},"visitor_id":{"type":"string","pattern":"^vis_[0-9a-f]{32}$","title":"Visitor Id","description":"The shopper's browser: the persistent visitor, or a visitor of this session only until analytics consent is given","examples":["vis_7c9e6679742540de944be07fc1f90ae7"]},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the session opened"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the session ended: finished, closed or idle for 30 minutes; null while it runs"},"channel":{"type":"string","title":"Channel","description":"How the shopper arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results"},"device":{"$ref":"#/components/schemas/WebhookDevice","description":"The device as parsed from the session's user agent when it opened"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","description":"The page the session opened on, origin and path without the query string; null when the embed did not report one"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source","description":"The utm_source of the page the session opened on; null when absent"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium","description":"The utm_medium of the page the session opened on; null when absent"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign","description":"The utm_campaign of the page the session opened on; null when absent"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content","description":"The utm_content of the page the session opened on; null when absent"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term","description":"The utm_term of the page the session opened on; null when absent"},"answers":{"additionalProperties":{"$ref":"#/components/schemas/WebhookAnswer"},"type":"object","title":"Answers","description":"The session's answers keyed by component_key; a component on two pages holds its last answer. Email and phone answers only on endpoints with include_pii"},"last_page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Page","description":"The page_key of the last page the shopper visited; null before any"},"answered_count":{"type":"integer","title":"Answered Count","description":"How many components answers holds"},"source_session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Source Session Id","description":"The session this one was started from: a shared result (source_kind share) or a Restart (source_kind restart); null for a session the shopper opened themselves"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind","description":"share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves","examples":["share","restart",null]},"identities":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileIdentity"},"type":"array"},{"type":"null"}],"title":"Identities","description":"Endpoints with include_pii only: the identities of the session's person"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the session completed; null on identity.captured before completion"},"results_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Results Url","description":"The link to this session's results once completed; null before"},"formulas":{"items":{"$ref":"#/components/schemas/ProfileFormula"},"type":"array","title":"Formulas","description":"The formula values the quiz computed"},"points":{"items":{"$ref":"#/components/schemas/ProfilePoints"},"type":"array","title":"Points","description":"The points per dimension the quiz computed"},"terminal_page":{"anyOf":[{"$ref":"#/components/schemas/ProfileResultPage"},{"type":"null"}],"description":"The result page the session ended on, with the products it showed; null before completion"},"products_shown":{"items":{"$ref":"#/components/schemas/WebhookProduct"},"type":"array","title":"Products Shown","description":"Every product the session showed; on quiz.finished those shown within a minute of completion"},"property_mappings":{"items":{"$ref":"#/components/schemas/WebhookPropertyMapping"},"type":"array","title":"Property Mappings","description":"The quiz's enabled question-to-property mappings for integrations; contact questions only on endpoints with include_pii"}},"additionalProperties":false,"type":"object","required":["id","quiz_id","quiz_name","version_id","version_number","visitor_id","started_at","ended_at","channel","device","country","page_url","utm_source","utm_medium","utm_campaign","utm_content","utm_term","answers","last_page","answered_count","source_session_id","source_kind","completed_at","results_url","formulas","points","terminal_page","products_shown","property_mappings"],"title":"WebhookSession"},"WebhookSessionStarted":{"properties":{"id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Id","description":"The session's id, the same session_id the profiles API shows","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz the session ran","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"The quiz's name as the session's version carried it; null when the quiz was deleted before the delivery was built"},"version_id":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Version Id","description":"The version the session ran; null when that version row is gone"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The number of that version; null when it is gone"},"experiment_id":{"anyOf":[{"type":"string","pattern":"^expt_[0-9a-f]{32}$","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Experiment Id","description":"The A/B test the session was split into; null outside one"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id","description":"The arm the session was shown; null outside a test"},"visitor_id":{"type":"string","pattern":"^vis_[0-9a-f]{32}$","title":"Visitor Id","description":"The shopper's browser: the persistent visitor, or a visitor of this session only until analytics consent is given","examples":["vis_7c9e6679742540de944be07fc1f90ae7"]},"channel":{"type":"string","title":"Channel","description":"How the shopper arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"The shopper's region within the country from their IP; null when unknown"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","description":"The page the session opened on, origin and path without the query string; null when the embed did not report one"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source","description":"The utm_source of the page the session opened on; null when absent"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium","description":"The utm_medium of the page the session opened on; null when absent"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign","description":"The utm_campaign of the page the session opened on; null when absent"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content","description":"The utm_content of the page the session opened on; null when absent"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term","description":"The utm_term of the page the session opened on; null when absent"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the session opened"},"device":{"$ref":"#/components/schemas/WebhookDevice","description":"The device as parsed from the session's user agent when it opened"},"source_session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Source Session Id","description":"The session this one was started from: a shared result (source_kind share) or a Restart (source_kind restart); null for a session the shopper opened themselves"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind","description":"share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves","examples":["share","restart",null]}},"additionalProperties":false,"type":"object","required":["id","quiz_id","quiz_name","version_id","version_number","visitor_id","channel","country","region","page_url","utm_source","utm_medium","utm_campaign","utm_content","utm_term","started_at","device","source_session_id","source_kind"],"title":"WebhookSessionStarted"},"WebhookSessionSummary":{"properties":{"id":{"type":"string","pattern":"^sess_[0-9a-f]{32}$","title":"Id","description":"The session's id, the same session_id the profiles API shows","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},"quiz_id":{"type":"string","pattern":"^quiz_[0-9a-f]{32}$","title":"Quiz Id","description":"The quiz the session ran","examples":["quiz_7c9e6679742540de944be07fc1f90ae7"]},"quiz_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiz Name","description":"The quiz's name as the session's version carried it; null when the quiz was deleted before the delivery was built"},"version_id":{"anyOf":[{"type":"string","pattern":"^ver_[0-9a-f]{32}$","examples":["ver_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Version Id","description":"The version the session ran; null when that version row is gone"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number","description":"The number of that version; null when it is gone"},"experiment_id":{"anyOf":[{"type":"string","pattern":"^expt_[0-9a-f]{32}$","examples":["expt_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Experiment Id","description":"The A/B test the session was split into; null outside one"},"arm_id":{"anyOf":[{"type":"string","pattern":"^arm_[0-9a-f]{32}$","examples":["arm_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Arm Id","description":"The arm the session was shown; null outside a test"},"visitor_id":{"type":"string","pattern":"^vis_[0-9a-f]{32}$","title":"Visitor Id","description":"The shopper's browser: the persistent visitor, or a visitor of this session only until analytics consent is given","examples":["vis_7c9e6679742540de944be07fc1f90ae7"]},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the session opened"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the session ended: finished, closed or idle for 30 minutes; null while it runs"},"channel":{"type":"string","title":"Channel","description":"How the shopper arrived: direct | organic_search | paid_search | organic_social | paid_social | email | sms | affiliate | display | paid_other | referral | ai_assistant | other | shared_results"},"device":{"$ref":"#/components/schemas/WebhookDevice","description":"The device as parsed from the session's user agent when it opened"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","description":"The page the session opened on, origin and path without the query string; null when the embed did not report one"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source","description":"The utm_source of the page the session opened on; null when absent"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium","description":"The utm_medium of the page the session opened on; null when absent"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign","description":"The utm_campaign of the page the session opened on; null when absent"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content","description":"The utm_content of the page the session opened on; null when absent"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term","description":"The utm_term of the page the session opened on; null when absent"},"answers":{"additionalProperties":{"$ref":"#/components/schemas/WebhookAnswer"},"type":"object","title":"Answers","description":"The session's answers keyed by component_key; a component on two pages holds its last answer. Email and phone answers only on endpoints with include_pii"},"last_page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Page","description":"The page_key of the last page the shopper visited; null before any"},"answered_count":{"type":"integer","title":"Answered Count","description":"How many components answers holds"},"source_session_id":{"anyOf":[{"type":"string","pattern":"^sess_[0-9a-f]{32}$","examples":["sess_7c9e6679742540de944be07fc1f90ae7"]},{"type":"null"}],"title":"Source Session Id","description":"The session this one was started from: a shared result (source_kind share) or a Restart (source_kind restart); null for a session the shopper opened themselves"},"source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Kind","description":"share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves","examples":["share","restart",null]},"identities":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProfileIdentity"},"type":"array"},{"type":"null"}],"title":"Identities","description":"Endpoints with include_pii only: the identities of the session's person"}},"additionalProperties":false,"type":"object","required":["id","quiz_id","quiz_name","version_id","version_number","visitor_id","started_at","ended_at","channel","device","country","page_url","utm_source","utm_medium","utm_campaign","utm_content","utm_term","answers","last_page","answered_count","source_session_id","source_kind"],"title":"WebhookSessionSummary"},"WebhookSummary":{"properties":{"id":{"type":"string","pattern":"^whe_[0-9a-f]{32}$","title":"Id","description":"The endpoint","examples":["whe_7c9e6679742540de944be07fc1f90ae7"]},"url":{"type":"string","title":"Url","description":"Where deliveries are sent"},"topics":{"items":{"type":"string","enum":["quiz.started","quiz.finished","quiz.abandoned","identity.captured","quiz.published","experiment.started","experiment.ended","profile.created","profile.updated","export.completed","webhook.endpoint.disabled"]},"type":"array","title":"Topics","description":"The topics the endpoint receives"},"status":{"type":"string","enum":["pending","active","disabled","paused_plan"],"title":"Status","description":"pending: waiting for its first successful ping | active | disabled | paused_plan: the store's plan has no API access"},"include_pii":{"type":"boolean","title":"Include Pii","description":"Whether payloads carry contact details (identities and email and phone answers)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Your own label for the endpoint; null when unset"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the endpoint was created"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When it last changed"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At","description":"When its first ping succeeded; null before"},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disabled At","description":"When it was disabled; null while enabled"},"disabled_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disabled Reason","description":"merchant: you disabled it | gone: it answered 410 | failing_five_days: it kept failing for five days; null while enabled"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures","description":"Failed deliveries in a row; a success resets it"},"failing_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failing Since","description":"When the current run of failures began; null when the last delivery succeeded","examples":["2026-09-01T12:00:00Z",null]},"last_delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Delivered At","description":"When a delivery last succeeded; null before any"}},"additionalProperties":false,"type":"object","required":["id","url","topics","status","include_pii","description","created_at","updated_at","verified_at","disabled_at","disabled_reason","consecutive_failures","failing_since","last_delivered_at"],"title":"WebhookSummary"},"WebhookUpdate":{"properties":{"topics":{"anyOf":[{"items":{"type":"string","enum":["quiz.started","quiz.finished","quiz.abandoned","identity.captured","quiz.published","experiment.started","experiment.ended","profile.created","profile.updated","export.completed","webhook.endpoint.disabled"]},"type":"array","minItems":1},{"type":"null"}],"title":"Topics","description":"The topics to receive; absent leaves them"},"include_pii":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Pii","description":"Send contact details; absent leaves it"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"false disables the endpoint, true enables it again; absent leaves it"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description","description":"Your own label; null clears it, absent leaves it"}},"additionalProperties":false,"type":"object","title":"WebhookUpdate"},"Feature":{"enum":["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"],"title":"Feature","type":"string"},"FieldError":{"additionalProperties":false,"properties":{"field":{"description":"The input that failed, as a dotted path (body.label, query.from)","title":"Field","type":"string"},"message":{"description":"Why it failed","title":"Message","type":"string"}},"required":["field","message"],"title":"FieldError","type":"object"},"PlanTier":{"description":"Declared lowest first: a tier includes what every tier before it includes.","enum":["none","basic","plus","enterprise"],"title":"PlanTier","type":"string"},"Problem":{"additionalProperties":false,"description":"The body of every non-2xx response.","properties":{"type":{"description":"A stable URI naming the error, on this API's public host","title":"Type","type":"string"},"title":{"description":"The machine-readable error code; the Errors guide lists every one","title":"Title","type":"string"},"status":{"description":"The HTTP status of the response","title":"Status","type":"integer"},"detail":{"description":"What went wrong, for people","title":"Detail","type":"string"},"request_id":{"description":"The same value as the Request-Id header; quote it to support","title":"Request Id","type":"string"},"required":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"insufficient_scope only: the scopes the route needs","title":"Required"},"retry_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"429 and 503 only: seconds to wait, as in Retry-After","title":"Retry After"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/FieldError"},"type":"array"},{"type":"null"}],"default":null,"description":"validation_error only: one entry per invalid input","title":"Errors"},"export":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"A timed-out profile search only: the url and body of the POST /v1/exports request that builds the same people as a file","title":"Export"},"feature":{"anyOf":[{"$ref":"#/components/schemas/Feature"},{"type":"null"}],"default":null,"description":"plan_required on a view the plan does not include: the feature"},"plan":{"anyOf":[{"$ref":"#/components/schemas/PlanTier"},{"type":"null"}],"default":null,"description":"plan_required on a view the plan does not include: the lowest plan with it"}},"required":["type","title","status","detail","request_id"],"title":"Problem","type":"object"}},"securitySchemes":{"ApiKey":{"type":"http","description":"An `oct_live_...` key minted on the dashboard","scheme":"bearer"}}},"tags":[{"name":"store","description":"The store behind the key: plan, limits and credits."},{"name":"quizzes","description":"Quizzes and their versions: list, read, archive, delete, create and publish a version."},{"name":"experiments","description":"Experiments: settings, lifecycle, complete results and attention rows."},{"name":"analytics","description":"Aggregated quiz analytics: overview, breakdowns, funnel, paths, products, answers and traffic."},{"name":"profiles","description":"Shopper profiles: list, find by what they answered, and read one."},{"name":"exports","description":"CSV exports of profiles, responses and quiz analytics, built in the background."},{"name":"webhooks","description":"Webhook endpoints, their deliveries and the events they can carry."}],"x-tagGroups":[{"name":"Store","tags":["store"]},{"name":"Quizzes","tags":["quizzes"]},{"name":"Experiments","tags":["experiments"]},{"name":"Analytics","tags":["analytics"]},{"name":"People","tags":["profiles"]},{"name":"Exports","tags":["exports"]},{"name":"Webhooks","tags":["webhooks"]}]}