Changes for internal APIs affecting site data sync in the browser

To support real-time collaboration, we’re implementing version control on a set of internal APIs used to read and write site data to the designer from the browser. To ensure continued functionality of browser extensions and tools that currently use this set of APIs, please see the timeline and migration steps below.

Please note: If you’re building apps with Webflow’s official set of Public APIs, this won’t affect your work.

Affected internal endpoints

Starting August 13, 2025, the following internal site data sync endpoints will now support and enforce version control.

  • GET /sites/{siteName}/dom
  • POST /pages/{pageId}/dom
  • POST /sites/{siteName}/variables
  • PATCH /sites/{siteName}/variables/{variableId}
  • POST /sites/{siteName}/styles

Starting September 15, 2025, these endpoints will require a version number in all write requests. Requests without a version number will return an error.

These endpoints will be fully deprecated and removed in January 2026. We recommend updating your tools now to comply with version checks, while also planning your migration away from these endpoints before the deprecation date.

Timeline

1

August 13, 2025

This set of internal APIs will start returning and accepting version fields for reads and writes

2

August 19, 2025

DevRel hosted office hours for additional developer support. Sign up for office hours here.

3

September 15, 2025

This set of internal APIs will start enforcing version checks on all writes

4

January 2026

These endpoints will be fully deprecated and removed

Office hours & support

We understand that this is a change for some developers, and we’re here to help. Sign up for our office hours on August 19, 2025 to answer questions and help with the migration.

Additionally, you can reach out to our developer support team at developers@webflow.com for help.

Version management

Reading site data

The GET /sites/{siteName}/dom endpoint now returns version fields for the following resources:

ResourceFieldDescription
domNodesdomNodesVersionThe version number of the DOM nodes array
stylesstylesVersionThe version number of the styles object
variablesvariables?[].versionThe version number for each object within the variables array
variableCollectionsvariableCollections?[].versionThe version number for each object within the variableCollections array
Versioning for interactions is not yet available

Currently, version fields aren’t returned for interactions. However, this could change in the future.


Writing site data

The following endpoints require version numbers in the request body for all writes:

  • POST /pages/{pageId}/dom
  • POST /sites/{siteName}/variables
  • PATCH /sites/{siteName}/variables/{variableId}
  • POST /sites/{siteName}/styles

Errors and responses

POST and PATCH requests to the above endpoints will return errors if the version numbers are missing or don’t match.

  • 409 Conflict: Version mismatch.
    A later version of the data is available. Fetch the latest data and retry the operation.
  • 400 Bad Request: Missing version numbers in write requests.
    The request body must include a version number for each resource in the request.

Migration steps

Migrate to the Designer API before the deprecation date

Most of the functionality served by these endpoints is also available in the Designer API. We recommend migrating to the Designer API for future development for reliability and consistency. If you need additional functionality that’s not available in the Designer API, please reach out to our developer support team at developers@webflow.com to tell us what you need.

1

1. Update data retrieval

In addition to retrieving site information, be sure to store version numbers when retrieving data:

1const response = await fetch(`/sites/${siteName}/dom`);
2const data = await response.json();
3
4// Store version numbers for sync
5const versions = {
6 domNodes: data.domNodesVersion,
7 styles: data.stylesVersion,
8 variables: data.variables?.map(v => ({ id: v.id, version: v.version })),
9 variableCollections: data.variableCollections?.map(vc => ({ id: vc.id, version: vc.version }))
10};
2

2. Update data writing

Include version numbers in all write requests:

1// Example: Updating styles
2const updateResponse = await fetch(`/sites/${siteName}/styles`, {
3 method: 'POST',
4 headers: {
5 'Content-Type': 'application/json; charset=UTF-8',
6 'X-Requested-With': 'XMLHttpRequest',
7 'X-XSRF-Token': 'YOUR TOKEN HERE' // must match the current from browser cookies
8 },
9 body: JSON.stringify({
10 styles: newStyles,
11 stylesVersion: versions.styles // Include current version
12 }),
13 credentials: 'same-origin'
14});
15
16if (updateResponse.status === 409) {
17 // Version conflict - fetch latest data and retry
18 const latestData = await fetch(`/sites/${siteName}/dom`);
19 // Update your local versions and retry the operation
20}
3

3. Handle version conflicts

Implement retry logic for version conflicts:

1async function updateWithRetry(endpoint, data, maxRetries = 3) {
2 for (let attempt = 0; attempt < maxRetries; attempt++) {
3 try {
4 const response = await fetch(endpoint, {
5 method: 'POST',
6 headers: {
7 'Content-Type': 'application/json; charset=UTF-8',
8 'X-Requested-With': 'XMLHttpRequest',
9 'X-XSRF-Token': 'YOUR TOKEN HERE' // must match the current from browser cookies
10 },
11 body: JSON.stringify(data),
12 credentials: 'same-origin'
13 });
14
15 if (response.status === 409) {
16 // Fetch latest versions and retry
17 const latest = await fetch(`/sites/${siteName}/dom`);
18 const latestData = await latest.json();
19 data.stylesVersion = latestData.stylesVersion;
20 // Update other version fields as needed
21 continue;
22 }
23
24 return response;
25 } catch (error) {
26 if (attempt === maxRetries - 1) throw error;
27 }
28 }
29}

Important reminders

  • This API will be fully deprecated and removed in January 2026
  • Consider migrating to official Webflow APIs when available.
  • Test thoroughly in development environments before deploying

Support

For questions about this migration, contact our developer support team. However, we can’t provide ongoing support for private API usage.

Developer experience improvements

This release enhances the developer experience for the Data API with improved audit logging, webhook payloads, branch support, and file handling capabilities.

Added

Workspace audit logs

  • Track guest access approvals: The new access_request_accepted event subtype lets you monitor when guest access requests are approved. The response includes a targetUsers array so you can see exactly which users were approved.
  • Monitor access requests: Added the access_request method for workspace_membership and site_membership events to track how users were granted access to workspaces and sites.

Webhook payloads for page events

  • Navigate directly to pages: The new publishedPath field in webhook payloads gives you the exact URL path to navigate to pages on your site. This makes it much easier to track page changes beyond just the page ID and title. Available for:

Branch support for pages and components localization

  • Work with page branches: Page and Component localization endpoints now support reading and writing to page branches using the branchId parameter. This lets you manage draft pages and components separately from published content. To get the branchId for a page, use the List Pages endpoint.

Improved file handling

  • Skip invalid files gracefully: When creating or updating CMS items with attachments, use the skipInvalidFiles parameter to handle problematic files more efficiently. When set to true, invalid files are skipped and processing continues. When false, the entire request fails if any file is invalid.

JavaScript SDK updates

Breaking changes for CMS publishing

On July 7, 2025, we’re releasing important updates to how CMS items are published and managed via the API. These changes affect how you manage live items and publish CMS content with the API. Please review the breaking changes below to avoid disruptions.

Draft management improvements

The Webflow UI now supports saving draft changes to published CMS items without affecting live content. To maintain consistency between the UI and API, we’re introducing the following change:

Unpublishing live items Breaking Change

Previously, updating a live item’s isDraft property to true would unpublish a live item from the site. This behavior is changing to support improved draft management:

Affected endpoints:
If you’re using the following endpoints to unpublish live items, you’ll need to update your code to use the dedicated unpublish endpoints instead:

Understanding item status

Item status in Webflow

In the Webflow UI, CMS items have a status field that maps to the item’s isDraft and lastPublished properties. Here’s how these properties determine an item’s status:

StatusisDraftlastPublishedDescription
DrafttruenullNever published or previously unpublished item
PublishedfalsetimestampItem is live on the site
Changes in drafttruetimestampPublished item with pending changes in the staged item
Queued to publishfalse< lastUpdatedChanges will publish on next site publish. This is the default status for newly created items, as well as for updates to items that have already been published.

Note: The Unpublish Live Item endpoint sets isDraft: true and lastPublished: null.

Enhanced publishing flexibility 🎉

You can now publish CMS items with the API even when site domains are out of sync. For example, if you’ve published to staging but not to production. This removes the previous limitation that caused 409 errors in these scenarios. No changes needed here - instead, we expect that you’ll see less errors!

Affected endpoints:


Required actions

  1. Review Integrations

    • Identify code using isDraft: true for unpublishing
    • Test with beta APIs in development environment
  2. Update Code

    • Replace isDraft unpublishing with proper endpoints
    • Test and verify changes in your development environment

Test changes with the Beta APIs

All functionality described above is available now through the Beta APIs under the /beta namespace. To test, replace /v2 with /beta in your API calls within a testing environment to see the new behavior in action. Unfortunately, the Webflow SDK doesn’t support the beta namespace at this time.

Timeline

  1. Now - July 7, 2025: Testing period

  2. July 7, 2025: Changes go live

    • Breaking changes take effect in v2

For questions or more information, please see our post in the Webflow Forum

Webflow MCP Server Version Update to 0.5.1

Feature enhancements

  • Inline script management
    Use AI agents to generate and insert (or delete) inline code snippets

  • Collection Item deletion
    Agents can now remove CMS items programmatically, completing the full CRUD through your AI coding tool.

Improvements

  • Structural refactor
    The codebase now has a clearer folder structure, consistent naming, and easier long-term maintenance.** No breaking changes.**

New tools

These updates give your AI agents deeper, safer autonomy:

ToolOne-line description
site_registered_scripts_listFetch a catalog of all custom code registered for the site.
site_applied_scripts_listRetrieve the scripts currently applied to the live site.
add_inline_site_scriptInject a new inline <script> block into the site.
delete_all_site_scriptsDelete all scripts from the site in a single call.
collections_items_delete_itemDelete a specific CMS collection item by its ID.

Add 0.5.1 your AI editor

See our MCP server documentation for more information on how to add the MCP server to your AI editor.

1{
2 "mcpServers": {
3 "webflow": {
4 "command": "npx",
5 "args": ["-y", "webflow-mcp-server@0.5.1"],
6 "env": {
7 "WEBFLOW_TOKEN": "<YOUR_WEBFLOW_TOKEN>"
8 }
9 }
10 }
11}

Workspace audit logs and improvements for Webflow Apps

Workspace Audit Logs

Introducing workspace audit logs

To enable better security and compliance monitoring, the Webflow Data API now supports workspace-level audit logs for enterprise customers. In combination with the existing site-level audit logs, teams now have a complete view of user activity across their organization.

Use the Workspace Audit Log API to track important user events, including:

This endpoint requires authentication with a Workspace API token

Localization support for additional elements

These updates enable you to localize more element types on a page. In addition to the existing support for text-based elements and component instances, you can now localize the following elements using the Page APIs:

  • Select choices on a select element
  • Placeholder text on a text input element
  • Button text on submit and search buttons

Quality of life updatesWebflow Apps

Additionally, Webflow Apps now supports:

  1. Inviting users to test apps
    You can now invite external users to test your apps before publishing to the marketplace by simply providing their email address and a message. This feature addresses the previous limitation where in-development apps could only be installed within the registered workspace. Contact developers@webflow.com for early access.

  2. Safeguarding app settings for marketplace apps
    We’ve improved stability for marketplace apps by implementing safeguards against breaking changes. To protect both app developers and end users, certain critical setting changes for published apps now require re-approval through our update process. This ensures your users always have a consistent experience while giving you a controlled path to evolve your app’s capabilities. In your app settings modal, you’ll now see some disabled settings that require re-approval to make changes.

    These settings include:

    • Adding a new building block (Designer or Data API)
    • Changing app scopes

Introducing Webflow's official MCP server and LLMS.txt support

MCP Hero Image

Introducing Webflow’s MCP server

For developers using AI-powered tools like Cursor or Claude Desktop, we provide a Model Context Protocol (MCP) server that enhances the agent’s understanding of your Webflow projects. The MCP server has tools that enable the AI agent to access real-time information about your sites, collections, and other objects, enabling more accurate and contextual code suggestions and troubleshooting. To see a full list of tools, see the MCP server documentation.

LLMS.txt support

We’re excited to announce compatibility with the emerging llms.txt standard, making your documentation accessible and optimized for AI developer tools such as Cursor, GitHub Copilot, ChatGPT, Perplexity, and Anthropic’s Claude.

llms.txt is designed to be token-efficient, ensuring faster processing and cost-effective LLM interactions without sacrificing valuable info. Learn more

  • Use https://developers.webflow.com/llms.txt to access the LLM-readable documentation.
  • Additionally, you can access markdown versions of any documentation page to provide a more structured and context-rich experience for LLMs. To access the markdown version of a page, add .md to the end of the URL.

Introducing the Comments API

Webflow is excited to introduce a new Comments API. With these new endpoints, you can programmatically access comments across your Webflow sites, enabling integrations with your existing tools and workflows. This release makes it easier than ever to track feedback, coordinate reviews, and streamline your content management processes.

Timing on comments

There may be up to a 5-minute delay before comment threads appear in the system. This delay may also occur in webhook notifications.

Add .well-known files to your site

In addition to existing support for site configuration, the Data API now supports setting and deleting .well-known files. This empowers site managers to automate and streamline the management of site metadata and security configurations, enhancing integration with modern web protocols and improving overall site interoperability. For more information, see Wefblow’s help documentation on .well-known files.

Improved control over form submission data

The List form submissions by site endpoint now lets you retrieve form submissions across your entire site. Unlike the existing List Form Submissions endpoint, this endpoint:

  • Takes siteId as a path parameter
  • Accepts elementId as a query parameter to filter by formElementId
  • Works seamlessly with forms in components, where each component instance gets a unique formId but shares the same formElementId

To use this endpoint, first get the formElementId from the List Forms API, then pass both the siteId and formElementId to retrieve all submissions for a specific form, even when it appears in multiple component instances.

Enhancements to CMS fields and site configuration

The Data API now supports creating reference fields and creating multiple fields during collection creation.

  • Create reference fields
    To create a reference field, choose MultiReference or Reference as the type property in the field object. Additionally, include the metadata property to specify the collectionId of the collection that the reference field will point to. You can create a reference field during collection creation using the create collection endpoint or by updating an existing collection using the create collection field endpoint.
  • Create fields during collection creation
    You can now create multiple fields during collection creation using the create collection endpoint. Collections are limited to 60 fields per collection.

Add and manage robots.txt