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

# Webhooks

Privy emits webhooks when wallet actions change status, allowing your app to react to swaps, transfers, and earn activity in real time without polling.

## Setup

Subscribe to wallet action events from the **Configuration > Webhooks** page in the [Privy Dashboard](https://dashboard.privy.io/apps?page=webhooks).

For general webhook setup instructions, payload verification, and retry behavior, see the [webhooks overview](/api-reference/webhooks/overview).

<Info>
  Webhooks can be tested at no cost in development environments. To enable webhooks in production,
  upgrade to the Enterprise plan in the Privy Dashboard.
</Info>

## Statuses

Every wallet action moves through a predictable `status` lifecycle. Privy emits a webhook at each `status` update.

| Status        | Description                                                                                                                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `'created'`   | Wallet action has been queued for execution and resource ID has been returned to the caller.                                                                                                                |
| `'succeeded'` | All steps of the wallet action have successfully executed. This is a terminal state.                                                                                                                        |
| `'rejected'`  | The wallet action was rejected prior to executing any steps, e.g. due to a policy violation. This is a terminal state and safe to retry.                                                                    |
| `'failed'`    | The wallet action failed during execution of one of its steps. Use the [get wallet action](/api-reference/wallets/actions/get) endpoint with `?include=steps` to inspect what went wrong at the step level. |

## Action-specific payloads

All wallet action webhook payloads include a `type` (event name), `status`, and action `id`. Beyond these fields, payloads will include the fields present in that wallet action's resource.

<Info>
  For example, the payloads for `wallet_action.transfer.*` webhooks include the fields when calling
  fetching the transfer action resource via `GET /v1/actions/{action_id}` where `action_id`
  corresponds to a transfer.
</Info>

View the payloads for specific wallet actions below. Click the webhook event name to be redirected to its payload schema.

### Transfer

| Event                                                                                          | Description                                    |
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| [`wallet_action.transfer.created`](/api-reference/webhooks/wallet-action/transfer/created)     | A transfer action is created and queued        |
| [`wallet_action.transfer.succeeded`](/api-reference/webhooks/wallet-action/transfer/succeeded) | The transfer transaction confirms onchain      |
| [`wallet_action.transfer.rejected`](/api-reference/webhooks/wallet-action/transfer/rejected)   | The transfer is rejected before broadcast      |
| [`wallet_action.transfer.failed`](/api-reference/webhooks/wallet-action/transfer/failed)       | The transfer transaction fails after broadcast |

### Swap

| Event                                                                                  | Description                                |
| -------------------------------------------------------------------------------------- | ------------------------------------------ |
| [`wallet_action.swap.created`](/api-reference/webhooks/wallet-action/swap/created)     | A swap action is created and queued        |
| [`wallet_action.swap.succeeded`](/api-reference/webhooks/wallet-action/swap/succeeded) | The swap transaction confirms onchain      |
| [`wallet_action.swap.rejected`](/api-reference/webhooks/wallet-action/swap/rejected)   | The swap is rejected before broadcast      |
| [`wallet_action.swap.failed`](/api-reference/webhooks/wallet-action/swap/failed)       | The swap transaction fails after broadcast |

### Earn

<Tip>View a more [detailed explanation of earn webhooks](/wallets/actions/earn/webhooks).</Tip>

#### Deposit

| Event                                                                                                  | Description                                   |
| ------------------------------------------------------------------------------------------------------ | --------------------------------------------- |
| [`wallet_action.earn_deposit.created`](/api-reference/webhooks/wallet-action/earn-deposit/created)     | A deposit action is created and queued        |
| [`wallet_action.earn_deposit.succeeded`](/api-reference/webhooks/wallet-action/earn-deposit/succeeded) | The deposit transaction confirms onchain      |
| [`wallet_action.earn_deposit.rejected`](/api-reference/webhooks/wallet-action/earn-deposit/rejected)   | The deposit is rejected before broadcast      |
| [`wallet_action.earn_deposit.failed`](/api-reference/webhooks/wallet-action/earn-deposit/failed)       | The deposit transaction fails after broadcast |

#### Withdraw

| Event                                                                                                    | Description                                      |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| [`wallet_action.earn_withdraw.created`](/api-reference/webhooks/wallet-action/earn-withdraw/created)     | A withdrawal action is created and queued        |
| [`wallet_action.earn_withdraw.succeeded`](/api-reference/webhooks/wallet-action/earn-withdraw/succeeded) | The withdrawal transaction confirms onchain      |
| [`wallet_action.earn_withdraw.rejected`](/api-reference/webhooks/wallet-action/earn-withdraw/rejected)   | The withdrawal is rejected before broadcast      |
| [`wallet_action.earn_withdraw.failed`](/api-reference/webhooks/wallet-action/earn-withdraw/failed)       | The withdrawal transaction fails after broadcast |

#### Claim incentive

| Event                                                                                                                  | Description                                 |
| ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [`wallet_action.earn_incentive_claim.created`](/api-reference/webhooks/wallet-action/earn-incentive-claim/created)     | A claim action is created and queued        |
| [`wallet_action.earn_incentive_claim.succeeded`](/api-reference/webhooks/wallet-action/earn-incentive-claim/succeeded) | The claim transaction confirms onchain      |
| [`wallet_action.earn_incentive_claim.rejected`](/api-reference/webhooks/wallet-action/earn-incentive-claim/rejected)   | The claim is rejected before broadcast      |
| [`wallet_action.earn_incentive_claim.failed`](/api-reference/webhooks/wallet-action/earn-incentive-claim/failed)       | The claim transaction fails after broadcast |
