openapi: 3.2.0
info:
title: ClickFunnels Page 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: Page
description: '> Page offers extra information about ClickFunnels pages, like those that are part of funnels.
It''s the main element that the user modifies when editing a Page in the ClickFunnels editor.
You can also learn how to source Page name and public ID from your ClickFunnels UI
[here](https://developers.myclickfunnels.com/docs/filtering-by-page).
See the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for [building a page](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#building-a-page) and [positioning it within a funnel](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#positioning-a-page-within-a-funnel); the page body is authored in PML — see the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md). For pages you host yourself, see [Create an External Page](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md) and [Add Checkout to an External Page](https://accounts.myclickfunnels.com/.well-known/sdk/add-checkout/skill.md). To move those externally-hosted pages to a new domain, see [Migrate an External Page Domain](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md).
'
paths:
/workspaces/{workspace_id}/pages:
get:
tags:
- Page
summary: List Pages
description: Page offers extra information about ClickFunnels pages, like those that are part of funnels.
operationId: listPages
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/sort_order'
- $ref: '#/components/parameters/sort_property'
- name: filter
in: query
description: '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](https://developers.myclickfunnels.com/docs/filtering).
'
required: false
schema:
type: object
properties:
id:
type: string
description: A comma-separated list of page IDs to filter by.
example: 1,42
theme_id:
type: string
description: A comma-separated list of theme IDs to filter by.
example: 1,42
funnel_pages:
type: boolean
description: Only show pages that belong to a funnel as opposed to standalone landing or site pages.
example: true
funnel_ids:
type: string
description: A comma-separated list of funnel IDs to filter pages by. Returns only pages belonging to the specified funnels.
example: 123,456
style: deepObject
explode: true
- $ref: '#/components/parameters/ExpandPageFields'
responses:
'200':
description: OK
headers:
Pagination-Next:
$ref: '#/components/headers/PaginationNext'
Link:
$ref: '#/components/headers/Link'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PageAttributes'
example:
- id: 61
public_id: eldUyN
workspace_id: 42000
name: Great Page
theme_id: null
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-01-01T00:00:00.000Z'
type: funnel_page
current_path: /great-page
url: https://myteam.myclickfunnels.com/funnel-great-page
show_page_step:
id: 100
public_id: xYz123
name: Great Page Step
current_path: /funnel-great-page
sort_order: 0
products: []
funnel:
id: 50
public_id: AbC789
name: Sales Funnel
sdk: null
description: null
seo_description: null
seo_index: false
seo_title: null
- id: 62
public_id: AtcUVH
workspace_id: 42000
name: Landing Page
theme_id: null
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-01-01T00:00:00.000Z'
type: landing_page
current_path: /landing-page
url: https://myteam.myclickfunnels.com/landing-page
show_page_step: null
funnel: null
sdk: null
description: null
seo_description: null
seo_index: false
seo_title: null
'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
description: Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID.
example:
error: 'Not found: Record missing'
post:
tags:
- Page
summary: Create Page
description: 'Create a new internal page in the workspace. By default, creating a page without references to a funnel or show page step will create a standalone landing page.
You can optionally attach the page to a funnel by providing either:
- `funnel.funnel_id`: Creates a new show page step in the specified funnel. When provided without `show_page_step_id`, the page is added as the last step of the funnel, positioned after the currently last page.
- `funnel.show_page_step_id`: Swaps the referenced step to point at this newly created page. The page previously linked to that step becomes an orphan (kept in the workspace, no longer linked to any step).
**`sort_order`** (optional, top-level): Controls the zero-based position within the funnel when creating with `funnel.funnel_id`. `0` inserts before the first existing step; omit to append at the end. Out-of-bounds values (negative or greater than the current step count) return 422. `sort_order` is ignored when `funnel.show_page_step_id` is used — the swap target''s current position is preserved.
**`funnel.after_show_page_step_id`** (optional, with `funnel.funnel_id`): Insert the new step right after the referenced show page step — also places the page inside a split branch. Alternative to `sort_order`. An id that does not resolve to a step in the funnel returns 400.
To also attach products to the page''s checkout step in the same call, pass `show_page_step.product_ids: [...]` (sibling of `funnel`). This is the only way to set products at create time — the legacy `funnel.products` shape is rejected with a 400. Products attachment is **additive** and **all-or-nothing**: any unresolved id fails the whole request and the page is not created.
**Order bumps**: pass `show_page_step.bumps: [{product_id, preheadline}]` (same semantics as `product_ids`) to attach products as order bumps instead of main products, each with its own optional `preheadline` — the line of copy shown above that bump''s offer. A product may appear in only one of the two blocks per request; naming it in both returns a 400.
**`external_url` is rejected** — to create an externally-hosted (SDK) page use `POST /api/v2/workspaces/:workspace_id/pages/external`.
'
operationId: createPage
externalDocs:
description: Pages Skill - building a page (PML body)
url: https://accounts.myclickfunnels.com/.well-known/pages/skill.md#building-a-page
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/ExpandPageFields'
requestBody:
description: Information about the Page to create
required: true
content:
application/json:
schema:
type: object
properties:
page:
type: object
$ref: '#/components/schemas/PageParameters'
example:
page:
name: My New Page
current_path: /my-new-page
theme_id: 12345
description: A landing page for our new product launch
seo_title: New Product Launch - My Brand
seo_description: Discover our latest product offering
seo_index: true
funnel:
funnel_id: xyz789
show_page_step:
product_ids:
- PrdAbc
head_code:
head_code_mode: append
markup: "\n \n \n Welcome to our page\n Start your journey here\n \n \n\n"
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/PageAttributes'
example:
id: 70
public_id: NewPgX
workspace_id: 42000
name: My New Page
theme_id: 12345
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-01-01T00:00:00.000Z'
type: funnel_page
current_path: /my-new-page-xyz123
url: https://myteam.myclickfunnels.com/my-new-page
show_page_step:
id: 200
public_id: StpNew
name: My New Page
current_path: /my-new-page
sort_order: 0
products: []
funnel:
id: 100
public_id: xyz789
name: Target Funnel
sdk: null
description: null
seo_description: null
seo_index: false
seo_title: null
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
invalid_funnel_id:
summary: Invalid funnel_id
value:
error: 'Bad request: The funnel with the provided ID cannot be found.'
invalid_show_page_step_id:
summary: Invalid show_page_step_id
value:
error: 'Bad request: The step with the provided ID cannot be found.'
invalid_code_mode:
summary: Invalid code mode
value:
error: 'Bad request: Invalid code mode ''invalid''. Must be ''append'' or ''replace''.'
invalid_markup:
summary: Invalid PML markup
value:
error: 'Bad request: Markup is not valid PML: unknown top-level element(s) . Top-level elements must be one of: , , , , , , , , ,