For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Resources
Get started
    • Overview
  • APIs and SDKs
    • Data API
    • Designer API
    • Browser API
  • Developer tools
    • MCP Server
    • Webflow Apps
    • Webflow CLI
    • DevLink
    • Webflow Cloud
    • Flowkit CSS Framework
    • Changelog
LogoLogo
Resources
Get started
On this page
  • May 29, 2026
  • Breaking changes
  • Upgrading
  • Renamed commands
  • May 21, 2026
  • Components
  • Branching
  • Styles
  • Elements
  • Comments
  • CMS
  • Mode awareness
  • MCP resources
  • May 18, 2026
  • New endpoints
  • Locale-aware reads and writes
  • Bulk operations
  • Flexible input
  • Validation limits
  • May 12, 2026
  • What changed
  • Migration notes
  • May 6, 2026
  • What's new
  • What you can build
  • Authentication and scopes
  • Upload handshake
  • Limitations
  • New endpoints
  • May 5, 2026
  • New query parameter: folderId
  • New response field: folderId
  • Reliability
  • Bug fixes
  • Resources
  • April 30, 2026
  • webflow forms list
  • webflow forms submissions
  • CMS error handling improvements
  • Fix: duplicate "Credentials saved" output

Changelog


This is an overview of the changes to the Webflow APIs and related tools. To filter the list, select one or more tags.

May 29, 2026
May 29, 2026

May 29, 2026
May 29, 2026

May 21, 2026
May 21, 2026

May 18, 2026
May 18, 2026

May 12, 2026
May 12, 2026

May 6, 2026
May 6, 2026

May 5, 2026
May 5, 2026

May 5, 2026
May 5, 2026

April 30, 2026
April 30, 2026

April 30, 2026
April 30, 2026

Older posts

Next
Built with

CLI v2.0.0: Renamed commands and Node.js 22 minimum version

CLI 2.0 consolidates the webflow library command group into webflow devlink and raises the Node.js minimum version to 22.13.0. The commands from the previous version still work but emit deprecation warnings because they will be removed in a future version.

Breaking changes

Node.js minimum version raised to 22.13.0. Verify your Node.js version with node --version before upgrading.

Upgrading

Run this command to upgrade the Webflow CLI to version 2.0:

$npm install -g @webflow/webflow-cli@latest

Then, verify the version of the CLI by running this command:

$webflow --version

Renamed commands

These commands have been renamed. The commands work the same way and take the same options. Be sure to update scripts and CI to use the new commands.

Version 1 commandVersion 2 commandDescription
webflow library sharewebflow devlink importBundles and shares components with a Webflow Workspace
webflow library bundlewebflow devlink bundleBundles a Code Component library locally without sharing it to Webflow
webflow library logwebflow logShows the path to the latest log file
webflow cloud createwebflow cloud initInitializes a Webflow Cloud project from a template

For full options and examples, see the command reference.

Streamlined deployment for Webflow Cloud applications

It’s now easier to deploy Astro and Next.JS applications to Webflow Cloud. You can click this button to walk you through the process of deploying a project from a GitHub repository to Webflow Cloud:

Deploy to Webflow

You can also pass the URL of the GitHub repository to Webflow Cloud, as in this example: https://webflow.com/dashboard/cloud/deploy?repo=https://github.com/Webflow-Examples/hello-world-nextjs.

You now have the option to deploy applications to Webflow Cloud without connecting them to a Webflow site. Note that your Workspace now shows sites and these independent applications separately, as in this screenshot:

Looking at the applications within a workspace

Applications that are part of a site are still shown in that site’s settings, as in this screenshot:

Looking at the applications within a site

For more information, see Bring your own app.

MCP v1.3: Components, branching, and expanded authoring tools

Version 1.3 of the Webflow MCP server adds over 30 new tools and actions across component authoring, branch management, styles, elements, and comments. If you are already using the MCP server, your agents and prompts automatically use this version. To start using the MCP server, see Getting started.

Components

Agents can now work with components end-to-end. They can create blank components, define and manage props, set and reset prop values on instances, bind props to element settings and text, manage variants (including variant-scoped style variable modes), duplicate components, reorder variants, and unlink component instances. They can now read and edit Text and Rich Text prop content. In many cases they can set CMS field bindings as component props.

Component query results are now richer: responses can include props, instance counts, and variants. Library components and code components (with their read-only and runtime flags) are now included in component lookup results.

Branching

Agents can now create, inspect, and delete page branches. They can retrieve branch details and IDs for the currently active page.

Styles

Agents can now query styles by ID, name path (including combo classes), and CSS properties, with options to include breakpoint and property data. They can create and update styles from raw CSS.

Elements

Agents can now query elements using a range of filters (ID, type, text content, style, tag, attributes, component name, and slot), delete elements from the canvas, and reposition elements relative to an anchor without deleting and recreating them. The element builder now supports a much broader set of element types, including rich text, form elements, media embeds, tabs, sliders, CMS collections, page slots, and dropdowns.

Comments

Agents can now read and add site comments: listing threads and replies, replying to threads, and looking up workspace users by email. Comments at the element level are also now supported.

CMS

Agents can now unpublish CMS items.

Mode awareness

Agents now understand which Designer mode the user is in. The current mode is exposed in tool responses, ModeForbidden errors are surfaced clearly, and tool descriptions include mode constraints to prevent unnecessary failures. Guide content has been updated for Build mode workflows.

MCP resources

The MCP server now supports MCP resources. In supported clients such as Claude and Cursor, you can @-reference resources directly without calling a tool first. The Webflow Guide is now available as a resource.

Pages API: read and write JSON-LD schema markup

The Data API now exposes endpoints for managing the JSON-LD schema markup attached to a page. Schema markup powers rich search results such as FAQ snippets, breadcrumbs, organization cards, and product listings. Previously, schema markup could be edited only one page at a time in the Designer.

New endpoints

All four endpoints are available under the /v2/beta/ prefix.

MethodPathRequired scope
GET/pages/{page_id}/schema-markuppages:read
PUT/pages/{page_id}/schema-markuppages:write
POST/sites/{site_id}/pages/schema-markup/querypages:read
PATCH/sites/{site_id}/pages/schema-markuppages:write

Locale-aware reads and writes

Each endpoint accepts an optional localeId to target a secondary locale. When a secondary locale has no schema markup of its own, the response returns the primary locale’s schema markup and sets isInherited to true.

Bulk operations

The bulk read endpoint accepts up to 100 page entries per request. The bulk update endpoint accepts up to 25 page entries per request. Each entry in a bulk request can target a different locale, so you can update the same page across multiple locales in a single call.

Flexible input

The jsonLdSchema field accepts a JSON object, a raw JSON string, or a string wrapped in a <script type="application/ld+json"> tag. Pass null to clear the schema markup for the targeted page or locale.

Validation limits

Each entry is validated against the following limits:

  • 60KB raw input
  • 32 levels of nesting
  • 5,000 nodes

Pages API: slug field is now silently ignored when it can’t be changed

Update Page Metadata no longer returns an error when the slug field can’t be applied. The request now returns 200 OK with the slug field silently ignored — all other fields in the update apply as expected.

What changed

  • Home pages, collection template (detail) pages, and utility pages (e.g. 404, password, search) previously returned 400 Bad Request ("Slug of index pages can't be updated", "Collection Template page slugs cannot be updated", or "Utility page slugs cannot be updated") when a slug was included. They now return 200 OK with the slug ignored.
  • Secondary locales on sites without the Advanced or Enterprise Localization add-on previously returned 403 Forbidden when a slug was included. They now return 200 OK with the slug ignored.

Migration notes

If your integration relied on the previous 400 or 403 responses to detect page-type or plan restrictions, switch to comparing the returned page’s slug against the value you sent — they’ll differ when the slug was ignored.

Custom Fonts API

The Custom Fonts API adds seven new OAuth v2 endpoints under /v2/sites/{site_id}/custom_fonts. Apps can now manage a site’s custom fonts programmatically — uploading, listing, updating, replacing, and deleting fonts without any manual steps in the Webflow Designer.

For information on using custom fonts in sites, see Custom fonts.

What’s new

  • Upload a font to a site, with full variable font axis metadata
  • List a site’s custom fonts with pagination
  • Get a single custom font by ID
  • Update font metadata (family name, weight, italic, font-display) without re-uploading the binary
  • Replace a font’s binary while preserving the font’s ID and references
  • Delete a custom font by ID
  • Batch delete custom fonts in one request, with a per-font success and failure manifest

What you can build

Foundry and font-platform apps. Apps that license fonts can provision the licensed binaries straight into a customer’s Webflow site. Your user browses your library, selects a face, and the font appears in the site’s typography picker.

Brand-system and multi-site management apps. Agencies managing many sites under one workspace can keep the same brand fonts in sync across every site. Push a new corporate typeface to all client sites in one batch, or remove a deprecated weight from all of them just as easily.

AI and MCP agents. An AI assistant can now complete a site’s typography setup end-to-end — upload the brand’s custom font and it is immediately available across the site’s surfaces, with no manual handoff.

Authentication and scopes

The API reuses the existing sites:read and sites:write OAuth scopes. No new scopes are required, and existing app installations don’t need to re-authorize.

Upload handshake

Font uploads use the same presigned-S3 handshake as the Assets API.

  1. POST to Webflow with the font metadata and the MD5 hash of the binary. Webflow returns 202 Accepted with a customFont object and a presigned upload object.
  2. POST the binary directly to upload.url as multipart/form-data, including every key from upload.fields. The binary goes in a field named file, which must be the last field in the form. S3 returns 201 Created on success.

The font is immediately available in the site’s typography picker after the S3 upload completes.

Limitations

  • Supported formats: WOFF2, WOFF, TTF, OTF, EOT. SVG fonts are not supported.
  • File size: Uploads exceeding 4 MB are rejected by S3.
  • Per-site limit: Each site has an internal cap on total custom fonts. Exceeding the cap returns 409 Conflict.
  • Batch delete: Accepts 1-100 font IDs per request.

New endpoints

EndpointOperation
GET /v2/sites/{site_id}/custom_fontsList custom fonts
POST /v2/sites/{site_id}/custom_fontsCreate custom font
GET /v2/sites/{site_id}/custom_fonts/{font_id}Get custom font
PATCH /v2/sites/{site_id}/custom_fonts/{font_id}Update custom font
DELETE /v2/sites/{site_id}/custom_fonts/{font_id}Delete custom font
PUT /v2/sites/{site_id}/custom_fonts/{font_id}/fileReplace custom font file
POST /v2/sites/{site_id}/custom_fonts/batchDeleteBatch delete custom fonts

List Assets: folder filtering and per-asset folder context

You can now scope the List Assets endpoint (GET /v2/sites/{site_id}/assets) to return assets that are in a specified folder. In the same way, the response to this endpoint includes the folder that an asset is in.

New query parameter: folderId

Pass a folder’s ObjectId to receive only assets in that folder and all of its descendant folders. When folderId is omitted, the endpoint returns all assets on the site as before.

  • Type: string (24-character hex ObjectId)
  • Required: no
  • Behavior: recursive — assets in nested subfolders are included
  • pagination.total reflects the filtered count, so paginated UIs get correct totals
$curl -H "Authorization: Bearer $WEBFLOW_TOKEN" \
> "https://api.webflow.com/v2/sites/$SITE_ID/assets?folderId=$FOLDER_ID"

New response field: folderId

Every asset in the response to this endpoint now includes a folderId field. The value is the ObjectId of the folder the asset belongs to, or null when the asset is at the site root.

1{
2 "assets": [
3 {
4 "id": "63e5889e7fe4eafa7384cea4",
5 "displayName": "banner.png",
6 "folderId": "6390c49774a71f99f21a08eb"
7 },
8 {
9 "id": "63e5889e7fe4eafa7384cea5",
10 "displayName": "logo.svg",
11 "folderId": null
12 }
13 ]
14}

folderId appears only in the response to the GET /v2/sites/{site_id}/assets endpoint. The single-asset GET /assets/{asset_id} and PATCH /assets/{asset_id} responses are unchanged.

MCP v1.2.1 - Improved connection reliability and Gemini compatibility

Version 1.2.1 of the Webflow MCP server improves connection reliability and fixes compatibility with Gemini-based AI clients. If you are already using the MCP server, your agents and prompts automatically use this version.

Reliability

  • Fixed connection drops: The MCP server now maintains open connections during idle periods instead of dropping them. Previously, agents could lose their session mid-task and require a full reconnect after a period of inactivity. Sessions now survive idle periods without interruption.

Bug fixes

  • Gemini compatibility: Fixed an HTTP 400 error that prevented Gemini-based AI clients from using the element_builder and component_builder tools. Gemini’s strict OpenAPI 3.0 validation rejected array schemas that were missing an items type definition. Claude-based clients were unaffected.

Resources

  • Getting started guide — Setup instructions
  • How it works — Tool reference and capabilities
  • Skills — Agent skills
  • Prompt library — Example prompts

v1.21.0: Forms commands

v1.21.0 adds a forms command group for reading form data and exporting submissions.

webflow forms list

Lists all forms on a site with their ID, display name, and slug. Supports --fields to customize columns and --json for machine-readable output.

$webflow forms list --site <siteId>
$webflow forms list --site <siteId> --json

webflow forms submissions

Lists all submissions for a specific form. Submissions can be output as a formatted table, JSON, or exported directly to CSV with --output.

$webflow forms submissions --site <siteId> --form <formId>
$webflow forms submissions --site <siteId> --form <formId> --output submissions.csv

Required OAuth scope: forms:read

v1.20.2: CMS error handling improvements and auth fix

v1.20.2 is a patch release with CMS UX improvements and a small auth output fix.

CMS error handling improvements

  • Cleaner user errors — Invalid collection or item IDs now display a clean message and exit with code 1 instead of throwing a CLI error with a stack trace.
  • Structured API error bodies — When the Webflow API returns an error, the full structured error body from the response is now included in the output, not just the HTTP status code.
  • Next-steps hint after collections create — After successfully creating a collection, the CLI now prints a hint showing how to add fields to it:
    $webflow cms collections create --site <siteId> --name "Blog Posts"
    $# ✔ Collection created: Blog Posts (id: abc123)
    $# → Add fields: webflow cms fields create --collection abc123 --name <name> --type <type>

Fix: duplicate “Credentials saved” output

Running webflow auth login no longer prints the “Credentials saved” line twice. Previously, both ensureAuthenticated and the auth login command handler logged the message independently.