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:
- Open your Webflow site dashboard
- Go to Site settings → Apps & integrations → API access
- 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
offsetto 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 assiteIdto 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 incustomDomainIdswhen publishing the site. - url
string(nullable): Domain name - lastPublished
string(nullable): When this domain was last published
- id
- primaryLocale
object(nullable): Primary locale, or null when the site has no localization- id
string: Locale ID. Pass aslocaleIdto the page tools. - cmsLocaleId
string(nullable): CMS locale ID. Pass ascmsLocaleIdto 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
- id
- secondaryLocales
array of objects: Secondary locales (empty when the site has no localization), same shape asprimaryLocale
- id
- 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 ascollectionIdto 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
- id
- 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 itemfieldData. - 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 asoptions[{id, name}](write the id). Reference and MultiReference fields give the targetcollectionId.
- id
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):falselists staged items: every item including drafts and unpublished edits.truelists 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, orslug. - sortOrder
string(nullable): Sort direction:ascordesc. - 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 includesnameandslug.
- id
- 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 withoffset + limitwhileoffset + limit < total.
- limit
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):falsereturns the staged version, including unpublished edits.truereturns 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 includesnameandslug.
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.nameandslugare 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.
- fieldData
- skipInvalidFiles
boolean(default: true):trueskips image or file URLs Webflow cannot fetch and still creates the item. Set tofalseto 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.falsequeues 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.
- id
- skipInvalidFiles
boolean(default: true):trueskips image or file URLs Webflow cannot fetch and still updates the item. Set tofalseto 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.
- id
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.
- id
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
- limit
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 aspageIdto 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
- title
- 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
- title
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 whenopenGraphTitleCopiedisfalse. Omit to leave unchanged. - openGraphTitleCopied
boolean(nullable):truemakes the Open Graph title mirror the SEO title;falselets it differ. Omit to leave unchanged. - openGraphDescription
string(nullable): New Open Graph description. Only takes effect whenopenGraphDescriptionCopiedisfalse. Omit to leave unchanged. - openGraphDescriptionCopied
boolean(nullable):truemakes the Open Graph description mirror the SEO description;falselets 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, orsearch-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
- propertyId
- 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
- 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
- id
- 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
- limit
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, fromcustomDomainsin 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
- id
- 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 theurlof 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
- id
- 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
- limit
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 offileUrl. - 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 theurlof 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 toimage.<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,
imageNumberout 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 theurlof 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
hostedUrlto 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