List webhook deliveries
list_webhook_deliveries
Lists recent webhook delivery attempts on a site, newest first, 30 to a page.
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.