---
title: "A shopper started a quiz"
method: POST
path: "quiz.started"
tags: ["webhooks"]
---

# A shopper started a quiz

`POST quiz.started` (webhook)

Once per session, on the shopper's first move forward or first collected answer. Carries the start only: no answers and no identities.

## Payload

- WebhookEventWebhookSessionStarted
  - `id` string, required: The event id, also sent as the webhook-id header; deduplicate on it
  - `type` string, required: 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` string, date-time, required: When the event happened
  - `api_version` 'v1': The payload version
  - `data` WebhookDataWebhookSessionStarted, required
    - `object` WebhookSessionStarted, required
      - `id` string, required: The session's id, the same session_id the profiles API shows
      - `quiz_id` string, required: The quiz the session ran
      - `quiz_name` string, nullable, required: The quiz's name as the session's version carried it; null when the quiz was deleted before the delivery was built
      - `version_id` string, nullable, required: The version the session ran; null when that version row is gone
      - `version_number` integer, nullable, required: The number of that version; null when it is gone
      - `experiment_id` string, nullable: The A/B test the session was split into; null outside one
      - `arm_id` string, nullable: The arm the session was shown; null outside a test
      - `visitor_id` string, required: The shopper's browser: the persistent visitor, or a visitor of this session only until analytics consent is given
      - `channel` string, required: 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` string, nullable, required: The shopper's country from their IP, ISO 3166-1 alpha-2; null when unknown
      - `region` string, nullable, required: The shopper's region within the country from their IP; null when unknown
      - `page_url` string, nullable, required: The page the session opened on, origin and path without the query string; null when the embed did not report one
      - `utm_source` string, nullable, required: The utm_source of the page the session opened on; null when absent
      - `utm_medium` string, nullable, required: The utm_medium of the page the session opened on; null when absent
      - `utm_campaign` string, nullable, required: The utm_campaign of the page the session opened on; null when absent
      - `utm_content` string, nullable, required: The utm_content of the page the session opened on; null when absent
      - `utm_term` string, nullable, required: The utm_term of the page the session opened on; null when absent
      - `started_at` string, date-time, required: When the session opened
      - `device` WebhookDevice, required
        - `class` string, required: mobile | tablet | desktop
        - `family` string, nullable, required: The device family; null when the user agent did not say
        - `vendor` string, nullable, required: The device vendor; null when the user agent did not say
        - `model` string, nullable, required: The device model; null when the user agent did not say
        - `browser` string, nullable, required: The browser; null when the user agent did not say
        - `browser_version` string, nullable, required: The browser version; null when the user agent did not say
        - `os` string, nullable, required: The operating system; null when the user agent did not say
        - `os_version` string, nullable, required: The operating system version; null when the user agent did not say
      - `source_session_id` string, nullable, required: 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` string, nullable, required: share: started from a shared result | restart: started by Restart; null for a session the shopper opened themselves

## Acknowledgement `200`

Any 2xx within 10 seconds acknowledges the event

## Other responses

- `4XX`: 410 ends the delivery and disables the endpoint; any other 4xx but 408 and 429 ends it
- `5XX`: Retried, as are 408, 429, a timeout and a network error: seven retries over about 28 hours, then the delivery is dead

---

[API](https://skmtc.dev/octaneai/apis/octane-ai-merchant-api.md) - [All operations](https://skmtc.dev/octaneai/apis/octane-ai-merchant-api/llms.txt) - [OpenAPI document](https://skmtc.dev/octaneai/apis/octane-ai-merchant-api/revisions/dc2d1aa2b7c6?raw)
