- Docs
- Api%2Freference%2Fwebhooks%2FListWebhookEvents
List a webhook's deliveries
Everything we have tried to send to one webhook, newest first: what went out, where to, and how it was received. This is the first place to look when a recipient reports that an event never arrived. A delivery starts as `pending`, may spend time `retrying`, and ends up either `delivered` or `failed`. Nothing retries a `failed` delivery on its own — send it again with `POST /webhooks/{webhookId}/events/{eventId}/redeliver`. When something goes wrong, `error` repeats what your endpoint said back, which is usually enough to see why. `payload` is the exact body we sent. `signature` is the one that went with the most recent attempt, so it changes each time a delivery is retried. Requires the `webhooks.read` permission.
The access token returned after a successful sign-in, sent as
Authorization: Bearer <access_token>.
It identifies the person and the organization they are working in, and
it lasts about fifteen minutes. When it runs out, use their refresh
token at POST /auth/refresh-token instead of asking them to sign in
again.
In: header
Path Parameters
Identifier of the webhook, the same value sent as the X-Webhook-ID header.
Query Parameters
Return only the resource with this identifier. Equivalent to fetching it by path, but usable together with the other list filters.
Search the endpoint's supported text and identifier fields. Matching may be an exact identifier lookup or a case-insensitive prefix search, depending on the resource. Alphanumeric characters only.
How many items to return in one page. The default and the maximum are both
25; a larger value is rejected with 400.
25int641 <= value <= 25Cursor for the next page, taken verbatim from the next field of the previous
response. Keep every other query parameter the same between pages: sortBy
and order are part of what the cursor means. An absent or empty next in a
response means there are no more pages.
The value is opaque. Do not parse it or build one yourself.
Sort direction. Defaults to desc, newest first.
"desc""asc" | "desc"Field used to sort the result. Supported fields depend on the endpoint; use
when_created for chronological ordering where it is available. The default
is the resource identifier, and identifiers break ties so cursor paging stays
stable.
A webhook identifier.
Narrow to one organization. Results are already restricted to the caller's active organization.
Return only deliveries of this webhook type.
"address_activity" | "template_activity" | "action_activity"Return only deliveries in this state: pending, retrying,
delivered or failed.
Created strictly after this instant.
date-timeCreated strictly before this instant.
date-timeCreated at or after this instant.
date-timeCreated at or before this instant.
date-timeResponse Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.dual.network/webhooks/665f1c2d4b1a2c3d4e5f6ae0/events"{
"events": [
{
"id": "665f1c2d4b1a2c3d4e5f6a40",
"webhook_id": "665f1c2d4b1a2c3d4e5f6a7b",
"type": "template_activity",
"url": "https://hooks.example.com/dual",
"status": "delivered",
"payload": "{\"id\":\"665f1c2d4b1a2c3d4e5f6a40\",\"type\":\"template_activity\",\"event\":{\"name\":\"transfer\"},\"when_created\":\"2026-03-02T10:00:00Z\"}",
"signature": "t=1772445600,v1=8c1d0e5b7a4632a1c9d8e7f6a5b4c3d2e1f009182736455463728190a1b2c3d4",
"when_created": "2026-03-02T10:00:00Z",
"when_modified": "2026-03-02T10:00:01Z"
},
{
"id": "665f1c2d4b1a2c3d4e5f6a41",
"webhook_id": "665f1c2d4b1a2c3d4e5f6a7b",
"type": "template_activity",
"url": "https://hooks.example.com/dual",
"status": "failed",
"payload": "{\"id\":\"665f1c2d4b1a2c3d4e5f6a41\",\"type\":\"template_activity\",\"event\":{\"name\":\"burn\"},\"when_created\":\"2026-03-02T11:00:00Z\"}",
"signature": "t=1772449200,v1=1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9",
"error": {
"code": 13,
"message": "webhook responded 502: <html>bad gateway</html>"
},
"when_created": "2026-03-02T11:00:00Z",
"when_modified": "2026-03-02T11:14:22Z"
}
]
}{
"code": 3,
"message": "Key: 'limit' Error:Field validation for 'limit' failed on the 'lte' tag"
}{
"code": 16,
"message": "no auth provided"
}{
"code": 5,
"message": "object not found"
}{
"code": 13,
"message": "internal error"
}