---
url: /docs/learn/webhooks-events.md
description: >-
  The full BlindPay webhook event catalog, grouped by domain, with an example
  payload.
---

Every webhook endpoint you register receives events from the catalog below, unless you narrow the `events` array to a subset when creating the endpoint. Events are grouped by the resource domain that triggers them.

## Customer

| Event | Fires when |
| --- | --- |
| `receiver.new` | A customer is created |
| `receiver.update` | A customer is updated, including a KYC status change from BlindPay's compliance review |
| `receiver.delete` | A customer is deleted |
| `customer.new` | Mirrors `receiver.new` |
| `customer.update` | Mirrors `receiver.update` |
| `customer.delete` | Mirrors `receiver.delete` |

## Bank account

| Event | Fires when |
| --- | --- |
| `bankAccount.new` | A bank account is added to a customer |

## Blockchain wallet

| Event | Fires when |
| --- | --- |
| `blockchainWallet.new` | A blockchain wallet is added to a customer |

## Terms of service

| Event | Fires when |
| --- | --- |
| `tos.accept` | A customer accepts the terms of service |

## Payin

| Event | Fires when |
| --- | --- |
| `payin.new` | A payin is created (any payment method, or a deposit into a virtual account) |
| `payin.update` | The payin advances through an intermediate step, such as an arrival check or manual review |
| `payin.complete` | The payin finishes: sent to the destination wallet, refunded, or failed |

## Payout

| Event | Fires when |
| --- | --- |
| `payout.new` | A payout is created and the source funds have been captured |
| `payout.update` | The payout advances through an intermediate step, such as document checks, manual review, or the bank send |
| `payout.complete` | The payout finishes: confirmed at the destination, refunded, or failed |

## Virtual account

| Event | Fires when |
| --- | --- |
| `virtualAccount.new` | A virtual account is created or requested for a customer |
| `virtualAccount.complete` | The virtual account is approved and an account number is issued |

## Transfer

| Event | Fires when |
| --- | --- |
| `transfer.new` | A stablecoin [transfer](/stablecoin/transfer) is created |
| `transfer.complete` | The transfer confirms on-chain |

## Wallet

| Event | Fires when |
| --- | --- |
| `wallet.new` | A managed [wallet](/stablecoin/wallets) is created for a customer |
| `wallet.inbound` | A stablecoin deposit is detected in a managed wallet |

## Limit increase

| Event | Fires when |
| --- | --- |
| `limitIncrease.new` | A customer requests a transaction limit increase |
| `limitIncrease.update` | BlindPay's compliance review approves or rejects the request |

## Key events for fiat

If you are only working with fiat rails, the events you will see most often are:

* `virtualAccount.complete`: an account is approved and ready to receive deposits
* `payin.complete`: a deposit arrived and settled
* `payout.new` and `payout.complete`: a bank transfer started, then finished, failed, or was refunded
* `bankAccount.new`: a payout destination was added to a customer

See [Payin quotes](/fiat/payin-quotes) and [Payout quotes](/fiat/payout-quotes) for the requests that lead to these events.

## Key events for stablecoin

If you are only working with stablecoin rails, the events you will see most often are:

* `wallet.inbound`: stablecoins landed in a managed wallet
* `blockchainWallet.new`: a customer added an external wallet as a payout destination
* `payin.complete` and `payout.complete`: fiat-to-stablecoin and stablecoin-to-fiat legs finished
* `transfer.new` and `transfer.complete`: an on-chain stablecoin transfer started and confirmed

See [Blockchain wallets](/stablecoin/blockchain-wallets) and [Wallets](/stablecoin/wallets) for how these destinations are created.

## Example payload

Every payload includes a `webhook_event` field set to the event name, followed by the resource's own fields. This example is a `payin.complete` event:

```json
{
  "webhook_event": "payin.complete",
  "id": "pi_000000000000",
  "status": "completed",
  "receiver_id": "re_000000000000",
  "receiver_amount": 10000,
  "sender_amount": 10000,
  "payment_method": "ach",
  "partner_fee": 0,
  "billing_fee_amount": 0,
  "transaction_fee_amount": 250,
  "blindpay_bank_details": {
    "bank_name": "Example Bank, N.A.",
    "account_number": "000000000000",
    "routing_number": "000000000"
  },
  "memo_code": "BP-AB12CD",
  "pix_code": null,
  "clabe": null,
  "tracking_complete": {
    "step": "completed",
    "completed_at": "2026-06-01T12:00:00.000Z"
  },
  "tracking_payment": {
    "step": "completed",
    "completed_at": "2026-06-01T11:58:00.000Z"
  },
  "tracking_transaction": {
    "step": "completed",
    "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000",
    "completed_at": "2026-06-01T11:59:00.000Z"
  },
  "tracking_partner_fee": {
    "step": "on_hold",
    "transaction_hash": null,
    "completed_at": null
  }
}
```

## Related

* [Webhooks](/learn/webhooks): create an endpoint and see webhooks in context
* [Webhooks verification](/learn/webhooks-verification): verify the signature headers on every call
* [Payins](/fiat/payins): the payin lifecycle behind `payin.*` events
* [Payouts](/fiat/payouts): the payout lifecycle behind `payout.*` events
* [Partner fees](/learn/partner-fees): how `tracking_partner_fee` is tracked on quotes and transactions
