Skip to main content
POST
/
v2
/
wallets
/
{id}
/
withdrawals
Initiate a withdrawal
curl --request POST \
  --url https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "requestId": "f4a5b6c7-0000-4000-8000-000000000001",
  "destinationChain": "arbitrum",
  "amountUsd": 50,
  "destinationAddress": "0x76F8fc6667E239f83a547d4e16225d6a34f6FA22"
}
'
{ "id": "w1a2b3c4-0000-4000-8000-000000000001", "amountRequestedUsd": "50.000000", "feeUsd": "0.000000", "destinationChain": "arbitrum", "destinationAddress": "0x76F8fc6667E239f83a547d4e16225d6a34f6FA22", "status": "processing", "failureReason": null, "createdAt": "2025-09-05T10:00:00Z", "completedAt": null, "legsCompleted": 0, "legsTotal": 0, "payoutLegs": [] }

Documentation Index

Fetch the complete documentation index at: https://docs.groundtech.co/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
string<uuid>
required

Wallet ID

Body

application/json
requestId
string<uuid>
required

Client-generated idempotency key (UUID v4).

destinationChain
enum<string>
required

Destination chain for the withdrawal. Production chains are arbitrum, base, ethereum, polygon, and solana; sandbox accepts ethereum_sepolia and solana_devnet.

Available options:
arbitrum,
base,
ethereum,
ethereum_sepolia,
polygon,
solana,
solana_devnet
amountUsd
number<double>
required

Amount to withdraw in USD terms.

destinationAddress
string
required

On-chain destination address. Use an EVM hex address for EVM chains or a base58 address for solana.

Response

Withdrawal initiated (or existing withdrawal returned for idempotent retry)

id
string<uuid>
amountRequestedUsd
string | null

Requested withdrawal amount in USD as a formatted string.

amountPaidUsd
string | null

Completed payout amount in USD as a formatted string. Null until at least one payout completes.

feeUsd
string | null

Fee charged for the withdrawal as a formatted string.

destinationChain
enum<string>

Destination chain for the withdrawal.

Available options:
arbitrum,
base,
ethereum,
ethereum_sepolia,
polygon,
solana
destinationAddress
string
destinationToken
enum<string>
Available options:
usdc
status
enum<string>

Simplified withdrawal status. partially_completed means at least one payout leg delivered value and at least one leg failed or was cancelled.

Available options:
created,
processing,
completed,
partially_completed,
failed,
cancelled
legsCompleted
integer
legsTotal
integer
payoutLegs
object[]

Source-to-destination payout workflow legs.

failureReason
string | null

Human-readable reason for failure (only present when status is failed).

createdAt
string<date-time>
completedAt
string<date-time> | null