webflow
$
npx mdskill add vm0-ai/vm0-skills/webflowManage Webflow CMS and sites via API.
- Handles user requests about Webflow sites and content.
- Integrates with Webflow API for CMS and site management.
- Authenticates using WEBFLOW_TOKEN for secure access.
- Returns structured JSON data from API responses.
SKILL.md
.github/skills/webflowView on GitHub ↗
---
name: webflow
description: Webflow API for CMS and sites. Use when user mentions "Webflow", "webflow.com",
"webflow.io", shares a Webflow link, "update Webflow", or asks about Webflow site.
---
## Troubleshooting
If requests fail, run `zero doctor check-connector --env-name WEBFLOW_TOKEN` or `zero doctor check-connector --url https://api.webflow.com/v2/token/authorized_by --method GET`
## 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:
```bash
curl -s "https://api.webflow.com/v2/token/authorized_by" --header "Authorization: Bearer $WEBFLOW_TOKEN" | jq '{id, email, firstName, lastName}'
```
### 2. List Sites
List all sites accessible to the authenticated user:
```bash
curl -s "https://api.webflow.com/v2/sites" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/sites/<site-id>" --header "Authorization: Bearer $WEBFLOW_TOKEN" | jq '{id, displayName, shortName, lastPublished, previewUrl}'
```
### 4. List Pages
List all pages for a site. Replace `<site-id>` with your site ID.
```bash
curl -s "https://api.webflow.com/v2/sites/<site-id>/pages" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/pages/<page-id>" --header "Authorization: Bearer $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`:
```json
{
"body": {
"seo": {
"title": "Updated Page Title",
"description": "Updated meta description for this page"
}
}
}
```
```bash
curl -s -X PATCH "https://api.webflow.com/v2/pages/<page-id>" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/sites/<site-id>/collections" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/collections/<collection-id>" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/collections/<collection-id>/items" --header "Authorization: Bearer $WEBFLOW_TOKEN" | jq '.items[] | {id, fieldData: .fieldData}'
```
Supports pagination with `offset` and `limit` query parameters:
```bash
curl -s "https://api.webflow.com/v2/collections/<collection-id>/items?offset=0&limit=10" --header "Authorization: Bearer $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>`.
```bash
curl -s "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $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`:
```json
{
"fieldData": {
"name": "New Blog Post",
"slug": "new-blog-post"
}
}
```
```bash
curl -s -X POST "https://api.webflow.com/v2/collections/<collection-id>/items" --header "Authorization: Bearer $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`:
```json
{
"fieldData": {
"name": "Updated Blog Post Title"
}
}
```
```bash
curl -s -X PATCH "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $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>`.
```bash
curl -s -X DELETE "https://api.webflow.com/v2/collections/<collection-id>/items/<item-id>" --header "Authorization: Bearer $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`:
```json
{
"itemIds": ["<item-id-1>", "<item-id-2>"]
}
```
```bash
curl -s -X POST "https://api.webflow.com/v2/collections/<collection-id>/items/publish" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/sites/<site-id>/assets" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/assets/<asset-id>" --header "Authorization: Bearer $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.
```bash
curl -s "https://api.webflow.com/v2/forms/<form-id>/submissions" --header "Authorization: Bearer $WEBFLOW_TOKEN" | jq '.formSubmissions[] | {id, submittedAt, formData}'
```
To find form IDs, list all forms for a site first:
```bash
curl -s "https://api.webflow.com/v2/sites/<site-id>/forms" --header "Authorization: Bearer $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`:
```json
{
"publishToWebflowSubdomain": true
}
```
```bash
curl -s -X POST "https://api.webflow.com/v2/sites/<site-id>/publish" --header "Authorization: Bearer $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