API リファレンス
Webhooks
Management API: GET /sites/{id}/webhooks, POST /sites/{id}/webhooks, PUT /sites/{id}/webhooks/{webhookId}/events, …
List the website's webhook endpoints (all in one page) with recent deliveries, plus the endpoint quota and the subscribable event keys. Errors: FORBIDDEN.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
Response 200
dataobject[]requireddata[].idstringrequireddata[].labelstring | nullrequireddata[].addressPreviewstring | nullrequiredMasked destination URL (domain + last 4 chars of path).
data[].statusstringrequiredACTIVE or DISABLED.
data[].withinPlanbooleanrequireddata[].autoDisabledbooleanrequireddata[].createdAtstringrequireddata[].subscribedEventsstring[] | nullrequirednull = subscribed to all events (including future events); array = only these event keys.
data[].filterobject | nullOptional sub-event filter for collection keys or form IDs.
data[].filter.collectionKeysstring[]Only deliver collections.* events for these collection keys.
data[].filter.formIdsstring[]Only deliver customers.form.submitted events for these form IDs.
data[].recentDeliveriesobject[]requireddata[].recentDeliveries[].idstringrequireddata[].recentDeliveries[].eventKeystringrequireddata[].recentDeliveries[].statusstringrequireddata[].recentDeliveries[].errorstring | nullrequireddata[].recentDeliveries[].createdAtstringrequireddata[].recentDeliveries[].attemptsintegerrequireddata[].recentDeliveries[].nextRetryAtstring | nullrequireddata[].recentDeliveries[].statusCodeinteger | nullrequireddata[].recentDeliveries[].durationMsinteger | nullrequiredhasMorebooleanrequiredTrue when another page exists; pass nextCursor to fetch it.
nextCursorstring | nullrequiredCursor for the next page, or null on the last page.
subscribableEventsstring[]requiredquotaobjectrequiredquota.planAllowedbooleanrequiredquota.limitintegerrequiredMaximum endpoints for this site.
quota.remainingintegerrequired
Errors
FORBIDDEN403
MCP tool webhooks_list
curl -X GET "https://app.kanorio.com/api/v1/sites/{id}/webhooks" \
-H "Authorization: Bearer $KANORIO_TOKEN"{
"data": [
{
"id": "wh_example01",
"label": "Vercel ISR Revalidate",
"addressPreview": "https://www.sunnybakery.example/…date",
"status": "ACTIVE",
"withinPlan": true,
"autoDisabled": false,
"createdAt": "2026-10-01T02:30:00.000Z",
"subscribedEvents": [
"collections.item.published",
"collections.items.bulkChanged"
],
"filter": null,
"recentDeliveries": []
}
],
"subscribableEvents": [
"collections.item.created",
"collections.item.updated",
"collections.item.published",
"collections.item.unpublished",
"collections.item.deleted",
"collections.items.bulkChanged",
"collections.schema.changed",
"content.site.published",
"content.page.published",
"content.page.updated",
"content.page.unpublished",
"content.page.deleted",
"customers.form.submitted"
],
"quota": {
"planAllowed": true,
"limit": 10,
"remaining": 9
},
"hasMore": false,
"nextCursor": null
}Create a webhook endpoint (public https URL, up to 10 endpoints per site). Returns the HMAC-SHA256 signingSecret (whsec_…) once — store it in your receiver's environment to verify X-Kanorio-Signature. Pass events (from webhooks.list subscribableEvents) to subscribe to specific events, or omit/null to subscribe to all events. Errors: FORBIDDEN, WEBHOOK_LIMIT_REACHED, DUPLICATE_WEBHOOK, VALIDATION.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
Request body
urlstringrequiredPublic https endpoint URL.
labelstring | nullDisplay label in the dashboard, e.g. 'Vercel ISR Revalidate'.
eventsstring[] | nullEvent keys to subscribe to (e.g. ['collections.item.published', 'collections.items.bulkChanged']), or null/omit for all events.
filterobject | nullOptional sub-event filter for collection keys or form IDs.
filter.collectionKeysstring[]Only deliver collections.* events for these collection keys.
filter.formIdsstring[]Only deliver customers.form.submitted events for these form IDs.
Response 201
idstringrequiredsigningSecretstring | nullrequiredHMAC-SHA256 signing secret (whsec_…). Shown only on creation.
subscribedEventsstring[] | nullrequiredfilterobject | nullOptional sub-event filter for collection keys or form IDs.
filter.collectionKeysstring[]Only deliver collections.* events for these collection keys.
filter.formIdsstring[]Only deliver customers.form.submitted events for these form IDs.
Errors
FORBIDDEN403WEBHOOK_LIMIT_REACHED403DUPLICATE_WEBHOOK409VALIDATION400
MCP tool webhooks_create
curl -X POST "https://app.kanorio.com/api/v1/sites/{id}/webhooks" \
-H "Authorization: Bearer $KANORIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.sunnybakery.example/api/revalidate","label":"Vercel ISR Revalidate","events":["collections.item.published","collections.items.bulkChanged"]}'{
"id": "wh_example01",
"signingSecret": "whsec_example_signing_secret_01",
"subscribedEvents": [
"collections.item.published",
"collections.items.bulkChanged"
],
"filter": null
}Update events
/sites/{id}/webhooks/{webhookId}/eventsReplace the subscribed event list and optional filter (collectionKeys / formIds) of a webhook endpoint. Pass null for events to subscribe to all events (including future events). Errors: FORBIDDEN, WEBHOOK_NOT_FOUND, VALIDATION.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
webhookIdstring · pathrequiredWebhook destination id. Get it from webhooks.list.
Request body
eventsstring[] | nullrequiredSubscribable event keys, or null for all events.
filterobject | nullOptional sub-event filter for collection keys or form IDs.
filter.collectionKeysstring[]Only deliver collections.* events for these collection keys.
filter.formIdsstring[]Only deliver customers.form.submitted events for these form IDs.
Response 200
idstringrequiredsubscribedEventsstring[] | nullrequiredfilterobject | nullOptional sub-event filter for collection keys or form IDs.
filter.collectionKeysstring[]Only deliver collections.* events for these collection keys.
filter.formIdsstring[]Only deliver customers.form.submitted events for these form IDs.
Errors
FORBIDDEN403WEBHOOK_NOT_FOUND404VALIDATION400
MCP tool webhooks_update_events
curl -X PUT "https://app.kanorio.com/api/v1/sites/{id}/webhooks/{webhookId}/events" \
-H "Authorization: Bearer $KANORIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"events":["collections.item.published"],"filter":{"collectionKeys":["blog"]}}'{
"id": "wh_example01",
"subscribedEvents": [
"collections.item.published"
],
"filter": {
"collectionKeys": [
"blog"
]
}
}Delete a webhook
/sites/{id}/webhooks/{webhookId}Delete a webhook endpoint. Errors: FORBIDDEN, WEBHOOK_NOT_FOUND.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
webhookIdstring · pathrequiredWebhook destination id. Get it from webhooks.list.
Response 200
idstringrequireddeletedtruerequired
Errors
FORBIDDEN403WEBHOOK_NOT_FOUND404
MCP tool webhooks_delete
curl -X DELETE "https://app.kanorio.com/api/v1/sites/{id}/webhooks/{webhookId}" \
-H "Authorization: Bearer $KANORIO_TOKEN"{
"id": "wh_example01",
"deleted": true
}Test a webhook
/sites/{id}/webhooks/{webhookId}/testSend a one-off team.test ping to a webhook endpoint and return the HTTP status and latency (does not count toward auto-disable failures). Errors: FORBIDDEN, WEBHOOK_NOT_FOUND.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
webhookIdstring · pathrequiredWebhook destination id. Get it from webhooks.list.
Response 200
idstringrequiredsuccessbooleanrequiredstatusinteger | nullrequireddurationMsintegerrequirederrorstring | nullrequired
Errors
FORBIDDEN403WEBHOOK_NOT_FOUND404
MCP tool webhooks_test
curl -X POST "https://app.kanorio.com/api/v1/sites/{id}/webhooks/{webhookId}/test" \
-H "Authorization: Bearer $KANORIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'{
"id": "wh_example01",
"success": true,
"status": 200,
"durationMs": 142,
"error": null
}