Update Page
Changed onUpdate an existing internal, custom HTML, or external (SDK) page.
This existing write saves supported page content live; there is currently no separate public page publish or status operation. Read the page back with GET /api/v2/pages/:id to confirm the resource, then check its computed url separately when public delivery matters. A successful write requests cache invalidation but does not prove propagation or reachability. The path accepts a numeric id or public id, and the JSON body uses the page root. PATCH is also supported.
For internal pages, markup replaces live content; it does not promote a saved editor draft or promise deletion of an existing draft blob. For custom HTML pages, custom_html replaces the ClickFunnels-hosted HTML body. For external SDK pages, deploy content on your own host; external_url only changes its registration.
Field availability depends on the page type — see PageParametersUpdate for the full breakdown. Sending an internal-only field on an external page (or external_url on an internal page) returns 422 with an explicit list of the rejected field names — never silently ignored.
sort_order (optional, top-level): Reposition the page within its funnel. Zero-based. Ignored when funnel.show_page_step_id is also provided.
funnel.show_page_step_id (optional): Swap the page onto an existing show page step. The previous page on that step becomes an orphan. Shared by both page types.
external_url (external pages only): Update the external URL. The SDK token is preserved.
show_page_step.product_ids / show_page_step.bumps (optional, both page types): Append products to the page's checkout step as main products or as order bumps. Both are additive; bumps also promotes a product already attached to the step into a bump, which is how an existing attachment becomes one. Each bumps entry is {product_id, preheadline}, where preheadline is the optional copy shown above that bump's offer. Requires the page to be part of a funnel (400 otherwise).
markup (internal pages only): Replaces live page content. PML covers only a subset of what the ClickFunnels page editor can build, so if this page could have been created or edited in the editor, stop and get explicit approval from the user first: see the approval guardrail. Never resubmit a lossy PML read merely to publish an editor page.
To move externally-hosted pages to a new domain, see Patch one page at a time in the Migrate an External Page Domain Skill.
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
Query parameters
Expand additional data in the response. Use expand[]=field_name to include optional fields (e.g., expand[]=head_code&expand[]=footer_code&expand[]=custom_css&expand[]=markup). Markup is opt-in on every endpoint (show, list, create, update) because PML serialization runs per page. custom_css is available on internal pages only. See the Expanding guide for available fields and examples. Read a page's existing markup with expand[]=markup before editing it: see Reading Current Markup in the Pages Skill.
Request body
Example request
{
"page": {
"page": {
"name": "Example Page",
"description": "Updated page description",
"seo_title": "Updated SEO Title",
"seo_description": "Updated meta description",
"seo_index": true,
"block_ai_crawler": true,
"block_ai_search": true,
"block_ai_assistant": false,
"head_code": "<script>console.log('updated');</script>",
"head_code_mode": "append",
"markup": "<section>\n <row cols=\"1\">\n <column>\n <headline>Welcome to our page</headline>\n <subheadline>Start your journey here</subheadline>\n </column>\n </row>\n</section>\n",
"show_page_step": {
"product_ids": [
"PrdXyz"
],
"bumps": [
{
"product_id": "PrdBmp",
"preheadline": "One-time offer"
}
]
}
}
}
}Response
OK
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
added the new optional request property
/ - info
added the new optional request property
/ - info
added the new optional request property
/ - info
added the new optional request property
/ - info
added the new optional request property
/ - info
added the new optional request property
// - info
removed 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
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