Get a Wallet
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}"
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}', 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}",
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}"
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}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}")
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": "b1c2d3e4-0000-4000-8000-000000000001",
"label": "Corporate Treasury",
"createdAt": "2025-09-01T00:00:00Z",
"status": "idle",
"failureReason": null,
"depositAddresses": {
"arbitrum": "0xAbC1230000000000000000000000000000000001",
"base": "0xAbC1230000000000000000000000000000000001",
"ethereum": "0xAbC1230000000000000000000000000000000001",
"polygon": "0xAbC1230000000000000000000000000000000001",
"solana": "7vFgKxM3bP4oEFbqkPmA5E2rYJ8HqKz8abc1"
},
"balance": {
"totalUsd": "100.000000",
"withdrawableUsd": "100.000000",
"reservedUsd": "0.000000",
"earnedUsd": "5.000000"
},
"positions": [
{
"id": "syrup-usdc",
"kind": "yield_source",
"label": "Syrup USDC",
"valueUsd": "40.000000",
"pct": 40
},
{
"id": "morpho-gauntlet-usdc",
"kind": "yield_source",
"label": "Morpho Gauntlet USDC Prime",
"valueUsd": "30.000000",
"pct": 30
},
{
"id": "morpho-steakhouse-usdc",
"kind": "yield_source",
"label": "Morpho Steakhouse USDC Prime",
"valueUsd": "30.000000",
"pct": 30
}
]
}
Wallets
Get a portfolio wallet
Returns the wallet with balances, strategy, positions, and deposit addresses.
GET
/
v2
/
wallets
/
{id}
Get a Wallet
curl --request GET \
--url https://sandbox.groundtech.co/v2/wallets/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/wallets/{id}"
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}', 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}",
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}"
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}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/wallets/{id}")
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": "b1c2d3e4-0000-4000-8000-000000000001",
"label": "Corporate Treasury",
"createdAt": "2025-09-01T00:00:00Z",
"status": "idle",
"failureReason": null,
"depositAddresses": {
"arbitrum": "0xAbC1230000000000000000000000000000000001",
"base": "0xAbC1230000000000000000000000000000000001",
"ethereum": "0xAbC1230000000000000000000000000000000001",
"polygon": "0xAbC1230000000000000000000000000000000001",
"solana": "7vFgKxM3bP4oEFbqkPmA5E2rYJ8HqKz8abc1"
},
"balance": {
"totalUsd": "100.000000",
"withdrawableUsd": "100.000000",
"reservedUsd": "0.000000",
"earnedUsd": "5.000000"
},
"positions": [
{
"id": "syrup-usdc",
"kind": "yield_source",
"label": "Syrup USDC",
"valueUsd": "40.000000",
"pct": 40
},
{
"id": "morpho-gauntlet-usdc",
"kind": "yield_source",
"label": "Morpho Gauntlet USDC Prime",
"valueUsd": "30.000000",
"pct": 30
},
{
"id": "morpho-steakhouse-usdc",
"kind": "yield_source",
"label": "Morpho Steakhouse USDC Prime",
"valueUsd": "30.000000",
"pct": 30
}
]
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Wallet ID
Response
Wallet details
Whether Ground automatically deploys deposits and maintains the wallet's percentage targets.
Percentage targets when automatic rebalancing is enabled. Always null when it is disabled.
Show child attributes
Show child attributes
Compact wallet lifecycle and active-workflow status.
Available options:
creating, idle, withdrawal_active, rebalance_active, withdrawal_and_rebalance_active, failed Deposit addresses keyed by chain. Sandbox wallets use ethereum_sepolia and solana_devnet; production wallets use arbitrum, base, ethereum, polygon, and solana.
Show child attributes
Show child attributes
Example:
{ "arbitrum": "0xAbC1230000000000000000000000000000000001", "base": "0xAbC1230000000000000000000000000000000001", "ethereum": "0xAbC1230000000000000000000000000000000001", "polygon": "0xAbC1230000000000000000000000000000000001", "solana": "7vFgKxM3bP4oEFbqkPmA5E2rYJ8HqKz8abc1" }
Show child attributes
Show child attributes
Show child attributes
Show child attributes