Delivery Comparison
Compare two delivery attempts side by side — see exactly what changed between a failed attempt and a successful retry, including headers, body, status code, and timing.
Overview
When a delivery fails and is retried, each attempt records the full request and response. The Delivery Comparison tool shows two attempts side by side with differences highlighted, making it easy to spot why one attempt succeeded and another failed.
How to use
Open the event detail drawer
From the webhook events list, click the event you want to investigate.
Find the delivery timeline
In the event drawer, scroll to the delivery attempts section. Each attempt is listed with its status, timestamp, and HTTP status code.
Select two attempts
Click the checkbox on two delivery attempts to select them for comparison. The Compare button becomes active.
View the diff
Click Compare to open the side-by-side view. Differences are highlighted.
What is compared
| Section | Details |
|---|---|
| Request headers | All headers sent with the delivery POST, including signature and content-type |
| Request body | The JSON payload sent to the target URL |
| Response status | HTTP status code returned by the target |
| Response headers | Headers in the target's response |
| Response body | Body returned by the target server |
| Timing | Request duration in milliseconds, timestamp of each attempt |
Example comparison
┌─ Attempt 1 (FAILED) │ Attempt 3 (SUCCESS) ─┐
│ │ │
│ POST https://api.example.com/wh │ POST https://api.example.com/wh │
│ Timestamp: 14:30:00.000Z │ Timestamp: 14:32:15.000Z │
│ Duration: 30,042ms │ Duration: 142ms │
│ │ │
│ ── Request Headers ── │ ── Request Headers ── │
│ Content-Type: application/json │ Content-Type: application/json │
│ X-HostWebhook-Signature: sig_a.. │ X-HostWebhook-Signature: sig_b. │
│ X-HostWebhook-Attempt: 1 │ X-HostWebhook-Attempt: 3 │ ← different
│ │ │
│ ── Request Body ── │ ── Request Body ── │
│ { "type": "order.created" ... } │ { "type": "order.created" ... } │
│ (identical) │ (identical) │
│ │ │
│ ── Response ── │ ── Response ── │
│ Status: 504 Gateway Timeout │ Status: 200 OK │ ← different
│ Body: <html>504 error</html> │ Body: { "received": true } │ ← different
│ Duration: 30,042ms │ Duration: 142ms │ ← different
└──────────────────────────────────┴──────────────────────────────────┘Common patterns to look for
- Status code change (5xx to 200): The target server was down and recovered. Timeout on the failed attempt confirms a connectivity issue.
- Different response body: The target may have rate-limited the first attempt (429) and accepted the retry after the backoff period.
- Same 4xx on all attempts: The issue is with the request, not the target. Check the payload or headers for problems.
- Timing difference: A 30-second failed attempt vs a 100ms success indicates the target was overloaded or unreachable during the first attempt.