Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/clickfunnels-refinefilter-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: ClickFunnels Refine Filter API
termsOfService: https://www.clickfunnels.com/terms-of-service
contact:
name: ClickFunnels API Team
url: https://developers.myclickfunnels.com
x-logo:
url: https://statics.myclickfunnels.com/image/1126065/file/31edf05760fafe41a82f16a668ab251f.png
description: The ClickFunnels REST API that powers webhooks, native integrations, and Zapier lets you manage your ClickFunnels data, automate your workflows, and recreate ClickFunnels functionality in your own apps.
license:
name: MIT
url: https://opensource.org/licenses/MIT
version: 2.0.0
servers:
- url: https://{subdomain}.myclickfunnels.com/api/v2
description: ClickFunnels API
variables:
subdomain:
default: myworkspace
security:
- BearerAuth: []
tags:
- name: RefineFilter
description: '> Reusable audience filters that scope contacts for conditional splits, email broadcasts, workflow branches, and other ClickFunnels surfaces.'
paths:
/workspaces/{workspace_id}/refine_filters:
get:
tags:
- RefineFilter
summary: List Refine Filters
description: List saved filters in a workspace, ordered by id ascending. `after` is the switch between two modes. For backwards compatibility, omitting it returns the complete registry in one payload with no `Pagination-Next` header. Sending it returns bounded pages. For that bounded walk, pass `after=0` on the first request, then pass each `Pagination-Next` value on the next request until the header is absent, which marks the last page. `after=0` is the opt-in itself rather than a row id (real ids start at 1), and it means "start at the beginning" in whichever direction `sort_order` asks for, so it also bootstraps a `sort_order=desc` walk. An `after` value that is neither `0` nor a `Pagination-Next` cursor is not a real position and pages nothing. Results can include every filter class saved in the workspace, not only the ones this API authors; inspect `filter_class` before using the `id` or `public_id` as a resource's `stored_filter_id`. Treat returned order filters as read-only here and edit them in the ClickFunnels Orders UI. Create and update operations on this public endpoint author contact filters only. See Applying existing order filters in the Refine Filters Skill for passing an order filter to the orders list.
operationId: listWorkspaceRefineFilters
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/sort_order'
- name: filter
in: query
description: 'Filter by available properties in query params, like this: `api/v2/resources?filter[name]=value`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).
'
required: false
schema:
type: object
properties:
name:
type: string
description: Exact-match filter on the saved filter's name (unique per workspace), to resolve a saved filter by name instead of id.
example: VIP newsletter audience
style: deepObject
explode: true
responses:
'200':
description: OK
headers:
Pagination-Next:
$ref: '#/components/headers/PaginationNext'
Link:
$ref: '#/components/headers/Link'
content:
application/json:
schema:
type: object
properties:
refine_filters:
type: array
items:
$ref: '#/components/schemas/RefineFilterAttributes'
example:
refine_filters:
- id: 42
public_id: AbCdEf
workspace_id: 5
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
created_at: '2026-04-01T12:00:00.000Z'
updated_at: '2026-04-01T12:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
post:
tags:
- RefineFilter
summary: Create Refine Filter
description: 'Create a new contact RefineFilter in the workspace. This endpoint does not create order filters.
The `criteria` array must contain at
least one entry. Criteria are validated against the
safe-condition whitelist —
unsupported attributes/clauses return 422 with a pointer to the dev community.
See the Refine Filters Skill
for the full reference (attributes, clauses, worked examples).'
operationId: createWorkspaceRefineFilter
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RefineFilterParametersCreate'
example:
refine_filter:
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- tag-pub-id-2
- attribute: purchased_products.id
clause: equals
value: prod-pub-id
- attribute: created_at
clause: gte
value: '2026-01-01T00:00:00Z'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/RefineFilterAttributes'
example:
id: 42
public_id: AbCdEf
workspace_id: 5
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- tag-pub-id-2
- attribute: purchased_products.id
clause: equals
value: prod-pub-id
- attribute: created_at
clause: gte
value: '2026-01-01'
created_at: '2026-04-01T12:00:00.000Z'
updated_at: '2026-04-01T12:00:00.000Z'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Bad request: HTTP body must be valid JSON'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: criteria must contain at least one entry
/refine_filters/{id}:
get:
tags:
- RefineFilter
summary: Fetch Refine Filter
description: Fetch a single saved filter by its public id. Inspect `filter_class` before applying it to contacts or orders. Treat order filters as read-only here and edit them in the ClickFunnels Orders UI; create and update operations on this public endpoint author contact filters only.
operationId: getRefineFilter
parameters:
- name: id
in: path
required: true
description: Public id of the RefineFilter (e.g. `AbCdEf`).
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RefineFilterAttributes'
example:
id: 42
public_id: AbCdEf
workspace_id: 5
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- attribute: created_at
clause: gte
value: '2026-01-01'
created_at: '2026-04-01T12:00:00.000Z'
updated_at: '2026-04-01T12:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
patch:
tags:
- RefineFilter
summary: Update Refine Filter
description: 'Update an existing RefineFilter. All fields are optional — only provided fields are
updated. When `criteria` is supplied it replaces the entire criteria set (must contain
at least one entry). 422 covers shape errors and
safe-condition policy violations.'
operationId: updateRefineFilter
parameters:
- name: id
in: path
required: true
description: Public id of the RefineFilter to update.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RefineFilterParametersUpdate'
example:
refine_filter:
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- attribute: created_at
clause: gte
value: '2026-01-01'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RefineFilterAttributes'
example:
id: 42
public_id: AbCdEf
workspace_id: 5
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- attribute: created_at
clause: gte
value: '2026-01-01'
created_at: '2026-04-01T12:00:00.000Z'
updated_at: '2026-04-02T09:00:00.000Z'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Bad request: HTTP body must be valid JSON'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: criteria must contain at least one entry
delete:
tags:
- RefineFilter
summary: Destroy Refine Filter
description: 'Delete a RefineFilter. Note that deleting a filter that is currently attached to a
conditional split step or other surface will leave those surfaces without a filter
(`condition.filter_id` will remain but the filter record will no longer exist).
Detach the filter from all consumers before deleting.
See Applying filters to consumers in the Refine Filters Skill for the surfaces that hold a filter id.'
operationId: destroyRefineFilter
parameters:
- name: id
in: path
required: true
description: Public id of the RefineFilter to delete.
schema:
type: string
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
components:
schemas:
RefineFilterAttributes:
type: object
title: Refine Filter
description: 'A reusable workspace-scoped audience filter composed of one or more criteria joined by a single conjunction.
Public API requests are validated against a [safe-condition whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist); criteria outside the whitelist return 422 with a pointer to the developer community.
'
externalDocs:
description: Refine Filters Skill - attributes, clauses, and worked examples
url: https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md
properties:
id:
type: integer
description: Refine Filter ID
public_id:
type: string
description: Obfuscated Refine Filter ID
workspace_id:
type: integer
description: ID of the workspace this filter belongs to
name:
type:
- string
- 'null'
description: Optional human-readable name for the filter. Must be unique within the workspace when set.
filter_class:
type:
- string
- 'null'
description: 'The filter class recorded on the saved filter. This API authors `ContactsFilter` and applies `ContactsFilter` and `OrdersFilter`, but the list returns every saved filter in the workspace, and other ClickFunnels surfaces save their own classes here — `ContactsSegmentsFilter`, `ProductsFilter`, `FunnelsFilter` and `ContactUpsellsFilter` all appear in real workspaces. Treat this as an open set: match on the class you want rather than assuming the rest are absent. `null` for a legacy row whose stored state can no longer be decoded (such rows also return empty `criteria`; they can still be deleted).'
example: ContactsFilter
conjunction:
type: string
enum:
- and
- or
description: How the criteria are joined — `and` (all must match) or `or` (any must match).
criteria:
type: array
description: Ordered list of filter criteria.
items:
$ref: '#/components/schemas/RefineFilterCriterion'
created_at:
type: string
format: date-time
description: Created at
updated_at:
type: string
format: date-time
description: Updated at
example:
id: 42
public_id: AbCdEf
workspace_id: 5
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- attribute: created_at
clause: gte
value: '2026-01-01'
created_at: '2026-04-01T12:00:00.000Z'
updated_at: '2026-04-01T12:00:00.000Z'
required:
- conjunction
- created_at
- criteria
- filter_class
- id
- name
- public_id
- updated_at
- workspace_id
RefineFilterCriterion:
type: object
title: Refine Filter Criterion
description: A single filter criterion consisting of an attribute, a comparison clause, and a value.
properties:
attribute:
type: string
description: 'The contact attribute to filter on (e.g. `tags.id`, `created_at`, `email_address`).
The public API restricts attributes to a [safe whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) — see the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for the full reference.
'
example: tags.id
clause:
type: string
description: 'The comparison operator for this criterion (e.g. `in`, `eq`, `gte`, `lte`, `st`, `nst`).
Allowed clauses depend on the attribute. Text attributes (`email_address`, `first_name`, `last_name`) only accept `eq` and `sw` on the public API; see the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist).
'
example: in
value:
description: "The comparison value. Type depends on the attribute and clause:\n- **Option conditions** (tags, products, etc.): a single opaque public id string, or an array of public id strings.\n- **Date/datetime conditions**: an ISO 8601 date string (`\"2026-01-01\"`) or datetime string (`\"2026-01-01T00:00:00Z\"`).\n For `between`/`not_between` clauses supply an array of exactly two date strings.\n For relative `gt`, `lt`, or `exct` clauses supply an object with `days` and a `modifier` of `ago` or `from_now`.\n- **Text/numeric conditions**: a plain string or number.\n- **Set/not-set clauses**: omit `value` entirely.\n"
oneOf:
- type: string
- type: array
items:
type: string
- type: object
required:
- days
- modifier
properties:
days:
oneOf:
- type: string
- type: integer
description: Number of days used by a relative date clause.
modifier:
type: string
enum:
- ago
- from_now
example:
- tag-pub-id-1
- tag-pub-id-2
RefineFilterParametersCreate:
type: object
title: Create Refine Filter
description: 'Parameters for creating a new RefineFilter. The `criteria` array must contain at least one entry.
Each criterion requires `attribute` and `clause`; `value` may be omitted for set/not-set clauses.
### Supported conditions (public API)
The public API restricts criteria to the safe whitelist below. Requests
outside this set return 422 with a pointer to the dev community for
new-condition requests.
| Condition | Allowed clauses | Notes |
|----------------------------------------------------------------------------------|-------------------------------------------------------------------|--------------------------------------------------------------------|
| `email_address`, `first_name`, `last_name` | `eq`, `sw` | Text — equals & starts_with only. |
| `anonymous` | `eq`, `dne` | Boolean-style option. |
| `created_at`, `unsubscribed_at`, `last_activity` | All standard date clauses | Indexed datetime columns. |
| `tags.id` | `eq`, `dne`, `in`, `nin` | Tag membership — must reference workspace-owned tag ids. |
| `has_affiliate_attribution`, `has_active_affiliate_attribution`, `referred_by_affiliate` | All standard clauses | Affiliate attribution lookups. |
| `email_suppression` | `st`, `nst`, `eq`, `in` | Email suppression set/not-set or membership. |
| `received_broadcast`, `opened_broadcast`, `clicked_broadcast` | `eq`, `in` | **Must include a specific broadcast id.** |
| `opted_in_funnel_step`, `opted_in_funnel_at`, `opted_in_on_standalone_page` | `eq`, `in` | **Must include a specific funnel/step/page id.** |
Conjunction is restricted to `and`. See the full reference at the
[Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist).
'
required:
- refine_filter
properties:
refine_filter:
type: object
required:
- criteria
properties:
name:
type: string
description: Optional human-readable name. Must be unique within the workspace when provided.
filter_class:
type: string
description: Filter class. Defaults to `ContactsFilter` (the only supported class).
default: ContactsFilter
conjunction:
type: string
enum:
- and
- or
description: Join operator for all criteria. Defaults to `and`.
default: and
criteria:
type: array
minItems: 1
description: Non-empty array of filter criteria.
items:
type: object
required:
- attribute
- clause
properties:
attribute:
type: string
description: Contact attribute to filter on (e.g. `tags.id`, `created_at`, `email`).
clause:
type: string
description: Comparison operator (e.g. `in`, `equals`, `gte`, `set`).
value:
description: Comparison value. Relative date clauses use an object with `days` and `modifier`. Omit for set/not-set clauses.
oneOf:
- type: string
- type: array
items:
type: string
- type: object
required:
- days
- modifier
properties:
days:
oneOf:
- type: string
- type: integer
modifier:
type: string
enum:
- ago
- from_now
example:
refine_filter:
name: VIP newsletter audience
filter_class: ContactsFilter
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- tag-pub-id-2
- attribute: purchased_products.id
clause: equals
value: prod-pub-id
- attribute: created_at
clause: gte
value: '2026-01-01T00:00:00Z'
RefineFilterParametersUpdate:
type: object
title: Update Refine Filter
description: 'Parameters for updating an existing RefineFilter. All fields are optional — only provided
fields are updated. When `criteria` is supplied it **replaces** the entire criteria set.
Replacement criteria must satisfy the same safe-condition whitelist enforced on create.
See [Safe condition whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) for the full reference.
'
required:
- refine_filter
properties:
refine_filter:
type: object
properties:
name:
type: string
description: New name for the filter. Must be unique within the workspace.
conjunction:
type: string
enum:
- and
- or
description: Replacement join operator for all criteria.
criteria:
type: array
minItems: 1
description: Replacement criteria array. Must contain at least one entry.
items:
type: object
required:
- attribute
- clause
properties:
attribute:
type: string
clause:
type: string
value:
description: Comparison value. Relative date clauses use an object with `days` and `modifier`. Omit for set/not-set clauses.
oneOf:
- type: string
- type: array
items:
type: string
- type: object
required:
- days
- modifier
properties:
days:
oneOf:
- type: string
- type: integer
modifier:
type: string
enum:
- ago
- from_now
example:
refine_filter:
conjunction: and
criteria:
- attribute: tags.id
clause: in
value:
- tag-pub-id-1
- attribute: created_at
clause: gte
value: '2026-01-01'
parameters:
after:
name: after
in: query
required: false
schema:
type: string
description: ID of item after which the collection should be returned. More examples and info about pagination [in our guides](https://developers.myclickfunnels.com/docs/pagination).
sort_order:
name: sort_order
in: query
description: Sort order of a list response. Use 'desc' to reverse the default 'asc' (ascending) sort order. Examples [in our guides](https://developers.myclickfunnels.com/docs/pagination).
required: false
schema:
type: string
enum:
- asc
- desc
headers:
Link:
description: A direct link to the next page for the cursor-based pagination. It includes the `after` and the Pagination-Next ID value.
schema:
type: string
PaginationNext:
description: ID of the last item in the current response after which more records exist. You can use it in an `after` query parameter for cursor-based pagination to get to the next page.
schema:
type: string
securitySchemes:
BearerAuth:
type: http
scheme: bearer
externalDocs:
description: More in-depth guides and further resources
url: https://developers.myclickfunnels.com