/api/v2 you manage several through
/api/v2/webhooks/endpoints, each with its own secret and its own
subscription list. Those operations are in the Runtime API reference.
What actually fires
Twenty-three event types are emitted by the platform today:
Read the catalogue from code rather than hardcoding a list. It is the one
source that moves when the platform does, and an event graduating from
declared to emitted is not something you will be told about.
Verifying a delivery
X-Impel-Signature is canonical. X-Tegain-Signature is sent alongside it
with an identical value, for receivers configured before the Impel Labs
rename — a signature check that starts failing looks, from your side, exactly
like a webhook that stopped arriving.
Signed string is {timestamp}.{raw body}, HMAC-SHA256 with the endpoint
secret.
Verify against the raw bytes, not a re-serialised object. The platform
signs exactly what it sends.
v1 prefix versions the scheme, not the key. A future v2= can appear
beside it, and a parser that ignores prefixes it does not know keeps working.
Delivery behaviour
Be idempotent on
X-Impel-Event-Id. It is stable across our retries, so a
receiver keyed on it is safe against both an honest retry and a captured
replay — and we retry deliberately, so every correct receiver needs this
anyway. X-Impel-Delivery-Id changes per attempt and is the right key only if
you want to detect an exact replay.
Deliveries are readable and replayable through the API — GET /api/v2/webhooks/deliveries, and replay by delivery or by event — as well as
from the dashboard.

