> ## Documentation Index
> Fetch the complete documentation index at: https://bobprince-78964c2b.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# How It Works

> The capture, store, forward, and retry lifecycle.

## The flow

Hookdrop sits between your webhook provider and your server:

```
Stripe → Hookdrop → Your server
```

When an event arrives, Hookdrop takes over immediately so your provider gets a fast `200 OK` — then handles delivery to your server in the background, with retries if anything goes wrong.

## The lifecycle

<Steps>
  <Step title="Capture">
    The webhook hits your permanent Hookdrop URL. Hookdrop saves it to the database and returns `200 OK` to the sender in under 50ms.

    <Note>
      Webhook senders wait for your `200 OK` before they consider delivery successful. If your response is slow, they assume failure and start retrying — which creates duplicate events. By separating capture from delivery, Hookdrop responds instantly and handles forwarding asynchronously, so the sender never has to wait.
    </Note>
  </Step>

  <Step title="Store">
    The full event is persisted in the database — nothing is thrown away:

    * **Headers** — every request header, including signatures
    * **Body** — the raw payload exactly as sent
    * **Source IP** — where the request originated
    * **Timestamp** — exact time of arrival

    Events remain stored for your plan's retention period: 24 hours (Free), 7 days (Starter), 30 days (Pro), or 90 days (Team).
  </Step>

  <Step title="Forward">
    A delivery worker picks up the job and forwards the event to your configured destinations — your local dev server, staging, production, or all three simultaneously. Forwarding uses a 10-second timeout per attempt.
  </Step>

  <Step title="Retry">
    If your server is unreachable or returns an error, Hookdrop retries automatically with exponential backoff:

    | Attempt   | Delay      |
    | --------- | ---------- |
    | 1st retry | 5 seconds  |
    | 2nd retry | 30 seconds |
    | 3rd retry | 2 minutes  |
    | 4th retry | 10 minutes |

    After 4 failed attempts, the event moves to the dead letter queue and you receive an email alert.
  </Step>

  <Step title="Audit">
    Every delivery attempt is logged with the response code, response body, attempt count, and timestamp. You have a complete audit trail for every event — not just successes.
  </Step>

  <Step title="Replay">
    Replay any event against any destination at any time, as long as it's within your plan's retention window. One click from the dashboard — no configuration required.

    <Tip>
      Use replay when you're bringing up a new destination, recovering from an outage, or testing a code change against a real payload.
    </Tip>
  </Step>
</Steps>

<CardGroup cols={2}>
  <Card title="Endpoints" icon="link" href="/concepts/endpoints">
    Learn how endpoints, destinations, and deliveries relate to each other.
  </Card>

  <Card title="Authentication" icon="lock" href="/api-reference/authentication">
    Verify webhook signatures and secure your endpoints.
  </Card>
</CardGroup>
