Common event contract
Fields that keep these queries reusable
- timestamp_utc, provider, event_type, delivery_id, and status
- attempt, latency_ms, status_code, and idempotency_outcome
- downstream_job_count, error_type, and environment
Definitions before SQL
Decisions the query cannot make for you
- 1Store provider identifiers, not raw webhook payloads or signatures.
- 2Distinguish delivery attempts from the final outcome of one webhook.
- 3Define whether an acknowledged duplicate is a success or a separate outcome.
Recommended sequence
Build detection first, then diagnosis
Analysis patterns
Make the result explain a decision
Follow one delivery end to end
Use a stable delivery identifier to connect receipt, validation, acknowledgement, retries, processing, and the downstream effect.
Distinguish attempts from outcomes
An attempt-level error is different from a permanently failed webhook. Keep both so recovery rates remain interpretable.
Verify idempotency
Track duplicate recognition and downstream side effects to confirm that retries do not repeat business operations.
Complete recipes
Copy the query, then validate the assumptions
Measure Webhook Retry Recovery
Separate permanent webhook failures from deliveries that recovered on a later attempt.
Are webhook retries recovering failures or creating more work?
See SQL and resultMeasure Webhook Latency and Duplicate Rate
Compare processing latency, duplicate deliveries, and failures by webhook provider and event type.
Which webhook sources are slow, duplicated, or unreliable?
See SQL and resultMeasure Webhook End-to-End Completion
Follow each webhook from receipt through downstream completion and measure the share that finishes within an operating target.
Which webhook types finish their downstream work within five minutes?
See SQL and resultAdapt the event contract before the threshold
Keep the analysis pattern, but validate table names, field types, business definitions, time windows, and minimum-volume rules against your own events. Every published query is also planned and executed against an empty typed table with the pinned engine.