---
title: "Earn withdraw succeeded"
method: POST
path: "wallet_action.earn_withdraw.succeeded"
---

# Earn withdraw succeeded

`POST wallet_action.earn_withdraw.succeeded` (webhook)

Fired when all steps of a wallet action have been confirmed onchain. The action is complete.

## Payload

- WalletActionEarnWithdrawSucceededWebhookPayload — Payload for the wallet_action.earn_withdraw.succeeded webhook event.
  - `action_type` 'swap' | 'transfer' | 'earn_deposit' | 'earn_withdraw' | 'earn_incentive_claim' | 'earn_fee_collect', required — Type of wallet action
  - `amount` string — Human-readable decimal amount of asset withdrawn (e.g. "1.5"). Only present when the token is known in the asset registry.
  - `asset` string — Asset identifier (e.g. "usdc", "eth"). Only present when the token is known in the asset registry.
  - `asset_address` string, required — Underlying asset token address.
  - `caip2` string, required — CAIP-2 chain identifier.
  - `completed_at` string, required — ISO 8601 timestamp of when the wallet action completed successfully.
  - `created_at` string, required — ISO 8601 timestamp of when the wallet action was created.
  - `decimals` integer — Number of decimals for the underlying asset (e.g. 6 for USDC, 18 for ETH). Only present when the token is known in the asset registry.
  - `raw_amount` string, required — Base-unit amount of asset withdrawn (e.g. "1500000").
  - `share_amount` string, required — Vault shares burned in base units.
  - `status` 'succeeded', required — The status of the wallet action.
  - `steps` WalletActionStep[], required — The steps of the wallet action, including transaction hashes.
    - union — A step within a wallet action, representing a single onchain action.
      - object — A wallet action step consisting of an EVM transaction.
        - `caip2` string, required — CAIP-2 chain identifier of the transaction, containing the chain ID.
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `finalized` boolean — Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `status` 'preparing' | 'queued' | 'pending' | 'retrying' | 'confirmed' | 'rejected' | 'reverted' | 'replaced' | 'abandoned', required — EVM transaction status.
        - `transaction_hash` string, nullable, required — The transaction hash for this step. May change while the step status is non-terminal.
        - `type` 'evm_transaction', required
      - object — A wallet action step consisting of an EVM user operation.
        - `bundle_transaction_hash` string, nullable, required — Transaction hash of the bundle in which this user operation was included. Null until included by a bundler.
        - `caip2` string, required — CAIP-2 network identifier, containing the chain ID of the user operation.
        - `entrypoint_version` '0.6' | '0.7' | '0.8' | '0.9', required — The entrypoint version of the user operation.
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `finalized` boolean — Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `gas_credits_charged_usd` string — Amount charged in USD for gas sponsorship on this step.
        - `status` 'preparing' | 'queued' | 'pending' | 'retrying' | 'confirmed' | 'rejected' | 'reverted' | 'replaced' | 'abandoned', required — User operation status.
        - `type` 'evm_user_operation', required
        - `user_operation_hash` string, nullable, required — The user operation hash for this step. May change while the step status is non-terminal.
      - object — A wallet action step consisting of an SVM (Solana) transaction.
        - `caip2` string, required — CAIP-2 chain identifier for the Solana network.
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `finalized` boolean — Whether this step has reached on-chain finality. Absent until finality is confirmed.
        - `gas_credits_charged_usd` string — Amount charged in USD for gas sponsorship on this step.
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'reverted' | 'failed', required — SVM transaction status.
        - `transaction_signature` string, nullable, required — The Solana transaction signature (base58-encoded). Null until broadcast.
        - `type` 'svm_transaction', required
      - object — A wallet action step consisting of a TVM (Tron) transaction.
        - `caip2` string, required — CAIP-2 chain identifier for the Tron network.
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'reverted' | 'failed', required — TVM transaction status.
        - `transaction_id` string, nullable, required — The Tron transaction ID. Null until broadcast.
        - `type` 'tvm_transaction', required
      - object — A wallet action step representing a cross-chain/cross-asset fill by an external provider.
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `status` 'preparing' | 'queued' | 'pending' | 'confirmed' | 'rejected' | 'failed', required — External transaction step status.
        - `type` 'external_transaction', required
      - object — A wallet action step representing a transaction executed by a custodian (e.g. Bridge).
        - `custodian` string, required — Identifier of the custodian executing this transaction (e.g. "bridge").
        - `failure_reason` FailureReason — A description of why a wallet action (or a step within a wallet action) failed.
          - `details` unknown
          - `message` string, required — Human-readable failure message.
        - `status` 'preparing' | 'queued' | 'custodian_reviewing' | 'pending' | 'confirmed' | 'rejected' | 'failed', required — Custodian transaction step status.
        - `type` 'custodian_transaction', required
  - `type` 'wallet_action.earn_withdraw.succeeded', required — The type of webhook event.
  - `vault_address` string, required — ERC-4626 vault contract address.
  - `vault_id` string, required — The vault ID.
  - `wallet_action_id` string, required — The ID of the wallet action.
  - `wallet_id` string, required — The ID of the wallet involved in the action.

## Acknowledgement `200`

Return a 200 status to indicate that the webhook was received successfully.

---

[API](https://skmtc.net/privy-io/apis/privy-api.md) · [All operations](https://skmtc.net/privy-io/apis/privy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/privy-io/privy-api/revisions/bb2eb34156cc/schema)
