Modulify

Edit a webhook

update_site_webhook

Changes the name, destination URL, payload type or event list of one webhook.

POST /v1/update_site_webhookScopeconfig:writeMakes changes

Only the fields you send change, and the rest keep their current values. list_site_webhooks returns only the host, so leave url out unless you have a new one, and never rebuild the URL from the host.

The event list you send replaces the old one, and at least one event is required. An empty name resets the label to the destination host. Changing the URL does not rotate the signing secret, so the receiving end keeps verifying with the secret it already has.

The edited webhook comes back with its destination as Host only. See Webhooks.

Request

Call it with a POST to https://api.modulify.ai/v1/update_site_webhook, sending the inputs below as a JSON object. The token needs the config:write scope.

It makes changes, so send an Idempotency-Key header whenever you might retry it. A retry with the same key gets the first answer back instead of running again.

curl -X POST https://api.modulify.ai/v1/update_site_webhook \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"PROJECT_ID","webhookId":"WEBHOOK_ID"}'

Over MCP, the same method is the update_site_webhook tool.

Inputs

Input Type Required Description
projectId string Yes The site id.
webhookId string Yes The webhook id from list_site_webhooks.
url string No The new destination URL. It must use https and be at most 2,048 characters, and private and loopback addresses are refused. Leave it out to keep the current one.
events array of strings No The full event list, from publish.succeeded, publish.failed and publish.cancelled, which replaces the old one. At least one is required, and an event outside that list is refused. Leave it out to keep the current events.
name string No The new label, cut to 64 characters. Leave it out to keep the current one.
type string No The new payload shape, raw, slack, discord or ping. Leave it out to keep the current one.

Response

Every call answers with the JSON envelope of success, message, data, code and version. data holds the result described above, and on a method that returns a total, count carries it. The response headers carry the call's X-Request-Id and what is left of your per-minute budget in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Errors explains every status code a call can answer with.