---
title: "List Contact Events"
method: GET
path: "/contacts/{contact_id}/events"
tags: ["Contacts::Event"]
---

# List Contact Events

`GET /contacts/{contact_id}/events`

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/contacts/{contact_id}/events`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts.myclickfunnels.com/oauth/authorize`
    - Token URL: `https://accounts.myclickfunnels.com/oauth/token`
- TypeScript: <https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/contacts/:contact_id/events/get.ts> (a function with typed inputs; its response is checked against the schema)

Read the Event rows used by the contact Activity tab. MessageHub conversation rows are excluded. Numeric and public IDs are accepted. Ordered by created_at then id (ascending by default, desc for latest activity). Pagination-Next is the row id. sort_property is not supported (422). Unfiltered or multi-type reads are refused with 422 above 50,000 events; pass a single filter[type] key to read such a contact.

## Path parameters

- `contact_id` string, required

## Query parameters

- `after` string
- `per_page` integer
- `sort_order` 'asc' | 'desc'
- `filter` object
  - `type` string: Comma-separated event type keys. Unknown keys match no events.

## Response `200`

OK

- ContactsEventAttributes[]
  - `id` integer
  - `public_id` string
  - `contact_id` integer
  - `type_key` string, nullable: Event type key.
  - `type_label` string, nullable: Label of the resolved event type.
  - `occurred_at` string, date-time: Tracked occurrence time, falling back to created_at; can differ from list order.
  - `actor_id` integer, nullable: User ID, resolvable through GET /api/v2/users/{id}; null for contact or system activity.
  - `data` unknown
  - `created_at` string, date-time
  - `order_id` integer, nullable
  - `orders_transaction_id` integer, nullable
  - `product_id` integer, nullable
  - `workflow_id` integer, nullable
  - `workflows_step_id` integer, nullable
  - `broadcast_id` integer, nullable
  - `course_id` integer, nullable
  - `courses_section_id` integer, nullable
  - `courses_lesson_id` integer, nullable
  - `page_id` integer, nullable
  - `visit_id` integer, nullable
  - `contacts_tag_id` integer, nullable
  - `sales_opportunity_id` integer, nullable
  - `calendar_event_id` integer, nullable
  - `url_redirect_id` integer, nullable

## Other responses

- `400`: Bad Request - filter is not an object, or names a key other than type.
- `401`: Unauthorized
- `403`: Forbidden — this request's workspace is closed to it. Three cases return this: * The access token is limited to specific workspaces (see the workspace selection made when the key was provisioned, or the workspaces approved on the OAuth consent screen) and the request acts on a workspace outside that set. * The access token is limited to specific workspaces and the request's workspace could not be determined at all. The gate is fail-closed, so a workspace-limited token is denied rather than allowed through when the target workspace is ambiguous. * The workspace's team has no active ClickFunnels subscription: it was canceled, is paused, or is locked out after failed payments. Reads and writes are both refused until the subscription is reactivated, and the body carries `"code": "subscription_inactive"`. A token with no workspace restriction never receives the first two.
- `404`: Not Found
- `422`: Unprocessable Entity. The `per_page` value must be a positive integer.

## Changes

- **2026-11-03** `511d88b30aea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/changes/contacts/:contact_id/events/get.md)

---

[API](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api.md) - [All operations](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/llms.txt) - [OpenAPI document](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/revisions/511d88b30aea?raw)
