List wallet deposits
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/deposits \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/deposits"
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}/deposits', 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}/deposits",
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}/deposits"
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}/deposits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/deposits")
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": "d1e2f3a4-0000-4000-8000-000000000001",
"walletId": "b1c2d3e4-0000-4000-8000-000000000001",
"amount": "100.500000",
"token": "usdc",
"chain": "ethereum",
"fromAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"txHash": "0xb4ec6ad9f2f2d75fb8df30c6e49b1f319138f0172d7bff7c402e7dcb7f017e8a",
"status": "completed",
"cashPositionId": "cash:ethereum:usdc",
"createdAt": "2025-09-02T12:00:00Z",
"completedAt": "2025-09-02T12:05:00Z"
},
{
"id": "d1e2f3a4-0000-4000-8000-000000000002",
"walletId": "b1c2d3e4-0000-4000-8000-000000000001",
"amount": "25.000000",
"token": "usdc",
"chain": "base",
"fromAddress": "0xfeed00000000000000000000000000000000beef",
"txHash": "0x9d0a6ad9f2f2d75fb8df30c6e49b1f319138f0172d7bff7c402e7dcb7f017e8b",
"status": "processing",
"cashPositionId": null,
"createdAt": "2025-09-02T12:06:00Z",
"completedAt": null
}
],
"nextCursor": null
}{
"error": "cursor is not compatible with the requested sort/order",
"code": "invalid_cursor"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Portfolio wallet not found",
"code": "wallet_not_found"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Deposits
List deposits
Lists a wallet’s deposits one page at a time. Incoming transfers are not added to the balance until processing finishes.
GET
/
v2
/
wallets
/
{id}
/
deposits
List wallet deposits
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/deposits \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/deposits"
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}/deposits', 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}/deposits",
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}/deposits"
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}/deposits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/deposits")
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": "d1e2f3a4-0000-4000-8000-000000000001",
"walletId": "b1c2d3e4-0000-4000-8000-000000000001",
"amount": "100.500000",
"token": "usdc",
"chain": "ethereum",
"fromAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"txHash": "0xb4ec6ad9f2f2d75fb8df30c6e49b1f319138f0172d7bff7c402e7dcb7f017e8a",
"status": "completed",
"cashPositionId": "cash:ethereum:usdc",
"createdAt": "2025-09-02T12:00:00Z",
"completedAt": "2025-09-02T12:05:00Z"
},
{
"id": "d1e2f3a4-0000-4000-8000-000000000002",
"walletId": "b1c2d3e4-0000-4000-8000-000000000001",
"amount": "25.000000",
"token": "usdc",
"chain": "base",
"fromAddress": "0xfeed00000000000000000000000000000000beef",
"txHash": "0x9d0a6ad9f2f2d75fb8df30c6e49b1f319138f0172d7bff7c402e7dcb7f017e8b",
"status": "processing",
"cashPositionId": null,
"createdAt": "2025-09-02T12:06:00Z",
"completedAt": null
}
],
"nextCursor": null
}{
"error": "cursor is not compatible with the requested sort/order",
"code": "invalid_cursor"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Portfolio wallet not found",
"code": "wallet_not_found"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Deposits can appear with
status: "processing" as soon as Ground detects a likely supported-token transfer into a workflow-idle wallet. A processing deposit is not final, not included in balances, and has completedAt: null.
After finality and ledger posting, the same onchain deposit is returned as a completed deposit with the same deposit id and completedAt populated. Wallets with active Ground-managed workflows may wait until final attribution before showing a deposit.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 deposits 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 deposits created at or after this ISO-8601 timestamp.