Skip to main content
Privy emits webhooks when earn wallet actions change status, allowing your app to react to deposits, withdrawals, and incentive claims in real time without polling.

Setup

Subscribe to earn events from the Configuration > Webhooks page in the Privy Dashboard.
Webhooks can be tested at no cost in development environments. To enable webhooks in production, upgrade to the Enterprise plan in the Privy Dashboard.
For general webhook setup instructions, payload verification, and retry behavior, see the webhooks overview.

Status lifecycle

Every earn action (deposit, withdraw, incentive claim) moves through a predictable status lifecycle. Privy emits a webhook at each transition.
1

Created

The action is received and queued for processing. At this point, no transaction has been signed or broadcast.
2

Succeeded, rejected, or failed

The action reaches a terminal state:
  • Succeeded — the transaction confirmed onchain.
  • Rejected — the action failed before any transaction was signed or broadcast (e.g. insufficient balance, policy violation). Safe to retry.
  • Failed — a transaction was broadcast but reverted onchain. Inspect the action’s steps for details.

Event reference

Deposit events

Fired when a wallet deposits assets into a yield vault.
EventFired when
wallet_action.earn_deposit.createdA deposit action is created and queued
wallet_action.earn_deposit.succeededThe deposit transaction confirms onchain
wallet_action.earn_deposit.rejectedThe deposit is rejected before broadcast
wallet_action.earn_deposit.failedThe deposit transaction reverts onchain

Withdrawal events

Fired when a wallet redeems vault shares for the underlying asset plus accrued yield.
EventFired when
wallet_action.earn_withdraw.createdA withdrawal action is created and queued
wallet_action.earn_withdraw.succeededThe withdrawal transaction confirms onchain
wallet_action.earn_withdraw.rejectedThe withdrawal is rejected before broadcast
wallet_action.earn_withdraw.failedThe withdrawal transaction reverts onchain

Incentive claim events

Fired when a wallet claims additional token rewards distributed by the vault.
EventFired when
wallet_action.earn_incentive_claim.createdA claim action is created and queued
wallet_action.earn_incentive_claim.succeededThe claim transaction confirms onchain
wallet_action.earn_incentive_claim.rejectedThe claim is rejected before broadcast
wallet_action.earn_incentive_claim.failedThe claim transaction reverts onchain

Common patterns

Listen for wallet_action.earn_deposit.succeeded to refresh the user’s position. Once the webhook fires, call the get position endpoint to fetch the updated assets_in_vault balance and display it in your UI.
Listen for wallet_action.earn_withdraw.succeeded to trigger a notification. The webhook payload includes the wallet_id and vault_id, which your app can use to look up the user and send an in-app or push notification.
A rejected status means no transaction was broadcast — for example, due to insufficient balance or a policy violation. Your app can safely prompt the user to retry. Check the action’s error details to surface a helpful message.
A failed status means a transaction was broadcast but reverted onchain. Use the get wallet action endpoint with ?include=steps to inspect what went wrong. Common causes include vault liquidity shortfalls or gas estimation issues.