Skip to content

Operator surface

Knocker’s operator actions are durable SQLite operations exposed through the language bindings. It is not a built-in HTTP control plane.

For production recovery recipes, see the Operator runbook.

events = webhooks.list_events(endpoint="stripe", limit=50)
invalid = webhooks.list_deliveries(
endpoint="stripe",
signature_valid=False,
orphaned=True,
since=1700000000,
limit=50,
)
event = webhooks.get_event(42)
delivery = webhooks.get_delivery(99)
webhooks.ignore(event.id)
webhooks.replay(event.id)
webhooks.requeue(event.id)
webhooks.replay_delivery(delivery.id)

Event lists are newest-first, inclusive on since, and bounded. Delivery reads preserve receipt-level audit/debugging details, including invalid and orphaned receipts.

Current action semantics:

  • ignore(...) is allowed from received, failed, or dead.
  • ignore(...) is a no-op when the event is already ignored.
  • replay(...) is allowed from handled, failed, dead, or ignored.
  • requeue(...) is allowed from failed, dead, or ignored.
  • replay(...) and requeue(...) use the canonical Event payload.
  • replay_delivery(...) is explicit and delivery-level: it processes the specified stored Delivery body through the linked event’s handler without mutating the canonical Event payload.

Provider redelivery of a dead event is audit-only. Knocker stores the new Delivery, keeps duplicate ingest non-mutating, and waits for an operator to call requeue(...) or replay_delivery(...).

Operator reads are best-effort under concurrent worker activity. They are good for inspection and manual recovery, but they are not advertised as a cross-call snapshot API.