Skip to main content
Use these requests to change a subscription after you create it: pause and resume it, change its filters or target, rotate its signing key, or delete it. Every change is guarded by the subscription’s version, so two changes made at the same time cannot silently overwrite each other.
The host selects the network; use https://webhooks.lumeus.dev and a Mainnet key for Mainnet subscriptions.

List and read

Response (200, example values, trimmed)
The list is newest first, up to 500 per page (limit, 1 to 500); pass next_cursor back as cursor for the next page. Deleted subscriptions are left out unless you pass include_deleted=true. GET /v1/subscriptions/{id} returns one subscription with its ETag header, plus free_quota on a Free endpoint and paid (plan, endpoint limit and use, credits per delivery) on a paid one.

Version and request headers

Every change (PATCH, DELETE, key rotation, tests and replays) needs two headers: Retrying with the same key, ETag and body returns the original result without applying the change twice. Reusing a key with a different body returns 409. After a 412, read the subscription again and decide whether your change still applies. This shell function reads the current ETag; the examples below use it:

Pause or resume

Response (200, example values, subscription trimmed)
Pausing drops the events that match while the subscription is paused. They are not delivered after you resume: every ledger closed while paused is recorded as a paused_by_user coverage gap. Read those ledgers from the Activity API after you resume.
Deliveries that were already queued before the pause wait and are sent after you resume. An attempt already in flight (in_flight_attempts) can still reach your receiver. state takes only active or paused (anything else returns 400; use DELETE to remove an endpoint). Send {"state":"active"} to resume; matching restarts at the current ledger.

Update filters or the target

PATCH only the fields you change. Omitted or null fields keep their value, an empty string clears a filter ("asset": ""), and "event_types": [] widens the subscription to every decoded event type. pending_policy decides what happens to deliveries already queued under the old target or filters: Move to a new receiver and drop what is queued for the old one:
Receive mints and burns as well as transfers (queued deliveries drain):
The new configuration applies from the ledger after the returned effective_checkpoint. New filters are validated as on create: invalid values return 400, and likely typos in event_types add a warnings array. A PATCH that changes nothing returns 200 with the same version, and an empty body returns 400.

Rotate a signing key

Response (200, example values)
Store secret at once; a retry does not return it again. For 24 hours, until previous_valid_until, every delivery is signed with both keys (see key rotation). Deploy the new secret next to the old one, then remove the old one. A second rotation during the overlap returns 409. To end the overlap early, after your receiver uses the new secret:

Delete

Deleting is final. It returns 200 with effective_state: "deleted" and:
  • cancels deliveries not yet attempted (they are never charged);
  • deletes the endpoint’s test history;
  • removes its signing secrets;
  • frees its place under your plan’s endpoint count (or your Free endpoint).
GET /v1/subscriptions/{id} still returns the deleted subscription, and a later change returns 410.

Webhook keys

whk_ keys are managed with the same API (or in the dashboard under Webhooks > Webhook keys): An organization holds at most 20 active keys per network; past that, create returns 409.

Limits

Over a limit you get 429 with RateLimit headers. See Rate limits and Errors.