List Events
Events
List Events
Retrieve a paginated list of events with optional attribution filtering
GET
List Events
Overview
This endpoint allows you to retrieve a list of events from Cometly with powerful filtering capabilities including date ranges, attribution models, sources, and field selection. Results are cursor-paginated for efficient data retrieval.Query Parameters
Required Parameters
string
required
Start date for the query range in
YYYY-MM-DD HH:MM:SS format. The timestamp is interpreted in your space’s timezone.
Example: 2024-01-01 00:00:00string
required
End date for the query range in
YYYY-MM-DD HH:MM:SS format. Must be after start_date and is interpreted in your space’s timezone.
Example: 2024-01-31 23:59:59Optional Parameters
string
default:"profile"
Determines whether to report metrics by contact or company level.Options:
profile- Contact-level events (default)company- Company-level events
string[]
Filter results to specific event names. Defaults to all events when omitted.Limits: Minimum 1, maximum 10 event names. Duplicate values are not allowed.Values:
add_payment_infoadd_to_cartcomplete_registrationcontactinitiate_checkoutlead_generatedpurchaseschedulesign_upstart_trialsubmit_applicationsubscribeupsell_purchaseview_contentwebinar_registration
custom_event_1 through custom_event_50.string[]
Filter events by traffic sources. When provided,
attribution_model and attribution_window become required.Limits: Minimum 1, maximum 15 sources. Duplicate values are not allowed.Available sources
Available sources
Paid Ads:
facebook_ads, google_ads, linkedin_ads, tiktok_ads, youtube_ads, instagram_ads, bing_ads, yahoo_ads, pinterest_ads, reddit_ads, snapchat_ads, telegram_ads, twitch_ads, x_ads, quora_ads, duckduckgo_ads, whop_adsOrganic:
facebook_organic, google_organic, linkedin_organic, tiktok_organic, youtube_organic, instagram_organic, bing_organic, yahoo_organic, pinterest_organic, reddit_organic, snapchat_organic, telegram_organic, twitch_organic, x_organic, quora_organic, duckduckgo_organic, messenger_organic, brave_organic, threads_organicAI Platforms:
ai_chat_gpt, ai_perplexity, ai_copilot, ai_claude, ai_grok, ai_gemini, ai_deepseekOther:
email, sms, referral, direct, shop_app, substack, capterra, trustpilot, g2, yelpstring
Attribution model to use for filtering events. Required when
sources is provided.Options:first_touch- First interaction attributionlast_touch- Last interaction attributionlinear- Equal credit across all touchpointsfirst_platform_touch- First paid platform touchlast_platform_touch- Last paid platform touchlinear_paid- Linear attribution across paid touchpoints onlyu_shaped- 40% first, 40% last, 20% middle touchpointslast_non_direct_touch- Last touch excluding direct traffic
integer
Attribution lookback window in days. Required when
sources is provided.Options: 0 (LTV), 1, 7, 14, 30, 60, 90string[]
default:"['id', 'event_time_utc']"
Specify which fields to include in the response.Limits: Minimum 1, maximum 20 fields. Duplicate values are not allowed.Note:
id and event_time_utc are always included in the response. When sources are provided for attribution, touchpoint_id is also always included. These fields are required for cursor pagination to work properly.Available fields:profile_id- Contact profile identifiercompany_id- Company identifierspace_id- Space identifierevent_name- Event nameconfigured_name- The configured name of the event. For custom events (custom_event_1throughcustom_event_50), this is the user-configured name. For standard events, this equalsevent_name.amount- Transaction amount (with attribution, this is the partial amount credited to the touchpoint)is_upsell- Upsell flagad_id- Platform-specific ad identifier (requiressourcesto be provided)ad_name- Ad name from the ad platform (requiressourcesto be provided)adset_id- Platform-specific ad set identifier (requiressourcesto be provided)adset_name- Ad set name from the ad platform (requiressourcesto be provided)campaign_id- Platform-specific campaign identifier (requiressourcesto be provided)campaign_name- Campaign name from the ad platform (requiressourcesto be provided)account_id- Platform-specific ad account identifier (requiressourcesto be provided)account_name- Ad account name from the ad platform (requiressourcesto be provided)order_id- Order identifierorder_name- Order nameevent_url- The full URL where the event occurred
id- Event identifier (always included for cursor pagination)event_time_utc- Event timestamp in UTC (always included for cursor pagination)touchpoint_id- Touchpoint identifier (automatically included when sources are provided for cursor pagination)source- Traffic source (automatically included when any ad hierarchy field is requested:ad_id,ad_name,adset_id,adset_name,campaign_id,campaign_name,account_id,account_name)
integer
default:"200"
Number of events to return per page. Minimum: 1, Maximum: 4000
string
Pagination cursor from a previous response. Use this to fetch the next page of results.
array
Filter events by their owning contact’s custom profile field values. Array of AND-joined conditions, each
{ "field": "profile_field_N", "operator": "<op>", "value": <val> }, or for ranges { "field": "profile_field_N", "operator": "between", "start": <a>, "end": <b> }. The field must reference a custom field slot configured with a label in your space (e.g. profile_field_5). Same shape and operator vocabulary as the List Contacts endpoint. Maximum 10 conditions per request.Operator vocabulary by field type:any matches contacts where the field has a value; unknown matches contacts where the field is empty or unset. For numeric fields, any requires a value greater than 0 — unknown matches 0 or unset. Date comparisons (equal_to, greater_than, less_than, between) are evaluated in your space’s configured timezone; equal_to matches the full calendar day. not_equal_to and not_contains do not include contacts where the field is unset — add a separate unknown condition if you need those.Example query string: custom_field_filters[0][field]=profile_field_5&custom_field_filters[0][operator]=equal_to&custom_field_filters[0][value]=PremiumResponse
Success Response
The response follows Laravel’s cursor pagination structure:array
Array of event objects with the requested fields
string
The base URL path for the endpoint
integer
Number of items per page
string | null
Cursor for the next page of results.
null if there are no more pages.string | null
Full URL for the next page of results.
null if there are no more pages.string | null
Cursor for the previous page of results.
null if on the first page.string | null
Full URL for the previous page of results.
null if on the first page.Error Response
string
Error description explaining what went wrong
Example Requests
Status Codes
Notes
- Rate Limit: This endpoint has a limit of 7 requests per minute per Space. See Rate Limiting for details.
- When
sourcesare provided, attribution filtering is applied and only events matching the attribution criteria are returned - Attribution Breakdown: With multi-touch attribution models (linear, u_shaped, linear_paid), each event may return multiple rows - one per attributed touchpoint. Each row contains the touchpoint’s partial credit (e.g., a $100 conversion with 4 touchpoints returns 4 rows with $25 each). Single-touch models (first_touch, last_touch) return one row per event.
- When
sourcesare not provided, all events in the specified date range are returned without attribution filtering (one row per event) - The ad hierarchy fields (
ad_id,ad_name,adset_id,adset_name,campaign_id,campaign_name,account_id,account_name) requiresourcesto be provided. Requesting higher-level hierarchy fields (such asaccount_name) may increase processing time compared to requesting only lower-level fields (such asad_name), so selecting only the fields you need will generally be more efficient. - Cursor pagination is used for efficient traversal of large result sets
- The
idandevent_time_utcfields are always included in responses. When attribution is used (sources provided),touchpoint_idis also always included. - Dates are provided in your space’s configured timezone
- By default, only
idandevent_time_utcare returned (plustouchpoint_idwhen using attribution). Specify additional fields as needed to minimize response size. - Custom Field Filters: Use
custom_field_filtersto narrow results to events whose owning contact matches conditions on custom profile fields. Filters are AND-joined; up to 10 per request. Slots that haven’t been configured with a label in your space are rejected with a 422. Age operators (age_greater_than,age_equal_to,age_less_than) accept a whole-number day count and are supported on date fields. The_and\characters in text filter values are treated as literals, not LIKE wildcards.