---
title: "List Events"
method: GET
path: "/events"
tags: ["Events"]
---

# List Events

`GET /events`

Lists identity-linked events, most recent first by default. Pass identifier for one person's journey, or omit it to list events for an account within an explicit time range. Pass direction=asc to read a journey forwards from where it starts. Events are shaped like the POST /events intake: attribution in context, identity in user.

## Query parameters

- `identifier` string
- `account_id` string
- `from` string, date-time
- `to` string, date-time
- `first` integer
- `after` string
- `before` string
- `direction` 'asc' | 'desc'
- `event` string
- `source` string
- `attribution_model` 'last_touch' | 'first_touch'
- `country` string
- `city` string
- `device` string
- `browser` string
- `os` string
- `utm_source` string
- `hostname` string
- `page` string

## Response `200`

events listed oldest first

- object
  - `data` object[], required
    - `context` object, nullable
      - `ad_campaign_id` string, nullable
      - `ad_click_id` string, nullable — Stable identity for the ad click this event belongs to. Every event from one click carries the same value, so events group into clicks without re-deriving them.
      - `ad_click_type` string, nullable — How the ad click was identified: the network's click-id param (`fbclid`, `ttclid`, `gclid`, `gbraid`, `wbraid`, `twclid`) or `synthetic` when the click carried none.
      - `ad_id` string, nullable
      - `ad_set_id` string, nullable
      - `source_type` 'ad_click' | 'lead_form' | 'external_ad_click' | 'referrer' | 'null', nullable — How this event counts as an acquisition touch, using the same rule attribution credits a conversion with. `ad_click` and `lead_form` resolved to a Whop ad; `external_ad_click` is a paid click on a campaign run outside Whop; `referrer` is organic. Null when the event is not a touch.
      - `utm_campaign` string, nullable
      - `utm_content` string, nullable
      - `utm_medium` string, nullable
      - `utm_source` string, nullable
      - `utm_term` string, nullable
    - `currency` string, nullable
    - `custom_name` string, nullable
    - `event_id` string, required
    - `event_name` string, required
    - `event_time` string, date-time, required
    - `id` string, required
    - `path` string, nullable
    - `person_id` string, required
    - `questions` object[], nullable
      - `answer` string, nullable
      - `id` string, nullable
      - `key` string, nullable
      - `options` string[], nullable
      - `question` string, nullable
      - `type` string, nullable
    - `recommended_action_chain_id` string, nullable
    - `recommended_action_shown_position` integer, nullable
    - `referrer_url` string, nullable
    - `related` object, nullable — Hydrated details for the records this event references. Only present keys resolved.
      - `account` object, nullable
        - `id` string
        - `logo_url` string, nullable
        - `route` string, nullable
        - `title` string, nullable
      - `ad` object, nullable — The Whop ad this event's click resolved to.
        - `id` string
        - `thumbnail_url` string, nullable
        - `title` string, nullable
      - `ad_campaign` object, nullable — The Whop ad campaign this event's click resolved to, read from the ad entity tree rather than the click's url params.
        - `id` string
        - `platform` string, nullable
        - `title` string, nullable
      - `ad_group` object, nullable — The Whop ad group this event's click resolved to.
        - `id` string
        - `title` string, nullable
      - `app` object, nullable
        - `domain_id` string, nullable
        - `icon_url` string, nullable
        - `id` string
        - `title` string, nullable
      - `audience` object, nullable — The saved audience this event came from. Present on the identify events an audience ingest writes for each of its members.
        - `audience_type` 'custom' | 'lookalike' | 'null', nullable
        - `file_name` string, nullable
        - `id` string
        - `source_type` 'csv_upload' | 'people_filter' | 'engagement' | 'null', nullable
        - `title` string, nullable
      - `payment` object, nullable
        - `card_brand` string, nullable
        - `card_last4` string, nullable
        - `id` string
        - `line_items` ReceiptLineItem[] — Everything this payment charged for, in purchase order, including quantities. Older payments fall back to their original plan.
          - `id` string, nullable, required — Line item ID, prefixed `li_`. Null when the payment predates item snapshots and the item is read from the payment's plan.
          - `label` string, nullable, required — The item's name as shown at checkout — the product title, else the plan title.
          - `plan_id` string, nullable, required — The plan bought, prefixed `plan_`. Null when the plan has since been deleted.
          - `plan_title` string, nullable, required — The plan's current title, or `null` when the plan has been deleted or has no title.
          - `product_id` string, nullable, required — The product the plan belongs to, prefixed `prod_`. On a payment that predates item snapshots this falls back to the plan's product, so it can be set where the parent's own `product_id` is null. Null for a plan with no product.
          - `product_title` string, nullable, required — The product's current title, or `null` when the item has no product.
          - `quantity` number, required — How many units were bought.
          - `subtotal` Money, required
            - `amount` string, required — The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
            - `currency` string, required — Three-letter ISO 4217 currency code, lowercase.
            - `decimals` integer, required — How many decimal places the amount CARRIES — the precision the charge itself runs at.
            - `display_decimals` integer, required — How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
        - `provider` string, nullable
      - `plan` object, nullable
        - `billing_period` integer, nullable
        - `currency` string, nullable
        - `id` string
        - `initial_price` number, nullable
        - `renewal_price` number, nullable
        - `title` string, nullable
      - `product` object, nullable
        - `id` string
        - `route` string, nullable
        - `title` string, nullable
      - `user` object, nullable
        - `avatar_url` string, nullable
        - `id` string
        - `name` string, nullable
        - `username` string, nullable
    - `total_usd_amount` number, nullable
    - `url` string, nullable
    - `user` object, nullable
      - `city` string, nullable
      - `country` string, nullable
      - `email` string, nullable
      - `first_name` string, nullable
      - `last_name` string, nullable
      - `name` string, nullable
      - `phone` string, nullable
    - `value` number, nullable
  - `page_info` object, required
    - `end_cursor` string, nullable
    - `has_next_page` boolean, required
    - `has_previous_page` boolean, required
    - `start_cursor` string, nullable

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized

## Changes

> 63 revisions in range; 1 not diffed.

- **2026-09-18** `355991ab86d5` — 2 info
  - the security scope `company:basic:read` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `member:journey:read` was removed from the endpoint's security scheme `bearerAuth`
- **2026-09-17** `076176906e3f` — 2 info
  - the security scope `company:basic:read` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `member:journey:read` was removed from the endpoint's security scheme `bearerAuth`
- **2026-09-17** `ef86d14ef691` — 3 info
  - the security scope `company:basic:read` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `member:journey:read` was removed from the endpoint's security scheme `bearerAuth`
  - added the optional property `data/items/related/payment/line_items` to the response with the `200` status
- **2026-09-16** `ff3a76573563` — 1 breaking, 1 warning, 2 info
  - for the `query` request parameter `first`, default value `500` was added
  - for the `query` request parameter `first`, the max was set to `500.00`
  - the security scope `company:basic:read` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `member:journey:read` was removed from the endpoint's security scheme `bearerAuth`
- …earlier changes not shown

[Full history](https://skmtc.dev/whop/apis/whop-api/changes/events/get.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/355991ab86d5?raw)
