Skip to content

bullpen solana withdraw

Last updated: July 13, 2026

Withdraw SOL or an SPL token to a Solana address

Usage

bullpen solana withdraw [OPTIONS] <DESTINATION> <AMOUNT>

Live Help

Withdraw SOL or an SPL token to a Solana address

Usage: bullpen solana withdraw [OPTIONS] <DESTINATION> <AMOUNT>

Arguments:
  <DESTINATION>
          Destination Solana wallet address

  <AMOUNT>
          Amount to withdraw

Options:
      --output <OUTPUT>
          Output format for command results

          [possible values: table, json]

      --token <TOKEN>
          SPL token mint to withdraw. Omit for native SOL

      --env <ENV>
          Target environment to connect to (overrides config.toml)

          [env: BULLPEN_ENV=]
          [possible values: staging, production]

      --yes
          Skip confirmation prompt

      --config <CONFIG>
          Path to a custom config.toml file (overrides $BULLPEN_CONFIG and the default location).

          Explicit --config and BULLPEN_CONFIG paths fail closed: if the file is missing, the CLI exits validation instead of silently loading defaults. Credentials still resolve via BULLPEN_HOME, so set BULLPEN_HOME too when isolating a session.

      --preview
          Show the withdraw plan without signing or submitting

      --use-own-sol
          Skip the sponsored SPL transfer attempt and pay Solana network fees from your own SOL

      --i-confirm-destination-supports-token
          Bypass the CEX destination guard after verifying the destination supports this token on Solana

      --read-only
          Enable read-only mode: blocks all mutating commands

      --non-interactive
          Suppress interactive prompts; does NOT imply --yes for money-moving commands

          [env: BULLPEN_NON_INTERACTIVE=]

  -h, --help
          Print help (see a summary with '-h')

EXAMPLES:
  # Check balances before withdrawing
  bullpen solana balance

  # Preview a native SOL withdraw without signing or submitting
  bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 0.01 --preview

  # Preview a USDC withdraw without signing or submitting
  bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --preview

  # Export the withdraw preview as JSON
  bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --preview --output json

  # Preview a USDC withdraw that would use your own SOL for fees
  bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --use-own-sol --preview

Example Commands

bullpen solana balance
bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --preview
bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --preview --output json

JSON Output

Contract: JSON Output Contract.

Preview (--preview --output json)

Preview output is a single JSON document emitted only when --preview --output json is passed. It uses the read-only Solana signer path and returns before confirmation, Turnkey signing, or transaction submission.

Schema version: 1 when a command emits schema_version; otherwise treat the current command shape as contract version 1.

Top-level Keys

key type nullable notes
action string no solana_withdraw for withdraw previews
mode string no preview when --preview is used
would_submit boolean no false for --preview; no transaction was submitted
signature_requested boolean no false for --preview; no Turnkey signature was requested
submit_requested boolean no false for --preview; no TxService submission was requested
estimated_value_usd string/null yes Best-effort USD value for the preview amount
preview object no Withdraw preview with source, destination, amount, token, atomics, network notes, and destination warning

Example

bullpen solana withdraw 7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e 10 --token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v --preview --output json
{
  "action": "solana_withdraw",
  "mode": "preview",
  "would_submit": false,
  "signature_requested": false,
  "submit_requested": false,
  "estimated_value_usd": "10",
  "preview": {
    "source": "7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e",
    "destination": "8Y9xQeYxQeYxQeYxQeYxQeYxQeYxQeYxQeYxQeYxQeYx",
    "token_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "token_symbol": null,
    "amount_display": "10 USDC",
    "amount_atomics": 10000000,
    "decimals": 6,
    "network_notes": [],
    "destination_warning": null
  }
}

Stability

Patch releases may add nullable or optional fields. Minor releases may add required fields or increment schema_version. Major releases may remove or rename fields.

Solana Withdraw Notes

  • Native SOL withdraws are client-built and paid by the source wallet.
  • --preview builds the withdraw plan with the read-only Solana signer path and returns before confirmation, Turnkey signing, or transaction submission.
  • SPL withdraws try the sponsored transfer path first. When sponsorship is unavailable because the recipient needs an ATA, the recipient has never received the token, or the sponsored quota is exhausted, the CLI can retry with a user-paid SPL transfer after confirmation.
  • --use-own-sol skips the sponsor attempt for SPL withdraws and requires about 0.003 SOL in the source wallet for network fees and possible ATA rent.
  • Success JSON includes transfer_method: native_sol, sponsored, manual_fallback, or manual_forced.