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

# Webhook events

> Event types and payload format for webhook deliveries

Webhooks fire on every Payment Intent state transition. See the [webhooks guide](/guides/webhooks) for setup instructions and signature verification.

## Event payload

```json theme={null}
{
  "eventId": "evt_abc123",
  "type": "intent.confirmed",
  "createdAt": "2026-04-06T12:00:00Z",
  "livemode": true,
  "data": {
    "intent": {
      "id": "pi_abc123def456",
      "state": "confirmed",
      "chain": "solana:5eykt4UsFv8P8NJdTREpY1vzqKq2Kvdp",
      "token": "USDC",
      "amount": "10.50",
      "requestor": "7xKXtg2...",
      "fulfiller": "9mNKPt3..."
    }
  }
}
```

## Event types

| Type                    | Trigger                                     |
| ----------------------- | ------------------------------------------- |
| `intent.created`        | Intent created                              |
| `intent.pending`        | Transaction broadcast to chain              |
| `intent.confirmed`      | Sufficient on-chain confirmations           |
| `intent.finalized`      | Chain-level finality                        |
| `intent.failed`         | On-chain failure (revert, program error)    |
| `intent.expired`        | TTL elapsed without fulfillment             |
| `intent.cancelled`      | Explicitly cancelled                        |
| `intent.retry_required` | Transaction dropped, fulfiller must re-sign |
| `intent.detected`       | Fulfiller acknowledged audio receipt        |

## Delivery contract

* **Signature:** HMAC-SHA256 in `X-PF-Signature` header
* **Retries:** Exponential backoff, \~10 attempts over up to 72 hours
* **Ordering:** Best-effort — always confirm state via `GET /v1/intents/:id` before acting
* **Deduplication:** Events have a stable `eventId` — the same event may be delivered more than once
