List deliveries of a subscription
BuildingIn development for the v1 API. The contract is set; the route is not served yet.
Every delivery to the subscription, newest first, each with its attempts. Filter by status, event type, event id or when it was created.
Needs the webhooks:read scope.
oauth2 webhooks:readAuthorizationBearer <token>OAuth 2.0 client credentials. Exchange your client_id and client_secret at /oauth/token of the environment for a bearer token valid for one hour. The playground of every operation asks for your own client and keeps it in your browser tab only.
Scope: webhooks:read
id*stringThe subscription id.
^whk_[0-7][0-9a-hjkmnp-tv-z]{25}$status?stringFilter by status.
"pending""delivering""delivered""retrying""failed""held""expired"event_type?stringFilter by event type.
event_id?stringFilter by event.
^evt_[0-7][0-9a-hjkmnp-tv-z]{25}$from?stringDeliveries created at or after this time (RFC 3339).
date-timeto?stringDeliveries created before this time (RFC 3339).
date-timecursor?stringFrom next_cursor of the previous page.
limit?integer1 to 100.
1 <= value <= 10020OK
application/json- response
data*array<>next_cursor*|nullcurl -X GET 'https://api.dev.b2b.heru.app/v1/webhooks/whk_01m53g5zw414zt6vg08fqbacgm/deliveries?event_type=invoice.stamped&event_id=evt_01m53g5zw414zt6vg08fqbacgm&from=2026-10-25T00%3A00%3A00Z&to=2026-10-26T00%3A00%3A00Z'{ "data": [ { "id": "dlv_01m53gw5jbe6rk2p9x0ztn4vmc", "event_id": "evt_01m53gw5fhe2bq7w4m1kyr8n3t", "event_type": "charge.invoiced", "subscription_id": "whk_01m53g5zw414zt6vg08fqbacgm", "status": "retrying", "attempt_count": 2, "attempts": [ { "n": 1, "started_at": "2026-10-25T12:05:00.000Z", "latency_ms": 2100, "status_code": 502, "error_class": "http", "error": "endpoint answered 502", "response_snippet": "upstream down" }, { "n": 2, "started_at": "2026-10-25T12:05:30.000Z", "latency_ms": 10000, "status_code": null, "error_class": "timeout", "error": "no response within 10s", "response_snippet": "" } ], "next_retry_at": "2026-10-25T12:07:30.000Z", "last_status_code": null, "last_error": "no response within 10s", "delivered_at": null, "replay_of": null, "created_at": "2026-10-25T12:05:00.000Z", "updated_at": "2026-10-25T12:05:40.000Z" }, { "id": "dlv_01m53g5zw414zt6vg08fqbacgm", "event_id": "evt_01m53g5zw414zt6vg08fqbacgm", "event_type": "invoice.stamped", "subscription_id": "whk_01m53g5zw414zt6vg08fqbacgm", "status": "delivered", "attempt_count": 1, "attempts": [ { "n": 1, "started_at": "2026-10-25T12:00:00.000Z", "latency_ms": 143, "status_code": 200, "error_class": null, "error": null, "response_snippet": "ok" } ], "next_retry_at": null, "last_status_code": 200, "last_error": null, "delivered_at": "2026-10-25T12:00:00.143Z", "replay_of": null, "created_at": "2026-10-25T12:00:00.000Z", "updated_at": "2026-10-25T12:00:00.143Z" } ], "next_cursor": null}Get a webhook subscriptionGET
Returns the subscription without `secret`; `secret_last4` tells which secret signs and `secret_rotating_until` whether a previous one still does. Needs the `webhooks:read` scope.
Event notificationEVENT
We POST every event to the URL you register. Verify the `Heru-Signature` header (HMAC-SHA256 of `timestamp.body` with your webhook secret) and reply 2xx within 10 seconds. We retry with backoff for 24 hours.