Webhooks
Governance events. At-least-once. Idempotent.
The Admin console fires webhooks on governance state transitions, deployment events, and execution anomalies. At-least-once delivery with exponential backoff. Every delivery carries X-DM-Delivery for idempotent deduplication on your receiver.
Event types
| Event | Fires when |
|---|---|
| ruleset.published | A version transitions to published state |
| ruleset.approved | A reviewer signs off on a version |
| ruleset.rejected | A reviewer rejects a promotion request |
| deployment.created | A version is deployed to an environment |
| deployment.rolled_back | A blue/green rollback completes |
| experiment.promoted | A challenger is promoted to champion |
| execution.budget_exceeded | An execution hits the step budget limit |
| warehouse.lag_critical | Warehouse writer lag exceeds threshold |
Delivery guarantee & deduplication
At-least-once
On retryable failures (5xx, timeout), the dispatcher retries up to 10 times over 24 hours with exponential backoff from 30 seconds. Non-retryable 4xx failures are not retried.
X-DM-Delivery
Every delivery carries X-DM-Delivery — a stable UUID for that (event, endpoint) pair. Re-deliveries always carry the same header. Store processed IDs and skip re-processing on match.
AI diagnosis panel
For endpoints with repeated failures, the Admin console shows the failure pattern and AI-generated diagnosis — informed by response codes and bodies. Raw evidence always visible.
Idempotent receiver pattern
@app.route("/dm-webhook", methods=["POST"])
def handle_dm_event():
delivery_id = request.headers.get("X-DM-Delivery")
if is_already_processed(delivery_id):
return "", 200 # idempotent — already handled
event = request.json
process_event(event)
mark_processed(delivery_id)
return "", 200Store processed delivery IDs in Redis, PostgreSQL, or any durable store. TTL to your retention window.
Webhooks in the Admin console
Configure endpoints, filter by event type, inspect delivery logs, and view AI-assisted diagnosis — all in the browser.