Create Custom HTML Page
Changed onCreate a ClickFunnels-hosted custom HTML page: you supply the complete HTML document and ClickFunnels serves it verbatim at a path on the funnel's domain — no page editor, no PML. Ideal for AI-generated pages: generate the HTML, POST it here, and the page is live as a funnel step.
Required fields:
- name: The page name.
- custom_html: The complete HTML document (max 2MB). Served byte-for-byte — include your own CSS/JS inline.
Making the page work with ClickFunnels (opt-ins, tracking): the response includes an sdk block with a token (prefixed cfp_). The HTML should contain:
- <meta name="cf-page-token" content="<token>"> inside <head>.
- The ClickFunnels SDK script tag (<script src="https://sdk.<root-domain>/sdk.js" defer></script>).
- Form fields marked with data-cf-element attributes (email, first-name, last-name, name, phone, custom-attribute:<key>) inside a plain <form>.
Since the token is minted by this call, either create the page first and then PATCH the HTML with the token inserted, or create with placeholder HTML and swap it. The Create an External Page Skill documents the exact form markup convention (it applies to custom HTML pages too — the only difference is ClickFunnels hosts the file).
Standalone vs in a funnel: the funnel block is optional and behaves exactly like POST /pages/external:
- Omit it to create a standalone page.
- funnel.funnel_id + optional sort_order or funnel.after_show_page_step_id: create as a step in the funnel.
- funnel.show_page_step_id: swap an existing step onto this page.
Path: pass current_path (e.g. /my-landing) to choose the URL path on the funnel's domain; omitted, the path derives from the name. Change it later via PATCH /pages/{id} with current_path.
Limitation: viewing a custom HTML page does not advance the visitor's funnel run (form submissions do), so run-based view attribution treats un-submitted custom HTML steps as unvisited.
Rejected fields (returns 422 if present): markup, theme_id, seo_title, seo_description, seo_index, block_ai_crawler, block_ai_search, block_ai_assistant, head_code, footer_code, custom_css, live_data_changes, external_url, show_page_step.product_ids, show_page_step.bumps. To list the page in the domain's sitemap.xml or opt it out of AI crawlers, set seo_index or the block_ai_* flags afterwards via PATCH /pages/{id}.
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
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
Request body
Response
Created
Example response
{
"id": 9,
"public_id": "kJzvQi",
"workspace_id": 42000,
"name": "Great Page",
"description": "A high-converting sales page",
"theme_id": null,
"seo_title": "Great Page - My Brand",
"seo_description": "Learn more about our amazing offer",
"seo_index": true,
"block_ai_crawler": false,
"block_ai_search": false,
"block_ai_assistant": false,
"created_at": "2025-01-01T00:00:00.000Z",
"updated_at": "2025-01-01T00:00:00.000Z",
"type": "funnel_page",
"custom_html_page": false,
"current_path": "/my-page-canonical",
"url": "https://myteam.myclickfunnels.com/my-funnel-page",
"show_page_step": {
"id": 42,
"public_id": "aBcDeF",
"name": "Best Page Step",
"current_path": "/my-funnel-page",
"sort_order": 0,
"products": []
},
"funnel": {
"id": 123,
"public_id": "xYzAbC",
"name": "My Sales Funnel"
},
"sdk": null,
"markup": "<section>\n <row cols=\"1\">\n <column>\n <headline>Great Page</headline>\n <subheadline>Start your journey here</subheadline>\n </column>\n </row>\n</section>\n"
}Changes
- info
endpoint added
- info