List Contacts
Changed onList contacts for the given workspace. By default, only identified contacts are shown so you won't see anonymous or GDPR-redacted contacts.
Request
- Base URLhttps://myworkspace.myclickfunnels.com/api/v2
- Auth
- HTTP bearer
- or OAuth 2Authorization codehttps://accounts.myclickfunnels.com/oauth/authorizeToken URLhttps://accounts.myclickfunnels.com/oauth/token
- TypeScripthttps://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/workspaces/:workspace_id/contacts/get.tsA function with typed inputs. Its response is checked against the schema.
Path parameters
Query parameters
ID of item after which the collection should be returned. More examples and info about pagination in our guides.
Records per page. Defaults to 20; raise it up to 100 for bulk reads. A larger value returns 100 records. Zero, a negative or a non-integer value is a 422. The Link next-page URL keeps the value, so a client following it keeps the page size. More in our guides.
Sort order of a list response. Use 'desc' to reverse the default 'asc' (ascending) sort order. Examples in our guides.
Sort property of a list response. The default is id and thus the created_at order. If you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.
Filter by available properties in query params, like this: api/v2/resources?filter[id]=value&filter[another_property]=value1,value2. Check our Filtering guide for examples and all about filtering here.
{
"email_address": "russel@clickfunnels.com,todd@clickfunnels.com",
"id": "1,42",
"tag_ids": "1,42",
"is_active": true
}The id (integer) or public_id (string) of a saved Refine::StoredFilter scoped to this workspace. Returned by POST /api/v2/workspaces/{workspace_id}/contacts/filters (with save: true), by the RefineFilter endpoints, or as a segment's filter_id. Applies the saved filter's criteria to the results, composed (AND) with any filter[…] params. Returns 422 if the filter is unknown, invalid, or belongs to a different workspace. When both stored_filter_id and stable_id are supplied, stable_id takes precedence.
A URL-encoded Refine stable_id token — the standard gzip+base64 full-state format used by both the contacts/filters API endpoint and the server-rendered filter UI, making the tokens interoperable. Returned by POST /api/v2/workspaces/{workspace_id}/contacts/filters in the stable_id field. Treat the returned token as opaque and let the HTTP client encode the complete query parameter value. With curl, use -G --data-urlencode "stable_id=$STABLE_ID"; do not decode the token or interpolate it directly into a raw URL. Applies the encoded filter criteria to the results, composed (AND) with any filter[…] params. Returns 422 if the token is not a valid Refine stable_id, is not a contact filter (a segment's ContactsSegmentsFilter counts as one), or groups conditions with mixed and/or semantics. Flat filters and grouped filters using a single conjunction (including tokens copied from the filtered Contacts UI) are supported. When both stored_filter_id and stable_id are supplied, stable_id takes precedence.
Expand additional data in the response. Use expand[]=field_name to include optional fields (e.g., expand[]=email_engagement). See the Expanding guide for available fields and examples.
Response
OK
Example response
[
{
"id": 24359,
"public_id": "vQxYMj",
"workspace_id": 4,
"default_shipping_address_id": null,
"anonymous": 0,
"email_address": "jane.doe@example.com",
"first_name": "Jane",
"last_name": "Doe",
"phone_number": "+18005550199",
"time_zone": "Madrid",
"uuid": "80b7f903-76cd-4edf-94bf-fc34c13ee654",
"unsubscribed_at": null,
"last_notification_email_sent_at": null,
"email_suppression_reason": null,
"is_active": true,
"deleted_at": null,
"fb_url": null,
"twitter_url": null,
"instagram_url": null,
"linkedin_url": null,
"website_url": null,
"created_at": "2026-01-09T15:27:56.647Z",
"updated_at": "2026-01-09T15:28:08.075Z",
"tags": [],
"custom_attributes": {},
"visits": {
"first_visit": {
"uuid": "9f2e8a22-1b65-4414-95f3-5caf0bbd11da",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "spring_sale",
"utm_term": "running shoes",
"utm_content": "ad_variant_a",
"ip": "192.168.1.1",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"referrer": "https://www.google.com/search?q=example",
"referring_domain": "google.com",
"landing_page": "https://example.com/products/shoes",
"browser": "Chrome",
"os": "Mac OS X",
"device_type": "desktop",
"started_at": "2026-01-09T14:23:45.123Z",
"created_at": "2026-01-09T14:23:45.123Z",
"updated_at": "2026-01-09T14:23:45.123Z"
},
"last_visit": null,
"last_visit_with_utm": {
"uuid": "9f2e8a22-1b65-4414-95f3-5caf0bbd11da",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "spring_sale",
"utm_term": "running shoes",
"utm_content": "ad_variant_a",
"ip": "192.168.1.1",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"referrer": "https://www.google.com/search?q=example",
"referring_domain": "google.com",
"landing_page": "https://example.com/products/shoes",
"browser": "Chrome",
"os": "Mac OS X",
"device_type": "desktop",
"started_at": "2026-01-09T14:23:45.123Z",
"created_at": "2026-01-09T14:23:45.123Z",
"updated_at": "2026-01-09T14:23:45.123Z"
}
}
}
]Changes
- breaking
the response property
//became nullable for the status - info
added the new optional
queryrequest parameterper_page - info
for the
pathrequest parameterworkspace_id, the type was generalized fromintegertostring - info
added the non-success response with the status
- info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
removed from the
////response propertyallOflist for the response status - info
removed from the
////response propertyallOflist for the response status - info
removed from the
////response propertyallOflist for the response status - info
added
subschema #2to the////response propertyanyOflist for the response status - info
added
subschema #2to the////response propertyanyOflist for the response status - info
added
subschema #2to the////response propertyanyOflist for the response status
- breaking