Implement Webflow webhook registration, signature verification, and event handling
for form_submission, site_publish, ecomm_new_order, page_created, and more.
Use when setting up webhook endpoints, implementing event-driven workflows,
or handling Webflow notifications.
Trigger with phrases like "webflow webhook", "webflow events",
"webflow webhook signature", "handle webflow events", "webflow notifications".
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
name
webflow-webhooks-events
description
Implement Webflow webhook registration, signature verification, and event handling
for form_submission, site_publish, ecomm_new_order, page_created, and more.
Use when setting up webhook endpoints, implementing event-driven workflows,
or handling Webflow notifications.
Trigger with phrases like "webflow webhook", "webflow events",
"webflow webhook signature", "handle webflow events", "webflow notifications".
allowed-tools
Read, Write, Edit, Bash(curl:*)
version
1.5.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","design","no-code","webflow"]
compatibility
Designed for Claude Code
Webflow Webhooks & Events
Overview
Register, verify, and handle Webflow Data API v2 webhooks. Covers all trigger types,
HMAC signature verification, idempotent processing, and event routing patterns.
Prerequisites
Webflow API token with sites:write scope (for registering webhooks)
HTTPS endpoint accessible from the internet
crypto module (Node.js built-in)
Redis or database for idempotency (optional)
Webhook API Reference
Operation
Method
Endpoint
List webhooks
GET
/v2/sites/{site_id}/webhooks
Create webhook
POST
/v2/sites/{site_id}/webhooks
Get webhook
GET
/v2/webhooks/{webhook_id}
Delete webhook
DELETE
/v2/webhooks/{webhook_id}
Limits: Max 75 webhook registrations per triggerType per site.
Supported Trigger Types
triggerType
Description
Payload
form_submission
Form submitted on site
Form data, submitter info
site_publish
Site published
Site ID, publish domains
page_created
New page created
Page ID, title, slug
page_metadata_updated
Page SEO/meta changed
Page ID, updated fields
page_deleted
Page removed
Page ID
ecomm_new_order
New ecommerce order
Order details, items, customer
ecomm_order_changed
Order status updated
Order ID, new status
collection_item_created
CMS item created
Collection ID, item data
collection_item_changed
CMS item updated
Collection ID, item data
collection_item_deleted
CMS item removed
Collection ID, item ID
collection_item_unpublished
CMS item unpublished
Collection ID, item ID
Instructions
Step 1: Register Webhooks via API
import { WebflowClient } from"webflow-api";
const webflow = newWebflowClient({
accessToken: process.env.WEBFLOW_API_TOKEN!,
});
const siteId = process.env.WEBFLOW_SITE_ID!;
const webhookUrl = "https://your-app.com/webhooks/webflow";
asyncfunctionregisterWebhooks() {
const triggerTypes = [
"form_submission",
"site_publish",
"ecomm_new_order",
"collection_item_created",
"collection_item_changed",
];
for (const triggerType of triggerTypes) {
const webhook = await webflow.webhooks.create(siteId, {
triggerType,
url: webhookUrl,
// form_submission supports filtering to a specific form
...(triggerType === "form_submission" && {
filter: { name: "contact-form" }, // Filter by form name
}),
});
console.log(`Registered: ${triggerType} -> ${webhook.id}`);
}
}
// List existing webhooksasyncfunctionlistWebhooks() {
const { webhooks } = await webflow.webhooks.list(siteId);
for (const wh of webhooks!) {
console.log(`${wh.triggerType}: ${wh.url} (${wh.id})`);
}
}
// Delete a webhookasyncfunctiondeleteWebhook(webhookId: string) {
await webflow.webhooks.delete(webhookId);
}
Step 2: Webhook Endpoint with Signature Verification
# Terminal 1: Start your server
npm run dev
# Terminal 2: Expose via ngrok
ngrok http 3000
# Copy the https:// URL# Terminal 3: Register test webhook
curl -X POST "https://api.webflow.com/v2/sites/$WEBFLOW_SITE_ID/webhooks" \
-H "Authorization: Bearer $WEBFLOW_API_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"triggerType\": \"form_submission\",
\"url\": \"https://your-ngrok-url.ngrok.io/webhooks/webflow\"
}"# Now submit a form on your Webflow site — the webhook will hit your local server
Output
Webhook registrations for all needed trigger types
HMAC-SHA256 signature verification on every request
Type-safe event router handling all Webflow events