Logo

Webflow

Authentication Type: API Key Description: Manage Webflow CMS collections, items, pages, assets, and site publishing through the Webflow Data API v2. Create and update CMS content, upload images, and publish changes to live sites.


Authentication

To authenticate, you'll need a Webflow site API token:

  1. Open your Webflow site dashboard
  2. Go to Site settings → Apps & integrations → API access
  3. Under API token, generate a new token (or copy an existing one)

You'll need to provide:

  • apiToken string: Your Webflow site API token

Note: A site API token gives access to a single site. If you manage multiple sites, you need one token per site. List endpoints return up to 100 records per page; use offset to page through larger sets.


Sites

List Sites

List the Webflow sites the connected API token can access. Returns each site ID (needed by the other Webflow tools), its custom domain IDs, and its locale IDs.

Operation Type: Query (Read)

Parameters:

No parameters required. Lists every site the API token can access.

Returns:

  • sites array of objects: Sites the API token can access
    • id string: Site ID. Pass as siteId to the other Webflow tools.
    • displayName string (nullable): Site name
    • shortName string (nullable): Slugified site name
    • timeZone string (nullable): Site time zone
    • createdOn string (nullable): When the site was created
    • lastUpdated string (nullable): When the site was last updated
    • lastPublished string (nullable): When the site was last published
    • customDomains array of objects: Custom domains attached to the site
      • id string: Custom domain ID. Pass in customDomainIds when publishing the site.
      • url string (nullable): Domain name
      • lastPublished string (nullable): When this domain was last published
    • primaryLocale object (nullable): Primary locale, or null when the site has no localization
      • id string: Locale ID. Pass as localeId to the page tools.
      • cmsLocaleId string (nullable): CMS locale ID. Pass as cmsLocaleId to the CMS item tools.
      • enabled boolean (nullable): Whether the locale is enabled
      • displayName string (nullable): Locale name, e.g. "French (France)"
      • tag string (nullable): IETF tag, e.g. "fr-FR"
      • subdirectory string (nullable): URL subdirectory the locale is served from
    • secondaryLocales array of objects: Secondary locales (empty when the site has no localization), same shape as primaryLocale
  • count number: Number of sites returned

Example Usage:

{}

Collections & Schema

List Collections

List the CMS collections in a Webflow site, e.g. Blog Posts or Team Members. Returns each collection ID and name. Use Get Collection Schema to see the fields of a collection.

Operation Type: Query (Read)

Parameters:

  • siteId string (required): Site ID to list collections for. Get it from List Sites.

Returns:

  • collections array of objects: Collections in the site
    • id string: Collection ID. Pass as collectionId to the CMS item tools.
    • displayName string (nullable): Collection name, e.g. "Blog Posts"
    • singularName string (nullable): Singular name, e.g. "Blog Post"
    • slug string (nullable): Collection URL slug
    • createdOn string (nullable): When the collection was created
    • lastUpdated string (nullable): When the collection was last updated
  • count number: Number of collections returned

Example Usage:

{
  "siteId": "<site-id>"
}

Get Collection Schema

Get the fields of a Webflow CMS collection: each field slug, type, whether it is required, and its validations. Call this before creating or updating items so field values are written in the right format.

Operation Type: Query (Read)

Parameters:

  • collectionId string (required): Collection ID. Get it from List Collections.

Returns:

  • id string: Collection ID
  • displayName string (nullable): Collection name
  • singularName string (nullable): Singular name
  • slug string (nullable): Collection URL slug
  • createdOn string (nullable): When the collection was created
  • lastUpdated string (nullable): When the collection was last updated
  • fields array of objects: Fields of the collection
    • id string: Field ID
    • slug string (nullable): Field slug. This is the key to use in item fieldData.
    • displayName string (nullable): Field label
    • type string (nullable): Field type: PlainText, RichText, Image, MultiImage, VideoLink, Link, Email, Phone, Number, DateTime, Switch, Color, Option, File, Reference, MultiReference or ExtFileRef
    • isRequired boolean: Whether a value is required when creating an item
    • isEditable boolean (nullable): Whether the field can be written through the API
    • helpText string (nullable): Help text shown to editors
    • validations any (nullable): Type-specific rules. Option fields list their choices as options[{id, name}] (write the id). Reference and MultiReference fields give the target collectionId.

Example Usage:

{
  "collectionId": "<collection-id>"
}

CMS Items

List Items

List the items in a Webflow CMS collection, with their field values. By default returns staged items (including drafts and unpublished edits); set live to true to get only what is published on the site. Returns up to 100 items per call; use offset to page through the rest.

Operation Type: Query (Read)

Parameters:

  • collectionId string (required): Collection ID. Get it from List Collections.
  • live boolean (default: false): false lists staged items: every item including drafts and unpublished edits. true lists only the published versions currently live on the site.
  • cmsLocaleId string (nullable): CMS locale ID to read items in. Omit for the primary locale. Get it from List Sites.
  • name string (nullable): Only return items whose name matches exactly.
  • slug string (nullable): Only return the item with this exact slug.
  • sortBy string (nullable): Field to sort by: createdOn, lastPublished, lastUpdated, name, or slug.
  • sortOrder string (nullable): Sort direction: asc or desc.
  • limit number (default: 100): Maximum number of items to return (1–100).
  • offset number (default: 0): Number of items to skip, for pagination.

Returns:

  • items array of objects: Collection items
    • id string: Item ID
    • cmsLocaleId string (nullable): CMS locale this version of the item belongs to
    • lastPublished string (nullable): When the item was last published, or null if never published
    • lastUpdated string (nullable): When the item was last updated
    • createdOn string (nullable): When the item was created
    • isArchived boolean: Whether the item is archived
    • isDraft boolean: Whether the item is a draft
    • fieldData object: Field values keyed by field slug. Always includes name and slug.
  • pagination object: Pagination information
    • limit number: Page size used for this request
    • offset number: Offset used for this request
    • total number: Total number of records available. Request the next page with offset + limit while offset + limit < total.

Example Usage:

{
  "collectionId": "<collection-id>",
  "live": false,
  "limit": 100,
  "offset": 0
}

Get Item

Get a single Webflow CMS item by ID, with all of its field values. Returns the staged version by default; set live to true for the published version.

Operation Type: Query (Read)

Parameters:

  • collectionId string (required): Collection ID the item belongs to.
  • itemId string (required): Item ID.
  • live boolean (default: false): false returns the staged version, including unpublished edits. true returns the version currently live on the site.
  • cmsLocaleId string (nullable): CMS locale ID to read the item in. Omit for the primary locale.

Returns:

  • id string: Item ID
  • cmsLocaleId string (nullable): CMS locale this version of the item belongs to
  • lastPublished string (nullable): When the item was last published
  • lastUpdated string (nullable): When the item was last updated
  • createdOn string (nullable): When the item was created
  • isArchived boolean: Whether the item is archived
  • isDraft boolean: Whether the item is a draft
  • fieldData object: Field values keyed by field slug. Always includes name and slug.

Example Usage:

{
  "collectionId": "<collection-id>",
  "itemId": "<item-id>",
  "live": false
}

Create Draft Items

Create one or more items in a Webflow CMS collection. Items are always created as drafts and are not visible on the live site until published with Publish Items. Call Get Collection Schema first to learn the field slugs and value formats.

Operation Type: Mutation (Write)

Parameters:

  • collectionId string (required): Collection ID to create items in. Get it from List Collections.
  • items array of objects (required): Items to create. At most 100 per call, counting each locale of each item as one.
    • fieldData object (required): Field values for the new item. name and slug are required. Keys are field slugs from the collection schema. Value formats by field type: PlainText, Link, Email, Phone, VideoLink and Color are strings; RichText is an HTML string; Number is a number; Switch is a boolean; DateTime is an ISO 8601 string; Option is the option ID from the schema field validations; Reference is an item ID and MultiReference is an array of item IDs; Image and File are {"url": "https://...", "alt": "..."} (4MB max for images) and MultiImage is an array of those.
    • cmsLocaleIds array of strings (nullable): CMS locale IDs to create the item in. Omit to create it in the primary locale only.
  • skipInvalidFiles boolean (default: true): true skips image or file URLs Webflow cannot fetch and still creates the item. Set to false to fail the request instead.

Returns:

  • items array of objects: The created draft items, one per item and locale (same shape as Get Item output)
  • count number: Number of items created

Example Usage:

{
  "collectionId": "<collection-id>",
  "items": [
    {
      "fieldData": {
        "name": "My First Blog Post",
        "slug": "my-first-blog-post",
        "post-body": "<p>Hello world</p>",
        "featured-image": { "url": "https://example.com/hero.png", "alt": "Hero image" }
      },
      "cmsLocaleIds": null
    }
  ],
  "skipInvalidFiles": true
}

Update Items

Update one or more existing Webflow CMS items. Only the fields you send are changed. Edits are staged: an item that is already published keeps showing its old content on the live site until it is published again with Publish Items.

Operation Type: Mutation (Write)

Parameters:

  • collectionId string (required): Collection ID the items belong to.
  • items array of objects (required): Items to update. At most 100 per call.
    • id string (required): ID of the item to update.
    • cmsLocaleId string (nullable): CMS locale ID of the version to update. Omit to update the primary locale.
    • fieldData object (nullable): Field values to change. Only the fields included are updated; the rest keep their values. Same format as Create Draft Items.
    • isDraft boolean (nullable): Set the draft flag. false queues the item to go live on the next site publish. Omit to leave unchanged.
    • isArchived boolean (nullable): Set the archived flag. Omit to leave unchanged.
  • skipInvalidFiles boolean (default: true): true skips image or file URLs Webflow cannot fetch and still updates the item. Set to false to fail the request instead.

Returns:

  • items array of objects: The updated items as staged (same shape as Get Item output)
  • count number: Number of items updated

Example Usage:

{
  "collectionId": "<collection-id>",
  "items": [
    {
      "id": "<item-id>",
      "fieldData": {
        "post-summary": "Updated summary text"
      },
      "isDraft": null,
      "isArchived": null
    }
  ],
  "skipInvalidFiles": true
}

Publish Items

Publish one or more Webflow CMS items so their staged content goes live on the site, without publishing the whole site. The call can partly succeed: check errorCount and errors for items that were not published.

Operation Type: Mutation (Write)

Parameters:

  • collectionId string (required): Collection ID the items belong to.
  • items array of objects (required): Items to publish. At most 100 per call.
    • id string (required): Item ID.
    • cmsLocaleIds array of strings (nullable): CMS locale IDs to apply this to. Omit to apply to the primary locale only.

Returns:

  • publishedItemIds array of strings: IDs of the items that were published
  • errors array: Items Webflow could not publish, with the reason. Can be non-empty even when other items were published.
  • publishedCount number: Number of items published
  • errorCount number: Number of items that failed to publish. Check this before reporting success.

Example Usage:

{
  "collectionId": "<collection-id>",
  "items": [{ "id": "<item-id>", "cmsLocaleIds": null }]
}

Unpublish Items

Take one or more Webflow CMS items off the live site. The items are not deleted: they stay in the collection as drafts and can be published again with Publish Items.

Operation Type: Mutation (Write)

Parameters:

  • collectionId string (required): Collection ID the items belong to.
  • items array of objects (required): Items to unpublish. At most 100 per call.
    • id string (required): Item ID.
    • cmsLocaleIds array of strings (nullable): CMS locale IDs to apply this to. Omit to apply to the primary locale only.

Returns:

  • unpublishedItemIds array of strings: IDs of the items that were unpublished
  • unpublishedCount number: Number of items unpublished

Example Usage:

{
  "collectionId": "<collection-id>",
  "items": [{ "id": "<item-id>", "cmsLocaleIds": null }]
}

Pages

List Pages

List the pages of a Webflow site with their metadata: title, slug, published path, SEO and Open Graph settings, and draft or archived state. Returns up to 100 pages per call; use offset to page through the rest.

Operation Type: Query (Read)

Parameters:

  • siteId string (required): Site ID to list pages for. Get it from List Sites.
  • localeId string (nullable): Locale ID to read page metadata in. Omit for the primary locale. Get it from List Sites.
  • limit number (default: 100): Maximum number of pages to return (1–100).
  • offset number (default: 0): Number of pages to skip, for pagination.

Returns:

  • pages array of objects: Pages in the site (see Get Page Metadata for the full field list)
  • pagination object: Pagination information
    • limit number: Page size used for this request
    • offset number: Offset used for this request
    • total number: Total number of records available

Example Usage:

{
  "siteId": "<site-id>",
  "limit": 100,
  "offset": 0
}

Get Page Metadata

Get the metadata of a single Webflow page: title, slug, published path, SEO title and description, Open Graph settings, and draft or archived state. Does not return the page body; use Get Page Content for that.

Operation Type: Query (Read)

Parameters:

  • pageId string (required): Page ID. Get it from List Pages.
  • localeId string (nullable): Locale ID to read the metadata in. Omit for the primary locale.

Returns:

  • id string: Page ID. Pass as pageId to the other page tools.
  • siteId string (nullable): Site the page belongs to
  • title string (nullable): Page title
  • slug string (nullable): Page URL slug
  • parentId string (nullable): ID of the parent folder, or null for a top-level page
  • collectionId string (nullable): Collection ID when this is a CMS collection template page, otherwise null
  • localeId string (nullable): Locale this version of the page belongs to
  • publishedPath string (nullable): Path the page is published at, e.g. "/pricing"
  • createdOn string (nullable): When the page was created
  • lastUpdated string (nullable): When the page was last updated
  • archived boolean: Whether the page is archived
  • draft boolean: Whether the page is a draft
  • seo object: Search engine metadata
    • title string (nullable): SEO title shown in search results
    • description string (nullable): SEO meta description
  • openGraph object: Social sharing metadata
    • title string (nullable): Open Graph title
    • titleCopied boolean (nullable): Whether the Open Graph title mirrors the SEO title
    • description string (nullable): Open Graph description
    • descriptionCopied boolean (nullable): Whether the Open Graph description mirrors the SEO description

Example Usage:

{
  "pageId": "<page-id>"
}

Update Page Metadata

Update the metadata of a Webflow page: title, slug, SEO title and description, and Open Graph title and description. Only the fields you provide are sent. Changes go live on the next site publish. Does not change the page body.

Operation Type: Mutation (Write)

Parameters:

  • pageId string (required): Page ID. Get it from List Pages.
  • localeId string (nullable): Locale ID of the version to update. Omit to update the primary locale.
  • title string (nullable): New page title. Omit to leave unchanged.
  • slug string (nullable): New URL slug. Omit to leave unchanged. Webflow ignores this for the home page, collection template pages, and utility pages (404, password, search).
  • seoTitle string (nullable): New SEO title. Omit to leave unchanged.
  • seoDescription string (nullable): New SEO meta description. Omit to leave unchanged.
  • openGraphTitle string (nullable): New Open Graph title. Only takes effect when openGraphTitleCopied is false. Omit to leave unchanged.
  • openGraphTitleCopied boolean (nullable): true makes the Open Graph title mirror the SEO title; false lets it differ. Omit to leave unchanged.
  • openGraphDescription string (nullable): New Open Graph description. Only takes effect when openGraphDescriptionCopied is false. Omit to leave unchanged.
  • openGraphDescriptionCopied boolean (nullable): true makes the Open Graph description mirror the SEO description; false lets it differ. Omit to leave unchanged.

Returns:

The updated page metadata (same shape as Get Page Metadata output).

Example Usage:

{
  "pageId": "<page-id>",
  "seoTitle": "Pricing — My Company",
  "seoDescription": "Simple, transparent pricing for teams of all sizes.",
  "openGraphTitleCopied": true,
  "openGraphDescriptionCopied": true
}

Get Page Content

Read the static content of a Webflow page as a list of nodes: text, images, component instances and form elements. Use it to audit page copy. Read-only: static page content cannot be changed through these tools. Returns up to 100 nodes per call; use offset to page through the rest. CMS-driven content is not included; read that with the CMS item tools.

Operation Type: Query (Read)

Parameters:

  • pageId string (required): Page ID. Get it from List Pages.
  • localeId string (nullable): Locale ID to read the content in. Omit for the primary locale. Get it from List Sites.
  • limit number (default: 100): Maximum number of nodes to return (1–100).
  • offset number (default: 0): Number of nodes to skip, for pagination.

Returns:

  • pageId string: Page ID
  • branchId string (nullable): Branch ID when the page is a branch, otherwise null
  • lastUpdated string (nullable): When the page content was last updated
  • nodes array of objects: Content nodes on the page, in document order
    • id string: Node ID
    • type string: Node type: text, image, component-instance, text-input, select, submit-button, or search-button
    • html string (nullable): HTML of a text node, including its wrapping tag. Null for other node types.
    • text string (nullable): Plain text of a text node. Null for other node types.
    • imageAlt string (nullable): Alt text of an image node
    • imageAssetId string (nullable): Asset ID of an image node
    • componentId string (nullable): Component ID of a component-instance node
    • propertyOverrides array of objects (nullable): Property values overridden on a component-instance node
      • propertyId string: Component property ID
      • type string (nullable): Property type, e.g. "Plain Text" or "Rich Text"
      • label string (nullable): Property label
      • html string (nullable): HTML value of the property
      • text string (nullable): Plain text value of the property
    • placeholder string (nullable): Placeholder of a text-input node
    • choices array of objects (nullable): Choices of a select node
      • value string: Value submitted for the choice
      • text string: Label shown for the choice
    • value string (nullable): Button label of a submit-button or search-button node
    • waitingText string (nullable): Label a submit-button node shows while submitting
    • attributes object: Custom attributes set on the element
  • pagination object: Pagination information
    • limit number: Page size used for this request
    • offset number: Offset used for this request
    • total number: Total number of records available

Example Usage:

{
  "pageId": "<page-id>",
  "limit": 100,
  "offset": 0
}

Publishing

Publish Site

Publish a whole Webflow site to its custom domains, its webflow.io subdomain, or both. This pushes every staged change live at once: page content, page metadata, and all staged CMS items, including changes made by other people. To publish only specific CMS items, use Publish Items instead. Webflow queues the publish and allows one per minute per site.

Operation Type: Mutation (Write)

Parameters:

  • siteId string (required): Site ID to publish. Get it from List Sites.
  • customDomainIds array of strings (nullable): IDs of the custom domains to publish to, from customDomains in List Sites. Omit to skip custom domains.
  • publishToWebflowSubdomain boolean (default: false): Whether to publish to the site's default "webflow.io" staging subdomain.

Returns:

  • customDomains array of objects: Custom domains the publish was queued for
    • id string: Custom domain ID
    • url string (nullable): Domain name
    • lastPublished string (nullable): When the domain was last published before this request
  • publishToWebflowSubdomain boolean: Whether the publish was queued for the webflow.io subdomain

Example Usage:

{
  "siteId": "<site-id>",
  "customDomainIds": ["<domain-id>"],
  "publishToWebflowSubdomain": false
}

Assets

List Assets

List the images and files uploaded to a Webflow site, with their public URLs, file names, types, sizes and alt text. Use it to find an existing asset before uploading a duplicate. Returns up to 100 assets per call; use offset to page through the rest.

Operation Type: Query (Read)

Parameters:

  • siteId string (required): Site ID to list assets for. Get it from List Sites.
  • limit number (default: 100): Maximum number of assets to return (1–100).
  • offset number (default: 0): Number of assets to skip, for pagination.

Returns:

  • assets array of objects: Assets in the site
    • id string: Asset ID
    • displayName string (nullable): Name shown in the Webflow assets panel
    • originalFileName string (nullable): File name the asset was uploaded with
    • contentType string (nullable): MIME type, e.g. "image/png"
    • size number (nullable): File size in bytes
    • hostedUrl string (nullable): Public URL of the asset. Use it as the url of an Image or File field when writing CMS items.
    • altText string (nullable): Alt text
    • createdOn string (nullable): When the asset was uploaded
    • lastUpdated string (nullable): When the asset was last updated
  • pagination object: Pagination information
    • limit number: Page size used for this request
    • offset number: Offset used for this request
    • total number: Total number of records available

Example Usage:

{
  "siteId": "<site-id>",
  "limit": 100,
  "offset": 0
}

Upload Asset

Upload an image or file from a public URL into the assets of a Webflow site. Returns the hosted URL, which can be used as the value of an Image or File field when creating or updating CMS items. For an image the user attached to the chat, use Upload Chat Image instead.

Operation Type: Mutation (Write)

Parameters:

  • siteId string (required): Site ID to upload the asset to. Get it from List Sites.
  • fileUrl string (required): Publicly reachable HTTPS URL of the file to upload. 4MB max for images, 10MB for other files. The URL must be HTTPS and passes SSRF checks; at most 3 redirects are followed.
  • fileName string (nullable): File name to store the asset under, including its extension, e.g. "hero.png". Under 100 characters. Omit to use the last segment of fileUrl.
  • parentFolderId string (nullable): ID of the asset folder to put the file in. Omit for the top level.

Image size limit (changed in PR #9726): Images (detected by file-name extension or served content type) are rejected before the upload if they exceed 4MB. Non-image files keep a 10MB cap. Files declared or streamed over the cap are rejected with an actionable error.

Returns:

  • assetId string: ID of the new asset
  • hostedUrl string (nullable): Public URL of the uploaded asset. Use it as the url of an Image or File field when writing CMS items.
  • fileName string: File name the asset was stored under
  • contentType string (nullable): MIME type Webflow assigned to the asset
  • size number: Size of the uploaded file in bytes

Example Usage:

{
  "siteId": "<site-id>",
  "fileUrl": "https://example.com/hero.png",
  "fileName": "hero.png",
  "parentFolderId": null
}

Upload Chat Image

Upload an image the user attached to this chat into the assets of a Webflow site. Reads the image straight from the conversation, so no URL is needed. Returns the hosted URL, which can be used as the value of an Image field when creating or updating CMS items.

Chat-only tool: This operation is available in chat conversations only. It is not available in workflow ToolCall nodes because it reads images from the live conversation context. For workflows, use Upload Asset with a public URL instead.

Supported image types: PNG, JPEG, GIF, SVG, WebP, AVIF. 4MB max.

Operation Type: Mutation (Write)

Parameters:

  • siteId string (required): Site ID to upload the image to. Get it from List Sites.
  • imageNumber number (default: 1): Which attached image to upload. Images are numbered starting from the most recent user message that has attachments, in the order they were attached, then continuing into earlier messages. 1 (default) is the first image of the most recent message with images.
  • fileName string (nullable): File name to store the asset under, including its extension, e.g. "hero.png". Under 100 characters. Omit to keep the name the image was attached with (falls back to image.<ext> for pasted images that have no name).
  • parentFolderId string (nullable): ID of the asset folder to put the image in. Omit for the top level.

Caveats: Only inline base64 images attached in chat are supported — PDFs and other document types attached in chat are not covered. Hidden messages are skipped. If an image is not stored inline (e.g. a URL reference), use Upload Asset with a public URL instead. Errors are actionable: no images attached, imageNumber out of range, unsupported type, over 4MB, or image not stored inline.

Returns:

  • assetId string: ID of the new asset
  • hostedUrl string (nullable): Public URL of the uploaded asset. Use it as the url of an Image or File field when writing CMS items.
  • fileName string: File name the asset was stored under
  • contentType string (nullable): MIME type Webflow assigned to the asset
  • size number: Size of the uploaded file in bytes

Example Usage:

{
  "siteId": "<site-id>",
  "imageNumber": 1,
  "fileName": "hero.png",
  "parentFolderId": null
}

Common Use Cases

CMS Content Management:

  • List collections to discover what CMS content types a site has (Blog Posts, Team Members, etc.)
  • Get a collection's schema before creating items to ensure field slugs and formats are correct
  • Create draft items in bulk, then publish them once reviewed
  • Update existing CMS items (e.g. refresh a blog post body or change a featured image) without touching other fields

Site Publishing & Workflow:

  • Stage multiple page and CMS edits, then publish items individually without triggering a full site rebuild
  • Publish the whole site to a webflow.io subdomain first for staging review, then publish to custom domains
  • Unpublish items that should no longer be visible without deleting them from the CMS

Asset Management:

  • List existing assets before uploading to avoid duplicates
  • Upload images from a public URL (e.g. a CDN or S3 bucket) and get back the hosted URL to use in CMS Image fields
  • In a chat workflow, attach an image directly and upload it to Webflow without needing an intermediate URL — then pass the returned hostedUrl to a CMS item field

SEO & Page Metadata:

  • Audit all pages in a site to find missing SEO titles or descriptions
  • Bulk-update Open Graph metadata across pages to match a new brand tone
  • Read static page copy with Get Page Content to audit headlines and body text