Update a subscription
Changes an endpoint’s name, target URL or filters, or pauses (state paused) or resumes (state active) it. Any other state answers 400 with the message state must be active or paused; to delete an endpoint use DELETE /v1/subscriptions/{id}. Send the current ETag as If-Match. Events matched while the endpoint is paused are not delivered later: they are recorded as paused_by_user coverage gaps. A request already in flight may still finish; inspect in_flight_attempts and pending_cancellation. Resending the same Idempotency-Key does not apply the change again.
Authorizations
Send Authorization: Bearer whk_…, a webhook key from the dashboard. Webhook keys belong to one network, so pick the server that matches the key. lum_ API keys are not accepted here (401).
Headers
Required. Choose one key per change and resend it unchanged on a retry: the same key with the same request returns the first result instead of applying the change again, and the same key with a different request returns 409.
1 - 128"retry-0001-2026-10-22"
The ETag from GET /v1/subscriptions/{id}, for example "1" (the weak form W/"1" that some proxies produce is accepted too). A stale version returns 412; a missing header returns 428.
^(W/)?"[1-9][0-9]*"$"\"1\""
Path Parameters
Endpoint (subscription) ID from POST /v1/subscriptions or GET /v1/subscriptions. The example ID is a placeholder and answers 404: use your own.
"00000000-0000-4000-8000-000000000000"
Body
2048Empty clears this selector.
Empty clears this selector.
Empty clears this selector.
active, paused What happens to deliveries already queued: drain_old still sends them, cancel_old cancels those not yet attempted. Required when target_url changes; optional when a selector (account, asset, contract_addr, event_types) changes (default drain_old); rejected with 400 when neither changes. A change that alters nothing returns 200 with the version unchanged.
drain_old, cancel_old