events:read.
List and filter
events.list returns events newest-first, through an opaque keyset cursor. Pass an endpointId for a single endpoint, or omit it to browse your whole org’s events on one page — the same consolidated view the dashboard’s Events page shows. All filters are optional and combine with AND:
- endpointId — one endpoint, or omit for the whole org.
- provider — repeatable; matches any of the given providers.
- verification state —
verified,authenticated,failed, orunattempted; repeatable. - method — the request’s HTTP method (
GET,POST, …); repeatable. - event type — the parsed event type (e.g.
charge.succeeded); repeatable. Only stripe, github, and shopify populate it today — for every other provider it’s null, so filtering by it returns nothing (not “no events”). - dedup strategy — how the event’s dedup key was derived (
content_hash,sw_webhook_id,provider_event_id,fields,unique); repeatable. - after / before — a received-at range (after is inclusive, before is exclusive).
afteraccepts an RFC 3339 timestamp or a relative duration —7d,24h,30m, ornow. - search — a case-insensitive substring (minimum 3 characters) across the event’s provider event id and dedup key; an exact match when the term is an event id. Request headers and payload bodies are not searched.
limit caps a page at 200. On the CLI, --all follows the cursor to the end for you.
--provider and --status are repeatable (or comma-separated) for multi-select, and --before bounds the top of the range. Add --output json for a machine-readable stream.
Read one event
events.get returns a single event in full — request headers, its verification result, timing, and a pointer to the raw body.
Get the raw body
events.getPayload returns the exact captured bytes. On the wire the body rides a JSON envelope — contentType, bytes (the decoded length), and the base64-wrapped body — so binary payloads and exact-byte signature fidelity survive intact.
The CLI writes the raw bytes verbatim, so redirecting to a file is byte-exact:
TypeScript
Payload retrieval is available on the CLI, API, and SDKs. It isn’t exposed over MCP — an agent
reads event metadata with
events.get instead.Tail live
events.tail is a forward, cursor-based tail with a since grammar (now, beginning, a duration, or an RFC 3339 instant) and cursor bookkeeping — headCursor for the current head, caughtUp once a page reaches it, and lag for how far behind you are. It’s the pull form the API and SDKs expose.
For a live stream in your terminal, the CLI wraps it as wbhk listen <endpoint-id>, which prints each event as it arrives. Add --forward to re-deliver them to your local server instead — see replay to localhost.