webflow

Installation
SKILL.md

Webflow API

Manage Webflow sites, pages, CMS collections, items, assets, and forms via the REST API v2.

Official docs: https://developers.webflow.com/data/reference/rest-introduction


When to Use

Use this skill when you need to:

  • List and inspect sites in a Webflow workspace
  • Read page metadata and site structure
  • Manage CMS collections — list, create, delete collections and fields
  • CRUD CMS items — create, read, update, delete, and publish collection items
  • List and manage assets (images, files) on a site
  • Retrieve form submissions from Webflow forms

Prerequisites

Connect your Webflow account via the vm0 platform (OAuth connector). The WEBFLOW_TOKEN environment variable is automatically configured.

Verify authentication:

curl -s "https://api.webflow.com/v2/token/authorized_by" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, email, firstName, lastName}'

Expected response: Your user information (id, email, name).


How to Use

All examples assume WEBFLOW_TOKEN is set.

Base URL: https://api.webflow.com/v2


1. Get Authorized User

Get information about the authenticated user:

curl -s "https://api.webflow.com/v2/token/authorized_by" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, email, firstName, lastName}'

2. List Sites

List all sites accessible to the authenticated user:

curl -s "https://api.webflow.com/v2/sites" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.sites[] | {id, displayName, shortName, lastPublished}'

3. Get Site Details

Retrieve details for a specific site. Replace <site-id> with an actual site ID from the list sites response.

curl -s "https://api.webflow.com/v2/sites/<site-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, displayName, shortName, lastPublished, previewUrl}'

4. List Pages

List all pages for a site. Replace <site-id> with your site ID.

curl -s "https://api.webflow.com/v2/sites/<site-id>/pages" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.pages[] | {id, title, slug, createdOn, lastUpdated}'

5. Get Page Metadata

Retrieve metadata for a specific page. Replace <page-id> with an actual page ID.

curl -s "https://api.webflow.com/v2/pages/<page-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, title, slug, seo: {title: .seo.title, description: .seo.description}}'

6. Update Page Settings

Update SEO settings or other metadata for a page. Replace <page-id> with your page ID.

Write to /tmp/webflow_page_update.json:

{
  "body": {
    "seo": {
      "title": "Updated Page Title",
      "description": "Updated meta description for this page"
    }
  }
}
curl -s -X PATCH "https://api.webflow.com/v2/pages/<page-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" --header "Content-Type: application/json" -d @/tmp/webflow_page_update.json | jq '{id, title, slug}'

7. List Collections

List all CMS collections for a site. Replace <site-id> with your site ID.

curl -s "https://api.webflow.com/v2/sites/<site-id>/collections" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.collections[] | {id, displayName, singularName, slug}'

8. Get Collection Details

Retrieve schema and details for a specific collection, including field definitions. Replace <collection-id> with your collection ID.

curl -s "https://api.webflow.com/v2/collections/<collection-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, displayName, singularName, slug, fields: [.fields[] | {id, displayName, slug, type, isRequired}]}'

9. List Collection Items

List all items in a CMS collection. Replace <collection-id> with your collection ID.

curl -s "https://api.webflow.com/v2/collections/<collection-id>/items" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.items[] | {id, fieldData: .fieldData}'

Supports pagination with offset and limit query parameters:

curl -s "https://api.webflow.com/v2/collections/<collection-id>/items?offset=0&limit=10" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{pagination, items: [.items[] | {id, fieldData: .fieldData}]}'

10. Get Collection Item

Get a single item by ID. Replace <collection-id> and <item-id>.

curl -s "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, fieldData}'

11. Create Collection Item

Create a new item in a CMS collection. Replace <collection-id> with your collection ID.

Write to /tmp/webflow_item.json:

{
  "fieldData": {
    "name": "New Blog Post",
    "slug": "new-blog-post"
  }
}
curl -s -X POST "https://api.webflow.com/v2/collections/<collection-id>/items" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" --header "Content-Type: application/json" -d @/tmp/webflow_item.json | jq '{id, fieldData}'

12. Update Collection Item

Update an existing item. Replace <collection-id> and <item-id>.

Write to /tmp/webflow_item_update.json:

{
  "fieldData": {
    "name": "Updated Blog Post Title"
  }
}
curl -s -X PATCH "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" --header "Content-Type: application/json" -d @/tmp/webflow_item_update.json | jq '{id, fieldData}'

13. Delete Collection Item

Delete an item from a collection. Replace <collection-id> and <item-id>.

curl -s -X DELETE "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)"

14. Publish Collection Items

Publish one or more staged items. Replace <collection-id> with your collection ID.

Write to /tmp/webflow_publish.json:

{
  "itemIds": ["<item-id-1>", "<item-id-2>"]
}
curl -s -X POST "https://api.webflow.com/v2/collections/<collection-id>/items/publish" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" --header "Content-Type: application/json" -d @/tmp/webflow_publish.json | jq '{publishedItemIds}'

15. List Assets

List all assets (images, files) for a site. Replace <site-id> with your site ID.

curl -s "https://api.webflow.com/v2/sites/<site-id>/assets" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.assets[] | {id, displayName, url, fileSize, contentType}'

16. Get Asset Details

Get details for a specific asset. Replace <asset-id> with your asset ID.

curl -s "https://api.webflow.com/v2/assets/<asset-id>" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '{id, displayName, url, fileSize, contentType, createdOn}'

17. List Form Submissions

List submissions for a specific form. Replace <form-id> with your form ID.

curl -s "https://api.webflow.com/v2/forms/<form-id>/submissions" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.formSubmissions[] | {id, submittedAt, formData}'

To find form IDs, list all forms for a site first:

curl -s "https://api.webflow.com/v2/sites/<site-id>/forms" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" | jq '.forms[] | {id, displayName, siteId}'

18. Publish Site

Trigger a site publish. Replace <site-id> with your site ID.

Write to /tmp/webflow_publish_site.json:

{
  "publishToWebflowSubdomain": true
}
curl -s -X POST "https://api.webflow.com/v2/sites/<site-id>/publish" --header "Authorization: Bearer $(printenv WEBFLOW_TOKEN)" --header "Content-Type: application/json" -d @/tmp/webflow_publish_site.json

Guidelines

  1. Start with /v2/token/authorized_by: Always verify auth first before calling other endpoints
  2. Get site ID first: Most operations require a site ID — call List Sites first
  3. CMS workflow: List collections -> get collection schema -> CRUD items -> publish items
  4. Staged vs Live items: By default, item endpoints work with staged (draft) items. Use /items/live path for published items
  5. Pagination: List endpoints support offset and limit query parameters (default limit is 100)
  6. Rate limits: 60 requests per minute; back off on 429 responses
  7. Field data: When creating/updating items, field values go inside the fieldData object, keyed by field slug
Weekly Installs
11
GitHub Stars
52
First Seen
Mar 12, 2026
Installed on
opencode10
gemini-cli10
amp10
cline10
github-copilot10
codex10