---
title: "Page event"
method: POST
path: "/analytics/page"
tags: ["Analytics"]
---

# Page event

`POST /analytics/page`

## Request body

- union — Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads
  - object — Schema for tracking an analytics event. Excludes system-generated fields
    - `eventId` string, required — Event being tracked (evt_123)
    - `teamId` string, required — Team ID (team_123)
    - `promoterId` string, required — Promoter ID (pmt_123)
    - `eventType` 'Page Viewed' | 'Screen Viewed' | 'Products Searched' | 'Product List Viewed' | 'Product List Filtered' | 'Promotion Viewed' | 'Promotion Clicked' | 'Product Clicked' | 'Product Viewed' | 'Product Added' | 'Product Removed' | 'Cart Viewed' | 'Checkout Started' | 'Checkout Step Viewed' | 'Checkout Step Completed' | 'Payment Info Entered' | 'Order Completed' | 'Order Updated' | 'Order Refunded' | 'Order Cancelled' | 'Coupon Entered' | 'Coupon Applied' | 'Coupon Denied' | 'Coupon Removed' | 'Product Added to Wishlist' | 'Product Removed from Wishlist' | 'Wishlist Product Added to Cart' | 'Product Shared' | 'Cart Shared' | 'Product Reviewed', required
    - `properties` object, required
      - `query` union
        - string
        - object
      - `list_id` string
      - `category` string
      - `filters` object[]
        - `type` string, required
        - `value` string, required
      - `sorts` object[]
        - `type` string, required
        - `value` string, required
      - `promotion_id` string
      - `creative` string
      - `name` string
      - `position` union
        - string
        - number
      - `product_id` string
      - `sku` string
      - `brand` string
      - `variant` string
      - `price` number — Product price in major currency units
      - `quantity` number
      - `coupon` string
      - `currency` string — ISO 4217 currency code
      - `value` number — Event value in major currency units
      - `url` string
      - `image_url` string
      - `cart_id` string
      - `step` number
      - `shipping_method` string
      - `payment_method` string
      - `ticketing_mode` 'internal' | 'external'
      - `external_ticket_url` string
      - `external_ticket_domain` string
      - `cta_surface` string
      - `order_id` string
      - `affiliation` string
      - `subtotal` number — Order subtotal in major currency units
      - `total` number — Order total in major currency units
      - `revenue` number — Order revenue in major currency units
      - `shipping` number — Shipping amount in major currency units
      - `tax` number — Tax amount in major currency units
      - `discount` number — Discount amount in major currency units
      - `coupon_id` string
      - `coupon_name` string
      - `reason` string
      - `wishlist_id` string
      - `wishlist_name` string
      - `share_via` string
      - `share_message` string
      - `recipient` string
      - `review_id` string
      - `review_body` string
      - `rating` string
      - `products` object[]
        - `product_id` string — admission_id in ticketing context
        - `sku` string — admission_id or admission_name
        - `category` string — event_name or "Admission"
        - `name` string — admission_name
        - `brand` string — promoter_name
        - `variant` string — section_name
        - `price` number — admission price (base + booking fee) in major currency units
        - `quantity` number — number of tickets
        - `coupon` string — coupon code applied
        - `position` number — position in list
        - `url` string — URL to event/admission page
        - `image_url` string — event image
        - `admission_id` string — Explicit admission ID
        - `section_id` string — Section ID if applicable
        - `event_id` string — Event ID for this admission
        - `promoter_id` string — Promoter ID
        - `price_base` number, nullable — Base price before fees in minor currency units
        - `price_booking_fee` number, nullable — Booking fee in minor currency units
        - `capacity` number — Total capacity for this admission
        - `available` number — Remaining tickets available
        - `sold` number — Tickets already sold
      - `event_id` string — ID of the ticketed event (evt_xxx)
      - `event_name` string — Name of the ticketed event
      - `event_slug` string — URL slug of event
      - `event_starts_at` string — When the event starts (naive datetime, no timezone)
      - `event_ends_at` string — When the event ends (naive datetime, no timezone)
      - `event_status` 'UPCOMING' | 'LIVE' | 'ENDED' | 'CANCELLED'
      - `event_visibility` 'PUBLIC' | 'PRIVATE'
      - `event_location` string — Venue name
      - `event_city` string — Venue city
      - `event_country` string — Venue country
      - `promoter_id` string — ID of the promoter (pmt_xxx)
      - `promoter_name` string — Name of the promoter
      - `promoter_slug` string — URL slug of promoter
      - `admission_id` string — ID of admission type (adm_xxx)
      - `admission_name` string — Name of admission (e.g., "General Admission")
      - `admission_capacity` number — Total capacity for this admission
      - `admission_available` number — Tickets still available
      - `admission_sold` number — Tickets already sold
      - `section_id` string — ID of section (sct_xxx)
      - `section_name` string — Name of section (e.g., "VIP", "General")
      - `section_capacity` number — Total capacity for this section
      - `section_available` number — Spots still available in section
      - `ticket_id` string — Individual ticket ID (tkt_xxx)
      - `ticket_status` 'VALID' | 'REDEEMED' | 'CANCELLED'
      - `tickets_quantity` number — Number of tickets in transaction
      - `customer_id` string — Customer ID (cus_xxx)
      - `customer_email` string — Customer email
      - `customer_first_name` string
      - `customer_last_name` string
      - `price_base` number, nullable — Base price before fees in minor currency units
      - `price_booking_fee` number, nullable — Booking fee amount in minor currency units
      - `price_discount_amount` number, nullable — Discount amount applied in minor currency units
      - `sale_starts_at` string — When tickets go on sale (naive datetime, no timezone)
      - `sale_ends_at` string — When ticket sales end (naive datetime, no timezone)
      - `entry_starts_at` string — When entry to event begins (naive datetime, no timezone)
      - `entry_ends_at` string — When entry to event ends (naive datetime, no timezone)
      - `funnel_step` string — Current funnel step (e.g., "browse", "cart", "checkout")
      - `time_to_purchase` number — Seconds from first view to purchase
      - `session_duration` number — Total session duration in seconds
      - `referrer_type` 'DIRECT' | 'SOCIAL' | 'EMAIL' | 'SEARCH' | 'REFERRAL' | 'AD'
      - `campaign_id` string — Marketing campaign ID
      - `affiliate_id` string — Affiliate partner ID
      - `promo_code_used` string — Promotional code applied
      - `platform` 'WEB' | 'MOBILE_WEB' | 'IOS' | 'ANDROID'
      - `app_version` string
      - `device_type` 'MOBILE' | 'TABLET' | 'DESKTOP'
      - `anonymous_id` string
      - `browser` string
      - `browser_session_id` string
      - `country` string
      - `page_path` string
      - `page_title` string
      - `page_url` string
      - `referrer` string
      - `region` string
      - `user_agent` string
      - `utm_source` string
      - `utm_medium` string
      - `utm_campaign` string
      - `utm_term` string
      - `utm_content` string
    - `context` object, required
      - `session_id` string, required
      - `user_id` string
      - `anonymous_id` string
      - `utm_source` string
      - `utm_medium` string
      - `utm_campaign` string
      - `utm_term` string
      - `utm_content` string
      - `page` object, required
        - `url` string, required
        - `path` string, required
        - `title` string, required
      - `referrer` string
      - `user_agent` string
      - `ip` string
      - `geo` object
        - `country` string — Country code (e.g., "AU")
        - `countryName` string — Country name (e.g., "Australia")
        - `region` string — State/province code
        - `regionName` string — State/province name (e.g., "New South Wales")
        - `city` string — City name
        - `latitude` string — Latitude
        - `longitude` string — Longitude
      - `fbc` string — Facebook click ID
      - `fbp` string — Facebook browser ID
      - `ttclid` string — TikTok click ID
    - `productId` string
    - `messageId` string — Analytics message id for retry-safe event delivery and linking.
    - `occurredAt` string, date-time — Client-observed event time. Server ingest time remains authoritative for writes.
  - object — Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization
    - `eventName` string
    - `eventType` 'Page Viewed' | 'Screen Viewed' | 'Products Searched' | 'Product List Viewed' | 'Product List Filtered' | 'Promotion Viewed' | 'Promotion Clicked' | 'Product Clicked' | 'Product Viewed' | 'Product Added' | 'Product Removed' | 'Cart Viewed' | 'Checkout Started' | 'Checkout Step Viewed' | 'Checkout Step Completed' | 'Payment Info Entered' | 'Order Completed' | 'Order Updated' | 'Order Refunded' | 'Order Cancelled' | 'Coupon Entered' | 'Coupon Applied' | 'Coupon Denied' | 'Coupon Removed' | 'Product Added to Wishlist' | 'Product Removed from Wishlist' | 'Wishlist Product Added to Cart' | 'Product Shared' | 'Cart Shared' | 'Product Reviewed'
    - `eventId` string
    - `teamId` string
    - `promoterId` string
    - `properties` object
    - `context` object
      - `session_id` string
      - `user_id` string
      - `anonymous_id` string
      - `utm_source` string
      - `utm_medium` string
      - `utm_campaign` string
      - `utm_term` string
      - `utm_content` string
      - `page` object
        - `url` string, required
        - `path` string, required
        - `title` string, required
      - `referrer` string
      - `user_agent` string
      - `ip` string
      - `geo` object
        - `country` string — Country code (e.g., "AU")
        - `countryName` string — Country name (e.g., "Australia")
        - `region` string — State/province code
        - `regionName` string — State/province name (e.g., "New South Wales")
        - `city` string — City name
        - `latitude` string — Latitude
        - `longitude` string — Longitude
      - `fbc` string — Facebook click ID
      - `fbp` string — Facebook browser ID
      - `ttclid` string — TikTok click ID
    - `legacyContext` object
      - `legacyOrgId` string, required
      - `legacyEventId` string, required
      - `legacyTeamId` string, required
      - `legacyEventName` string
      - `legacyEventSlug` string
      - `legacyEventCreatedAt` union
        - string
        - string, date-time
      - `legacyTeamCreatedAt` union
        - string
        - string, date-time

## Response `200`

OK

- object
  - `id` string, required
  - `eventId` string, required — Event being tracked (evt_123)
  - `teamId` string, required — Team ID (team_123)
  - `promoterId` string, required — Promoter ID (pmt_123)
  - `eventType` 'Page Viewed' | 'Screen Viewed' | 'Products Searched' | 'Product List Viewed' | 'Product List Filtered' | 'Promotion Viewed' | 'Promotion Clicked' | 'Product Clicked' | 'Product Viewed' | 'Product Added' | 'Product Removed' | 'Cart Viewed' | 'Checkout Started' | 'Checkout Step Viewed' | 'Checkout Step Completed' | 'Payment Info Entered' | 'Order Completed' | 'Order Updated' | 'Order Refunded' | 'Order Cancelled' | 'Coupon Entered' | 'Coupon Applied' | 'Coupon Denied' | 'Coupon Removed' | 'Product Added to Wishlist' | 'Product Removed from Wishlist' | 'Wishlist Product Added to Cart' | 'Product Shared' | 'Cart Shared' | 'Product Reviewed', required
  - `timestamp` string, required
  - `date` string, required — YYYY-MM-DD
  - `hour` integer, required
  - `properties` object, required
    - `query` union
      - string
      - object
    - `list_id` string
    - `category` string
    - `filters` object[]
      - `type` string, required
      - `value` string, required
    - `sorts` object[]
      - `type` string, required
      - `value` string, required
    - `promotion_id` string
    - `creative` string
    - `name` string
    - `position` union
      - string
      - number
    - `product_id` string
    - `sku` string
    - `brand` string
    - `variant` string
    - `price` number — Product price in major currency units
    - `quantity` number
    - `coupon` string
    - `currency` string — ISO 4217 currency code
    - `value` number — Event value in major currency units
    - `url` string
    - `image_url` string
    - `cart_id` string
    - `step` number
    - `shipping_method` string
    - `payment_method` string
    - `ticketing_mode` 'internal' | 'external'
    - `external_ticket_url` string
    - `external_ticket_domain` string
    - `cta_surface` string
    - `order_id` string
    - `affiliation` string
    - `subtotal` number — Order subtotal in major currency units
    - `total` number — Order total in major currency units
    - `revenue` number — Order revenue in major currency units
    - `shipping` number — Shipping amount in major currency units
    - `tax` number — Tax amount in major currency units
    - `discount` number — Discount amount in major currency units
    - `coupon_id` string
    - `coupon_name` string
    - `reason` string
    - `wishlist_id` string
    - `wishlist_name` string
    - `share_via` string
    - `share_message` string
    - `recipient` string
    - `review_id` string
    - `review_body` string
    - `rating` string
    - `products` object[]
      - `product_id` string — admission_id in ticketing context
      - `sku` string — admission_id or admission_name
      - `category` string — event_name or "Admission"
      - `name` string — admission_name
      - `brand` string — promoter_name
      - `variant` string — section_name
      - `price` number — admission price (base + booking fee) in major currency units
      - `quantity` number — number of tickets
      - `coupon` string — coupon code applied
      - `position` number — position in list
      - `url` string — URL to event/admission page
      - `image_url` string — event image
      - `admission_id` string — Explicit admission ID
      - `section_id` string — Section ID if applicable
      - `event_id` string — Event ID for this admission
      - `promoter_id` string — Promoter ID
      - `price_base` number, nullable — Base price before fees in minor currency units
      - `price_booking_fee` number, nullable — Booking fee in minor currency units
      - `capacity` number — Total capacity for this admission
      - `available` number — Remaining tickets available
      - `sold` number — Tickets already sold
    - `event_id` string — ID of the ticketed event (evt_xxx)
    - `event_name` string — Name of the ticketed event
    - `event_slug` string — URL slug of event
    - `event_starts_at` string — When the event starts (naive datetime, no timezone)
    - `event_ends_at` string — When the event ends (naive datetime, no timezone)
    - `event_status` 'UPCOMING' | 'LIVE' | 'ENDED' | 'CANCELLED'
    - `event_visibility` 'PUBLIC' | 'PRIVATE'
    - `event_location` string — Venue name
    - `event_city` string — Venue city
    - `event_country` string — Venue country
    - `promoter_id` string — ID of the promoter (pmt_xxx)
    - `promoter_name` string — Name of the promoter
    - `promoter_slug` string — URL slug of promoter
    - `admission_id` string — ID of admission type (adm_xxx)
    - `admission_name` string — Name of admission (e.g., "General Admission")
    - `admission_capacity` number — Total capacity for this admission
    - `admission_available` number — Tickets still available
    - `admission_sold` number — Tickets already sold
    - `section_id` string — ID of section (sct_xxx)
    - `section_name` string — Name of section (e.g., "VIP", "General")
    - `section_capacity` number — Total capacity for this section
    - `section_available` number — Spots still available in section
    - `ticket_id` string — Individual ticket ID (tkt_xxx)
    - `ticket_status` 'VALID' | 'REDEEMED' | 'CANCELLED'
    - `tickets_quantity` number — Number of tickets in transaction
    - `customer_id` string — Customer ID (cus_xxx)
    - `customer_email` string — Customer email
    - `customer_first_name` string
    - `customer_last_name` string
    - `price_base` number, nullable — Base price before fees in minor currency units
    - `price_booking_fee` number, nullable — Booking fee amount in minor currency units
    - `price_discount_amount` number, nullable — Discount amount applied in minor currency units
    - `sale_starts_at` string — When tickets go on sale (naive datetime, no timezone)
    - `sale_ends_at` string — When ticket sales end (naive datetime, no timezone)
    - `entry_starts_at` string — When entry to event begins (naive datetime, no timezone)
    - `entry_ends_at` string — When entry to event ends (naive datetime, no timezone)
    - `funnel_step` string — Current funnel step (e.g., "browse", "cart", "checkout")
    - `time_to_purchase` number — Seconds from first view to purchase
    - `session_duration` number — Total session duration in seconds
    - `referrer_type` 'DIRECT' | 'SOCIAL' | 'EMAIL' | 'SEARCH' | 'REFERRAL' | 'AD'
    - `campaign_id` string — Marketing campaign ID
    - `affiliate_id` string — Affiliate partner ID
    - `promo_code_used` string — Promotional code applied
    - `platform` 'WEB' | 'MOBILE_WEB' | 'IOS' | 'ANDROID'
    - `app_version` string
    - `device_type` 'MOBILE' | 'TABLET' | 'DESKTOP'
    - `anonymous_id` string
    - `browser` string
    - `browser_session_id` string
    - `country` string
    - `page_path` string
    - `page_title` string
    - `page_url` string
    - `referrer` string
    - `region` string
    - `user_agent` string
    - `utm_source` string
    - `utm_medium` string
    - `utm_campaign` string
    - `utm_term` string
    - `utm_content` string
  - `context` object, required
    - `session_id` string, required
    - `user_id` string
    - `anonymous_id` string
    - `utm_source` string
    - `utm_medium` string
    - `utm_campaign` string
    - `utm_term` string
    - `utm_content` string
    - `page` object, required
      - `url` string, required
      - `path` string, required
      - `title` string, required
    - `referrer` string
    - `user_agent` string
    - `ip` string
    - `geo` object
      - `country` string — Country code (e.g., "AU")
      - `countryName` string — Country name (e.g., "Australia")
      - `region` string — State/province code
      - `regionName` string — State/province name (e.g., "New South Wales")
      - `city` string — City name
      - `latitude` string — Latitude
      - `longitude` string — Longitude
    - `fbc` string — Facebook click ID
    - `fbp` string — Facebook browser ID
    - `ttclid` string — TikTok click ID
  - `productId` string
  - `createdAt` string, required
  - `updatedAt` string, required

## Other responses

- `400` — 400
- `401` — 401
- `403` — 403
- `404` — 404
- `409` — 409
- `412` — 412
- `422` — 422
- `429` — 429
- `500` — 500
- `501` — 501
- `503` — 503

---

[API](https://skmtc.net/session/apis/session-services-api.md) · [All operations](https://skmtc.net/session/apis/session-services-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/session/session-services-api/revisions/b7e11f398fe0/schema)
