List wallet withdrawals
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "w1a2b3c4-0000-4000-8000-000000000001",
"amountRequestedUsd": "50.000000",
"amountPaidUsd": "50.000000",
"feeUsd": "0.000000",
"destinationChain": "arbitrum",
"destinationAddress": "0x76F8fc6667E239f83a547d4e16225d6a34f6FA22",
"destinationToken": "usdc",
"status": "completed",
"failureReason": null,
"createdAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"legsCompleted": 1,
"legsTotal": 1,
"payoutLegs": [
{
"from": {
"kind": "cash",
"id": "cash:arbitrum:usdc",
"label": "Cash (Arbitrum)"
},
"to": {
"kind": "external_payout",
"id": "external_payout:arbitrum:usdc",
"label": "External payout (Arbitrum)"
},
"status": "completed",
"amountUsd": "50.000000",
"startedAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"stepsCompleted": 1,
"stepsTotal": 1,
"steps": [
{
"name": "Sending payout",
"stepKind": "external_payout_transfer",
"sequenceRole": "external_payout_transfer",
"protocolType": "external_payout",
"stepOrdinal": 0,
"chain": "arbitrum",
"txKind": "external_payout_transfer",
"state": "completed",
"startedAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"cancelledAt": null
}
]
}
]
}
],
"nextCursor": null
}{
"error": "cursor is not compatible with the requested status filter",
"code": "invalid_cursor"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Withdrawals
List withdrawals
Returns a cursor-paginated list of withdrawals for a specific wallet.
GET
/
v2
/
wallets
/
{id}
/
withdrawals
List wallet withdrawals
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/withdrawals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "w1a2b3c4-0000-4000-8000-000000000001",
"amountRequestedUsd": "50.000000",
"amountPaidUsd": "50.000000",
"feeUsd": "0.000000",
"destinationChain": "arbitrum",
"destinationAddress": "0x76F8fc6667E239f83a547d4e16225d6a34f6FA22",
"destinationToken": "usdc",
"status": "completed",
"failureReason": null,
"createdAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"legsCompleted": 1,
"legsTotal": 1,
"payoutLegs": [
{
"from": {
"kind": "cash",
"id": "cash:arbitrum:usdc",
"label": "Cash (Arbitrum)"
},
"to": {
"kind": "external_payout",
"id": "external_payout:arbitrum:usdc",
"label": "External payout (Arbitrum)"
},
"status": "completed",
"amountUsd": "50.000000",
"startedAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"stepsCompleted": 1,
"stepsTotal": 1,
"steps": [
{
"name": "Sending payout",
"stepKind": "external_payout_transfer",
"sequenceRole": "external_payout_transfer",
"protocolType": "external_payout",
"stepOrdinal": 0,
"chain": "arbitrum",
"txKind": "external_payout_transfer",
"state": "completed",
"startedAt": "2025-09-05T10:00:00Z",
"completedAt": "2025-09-05T10:05:00Z",
"cancelledAt": null
}
]
}
]
}
],
"nextCursor": null
}{
"error": "cursor is not compatible with the requested status filter",
"code": "invalid_cursor"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Wallet ID
Query Parameters
Opaque cursor from a prior response; pass it unchanged to fetch the next page (must be reused with the same filters and sort).
Maximum number of withdrawals to return in this response (smaller values reduce payload size and latency).
Required range:
1 <= x <= 200Field to sort by (currently only createdAt is supported).
Available options:
createdAt Sort direction for results; use desc for newest-first or asc for oldest-first.
Available options:
asc, desc Filter results to withdrawals created at or after this ISO-8601 timestamp.
Filter withdrawals by exact public status; repeat the parameter to match any of multiple statuses (OR semantics).
Available options:
processing, completed, partially_completed, failed, cancelled