Modulify

List webhook deliveries

list_webhook_deliveries

Lists recent webhook delivery attempts on a site, newest first, 30 to a page.

POST /v1/list_webhook_deliveriesScopeconfig:readRead only

Pass the nextCursor from a response back as cursor for the page before. It is null when there is nothing older. This is the tool for finding out why a webhook did not arrive.

Read the four states carefully: delivered succeeded, pending has not been attempted yet, failed is still being retried, and only exhausted has given up. The Deliveries tab shows failed as Retrying and exhausted as Failed. A delivery is tried up to 5 times before it is exhausted, and a test delivery is never retried.

Each delivery carries its event, state, attempts, the response Status, any Error and whether it was a Test. Its destination comes back as Host only, because a webhook URL is itself a credential. See Webhooks.

Request

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

It only reads and changes nothing, so retrying it is safe.

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

Over MCP, the same method is the list_webhook_deliveries tool.

Inputs

Input Type Required Description
projectId string Yes The site id.
webhookId string No Only deliveries for this one webhook, by its id from list_site_webhooks. Leave it out for every webhook on the site.
event string No Only deliveries of one event, publish.succeeded, publish.failed or publish.cancelled. Send test for test deliveries only, or all for everything, the default.
cursor string No The nextCursor from the previous page. Leave it out for the first, newest page.

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.