Get a single deposit
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId}"
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/{depositId}', 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/{depositId}",
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/{depositId}"
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/{depositId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId}")
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{
"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"
}{
"error": "id must be a valid UUID v4",
"code": "validation_error"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Deposit not found",
"code": "deposit_not_found"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Deposits
Get a deposit
Returns a single deposit by its ID.
GET
/
v2
/
wallets
/
{id}
/
deposits
/
{depositId}
Get a single deposit
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId}"
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/{depositId}', 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/{depositId}",
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/{depositId}"
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/{depositId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}/deposits/{depositId}")
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{
"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"
}{
"error": "id must be a valid UUID v4",
"code": "validation_error"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "Deposit not found",
"code": "deposit_not_found"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}The deposit
id stays the same as its status changes from processing to
completed. While processing, completedAt is null and the deposit is not yet
credited to the wallet. See Deposit lifecycle.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Deposit details
Portfolio wallet credited by this deposit.
Deposit amount as a fixed six-decimal USD string (e.g. "100.500000").
Deposited stablecoin.
Available options:
usdc, usdt Chain where the deposit was detected.
Available options:
arbitrum, base, ethereum, ethereum_sepolia, polygon, solana, solana_devnet, stellar, stellar_testnet, tempo On-chain transaction hash.
Deposit status. processing can mean the deposit was detected before finality for a workflow-idle wallet and is not yet credited to balances.
Available options:
processing, completed, failed Stable public cash position ID that can be passed to allocations[].from. Null until the deposit completes and posts.
Populated after the deposit finalizes and posts; null while processing.