> ## Documentation Index
> Fetch the complete documentation index at: https://mintfax.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Debug webhook deliveries

> Find a specific delivery attempt, see what mintfax sent, what your endpoint replied, and replay the request after a fix.

Every delivery attempt mintfax makes is recorded. When a webhook does not arrive, this is where you look first. The same data is available in the dashboard and through the API.

## What is recorded per attempt

| Field           | What it shows                                                                 |
| --------------- | ----------------------------------------------------------------------------- |
| Event ID        | The `evt_*` identifier the attempt was for.                                   |
| Endpoint        | The destination URL.                                                          |
| Attempt number  | 1 for the original send. 2+ for retries.                                      |
| Sent at         | When mintfax made the request.                                                |
| Status          | `succeeded`, `failed`, or `pending`.                                          |
| Response code   | The HTTP status code your endpoint returned. Null on network error / timeout. |
| Response body   | The first 4 KB of your response body, captured for inspection.                |
| Request headers | Including `webhook-id`, `webhook-timestamp`, `webhook-signature`.             |
| Duration        | Wall-clock time from request start to response or timeout.                    |

## In the dashboard

Settings > Webhooks lists every registered endpoint. Click an endpoint to see its delivery history, filterable by status and event type. Each attempt expands to show the headers and response. A failed attempt has a "Retry now" action that re-sends the same event payload to the same endpoint immediately.

## Via the API

List attempts for an environment:

```bash theme={null}
GET /webhooks/attempts?status=failed&endpoint=webhook_8aZqRm4yT3vK7pNxJ2bH9c
Authorization: Bearer mfx_test_abc123...
```

Retrieve a single attempt with full request and response detail:

```bash theme={null}
GET /webhooks/attempts/{attempt_id}
Authorization: Bearer mfx_test_abc123...
```

Trigger an immediate retry:

```bash theme={null}
POST /webhooks/attempts/{attempt_id}/retry
Authorization: Bearer mfx_test_abc123...
```

A manual retry counts as attempt N+1 for that event. The original scheduled retry sequence continues independently if the automatic schedule has not yet been exhausted.

See the [Webhooks API reference](/docs/api-reference/webhooks) for the full parameter set.

## Common failures and what they mean

| Response code | Common cause                                                           | Action                                                                  |
| ------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `400`         | Endpoint rejected the payload (signature failed, body invalid).        | Check your verification code. Confirm you captured the raw body.        |
| `401` / `403` | Endpoint requires its own auth that your webhook code did not provide. | Reconfigure the endpoint URL with the credentials it needs.             |
| `404`         | Endpoint URL is wrong or the route was removed.                        | Update the webhook endpoint to a valid URL.                             |
| `5xx`         | Your server is throwing on the request.                                | Check your application logs. Retry after fixing.                        |
| (none)        | Network failure, DNS resolution, TLS handshake, or timeout.            | Verify the endpoint is publicly reachable and the certificate is valid. |

## When you fix something on your side

After a deploy that fixes a webhook bug, you have two options to recover lost events:

1. **Wait for the next scheduled retry.** If you are still inside the automatic retry window (about 18 minutes from the first attempt), mintfax will deliver the event again on its own.
2. **Retry manually.** From the dashboard or via `POST /webhooks/attempts/{id}/retry`. This is what you want for events that exhausted their automatic retries.

If you missed a batch of events while your endpoint was down, the [Events API](/docs/api-reference/events) is the source of truth - you can iterate through events from any point in time and re-process them, even if no webhook delivery would still retry.

## Next

* [Webhooks API reference](/docs/api-reference/webhooks)
* [Events API reference](/docs/api-reference/events)
* [Verify webhook signatures](/docs/webhooks/verify-requests)
