Get a MicroVault
curl --request GET \
--url https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}"
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/microvaults/vaults/{vaultId}', 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/microvaults/vaults/{vaultId}",
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/microvaults/vaults/{vaultId}"
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/microvaults/vaults/{vaultId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}")
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{
"vault": {
"id": "d9902b20-6499-4465-a4c3-5d2208182f79",
"customerRecordId": "0f73a08e-8429-45a3-a149-67f212d6a746",
"chainId": 11155111,
"onchainCustomerId": "41",
"address": "0x848837d997f0ce3f753d4644ee51b837ab8b386e",
"factoryAddress": "0x0f62a920980b03f2fd8fec9efac6040a6595a910",
"customerVaultNonce": "3",
"version": "1",
"shareName": "Acme Treasury MicroVault",
"shareSymbol": "acmeUSDC",
"baseAssetAddress": "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
"baseAssetDecimals": 6,
"status": "active",
"deploymentStatus": "active",
"exported": false,
"managementFeeBps": 0,
"performanceFeeBps": 0,
"feeRecipientAddress": "0x76f8fc6667e239f83a547d4e16225d6a34f6fa22",
"pauseFlags": "0",
"allocationTargets": [
{
"sourceId": "0x1111111111111111111111111111111111111111111111111111111111111111",
"targetBps": 8000
}
],
"idleTargetBps": 2000,
"highWaterNavPerShare": "1000000",
"enabledSourceCount": 1,
"totalAssetsUnits": "125000000",
"idleAssetsUnits": "25000000",
"freeIdleAssetsUnits": "25000000",
"reservedRedemptionAssetsUnits": "0",
"navPerShareUnits": "1002400",
"createdAt": "2026-09-01T14:30:00.000Z",
"updatedAt": "2026-09-10T18:40:00.000Z",
"nav": {
"observationKind": "onchain_read",
"blockNumber": 9182041,
"blockHash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"totalAssetsUnits": "125000000",
"totalSupplyUnits": "124700000000000000000",
"navPerShareUnits": "1002400",
"valuationFailure": null,
"observedAt": "2026-09-10T18:40:00.000Z"
},
"automation": {
"mode": "ground_managed",
"health": "healthy",
"pendingWork": [],
"blockingReason": null,
"lastEvaluatedAt": "2026-09-10T18:40:10.000Z",
"lastOperationAt": "2026-09-10T17:05:00.000Z"
},
"authorityAddress": "0x3333333333333333333333333333333333333333",
"authorityEpoch": "1"
}
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "invalid_request",
"message": "allocation targets and idleTargetBps must total 10000"
}Vaults and Sources
Get a MicroVault
Returns the vault’s identity, share-token metadata, current state, asset balances, and latest NAV observation.
GET
/
v2
/
microvaults
/
vaults
/
{vaultId}
Get a MicroVault
curl --request GET \
--url https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}"
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/microvaults/vaults/{vaultId}', 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/microvaults/vaults/{vaultId}",
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/microvaults/vaults/{vaultId}"
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/microvaults/vaults/{vaultId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}")
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{
"vault": {
"id": "d9902b20-6499-4465-a4c3-5d2208182f79",
"customerRecordId": "0f73a08e-8429-45a3-a149-67f212d6a746",
"chainId": 11155111,
"onchainCustomerId": "41",
"address": "0x848837d997f0ce3f753d4644ee51b837ab8b386e",
"factoryAddress": "0x0f62a920980b03f2fd8fec9efac6040a6595a910",
"customerVaultNonce": "3",
"version": "1",
"shareName": "Acme Treasury MicroVault",
"shareSymbol": "acmeUSDC",
"baseAssetAddress": "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
"baseAssetDecimals": 6,
"status": "active",
"deploymentStatus": "active",
"exported": false,
"managementFeeBps": 0,
"performanceFeeBps": 0,
"feeRecipientAddress": "0x76f8fc6667e239f83a547d4e16225d6a34f6fa22",
"pauseFlags": "0",
"allocationTargets": [
{
"sourceId": "0x1111111111111111111111111111111111111111111111111111111111111111",
"targetBps": 8000
}
],
"idleTargetBps": 2000,
"highWaterNavPerShare": "1000000",
"enabledSourceCount": 1,
"totalAssetsUnits": "125000000",
"idleAssetsUnits": "25000000",
"freeIdleAssetsUnits": "25000000",
"reservedRedemptionAssetsUnits": "0",
"navPerShareUnits": "1002400",
"createdAt": "2026-09-01T14:30:00.000Z",
"updatedAt": "2026-09-10T18:40:00.000Z",
"nav": {
"observationKind": "onchain_read",
"blockNumber": 9182041,
"blockHash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"totalAssetsUnits": "125000000",
"totalSupplyUnits": "124700000000000000000",
"navPerShareUnits": "1002400",
"valuationFailure": null,
"observedAt": "2026-09-10T18:40:00.000Z"
},
"automation": {
"mode": "ground_managed",
"health": "healthy",
"pendingWork": [],
"blockingReason": null,
"lastEvaluatedAt": "2026-09-10T18:40:10.000Z",
"lastOperationAt": "2026-09-10T17:05:00.000Z"
},
"authorityAddress": "0x3333333333333333333333333333333333333333",
"authorityEpoch": "1"
}
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "invalid_request",
"message": "allocation targets and idleTargetBps must total 10000"
}Read vault configuration, balances, valuation, and automation status.
MicroVaults are in private preview for enabled sandbox organizations on Ethereum Sepolia.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Ground identifier of the MicroVault. This is distinct from its onchain contract address.
Pattern:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$Example:
"8f4c52d7-62ab-4db9-a964-92f481f6b851"
Response
MicroVault state.
Current identity, configuration, balances, and valuation of the requested MicroVault.
Show child attributes
Show child attributes
Example:
{ "id": "d9902b20-6499-4465-a4c3-5d2208182f79", "customerRecordId": "0f73a08e-8429-45a3-a149-67f212d6a746", "chainId": 11155111, "onchainCustomerId": "41", "address": "0x848837d997f0ce3f753d4644ee51b837ab8b386e", "factoryAddress": "0x0f62a920980b03f2fd8fec9efac6040a6595a910", "customerVaultNonce": "3", "version": "1", "shareName": "Acme Treasury MicroVault", "shareSymbol": "acmeUSDC", "baseAssetAddress": "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238", "baseAssetDecimals": 6, "status": "active", "deploymentStatus": "active", "exported": false, "managementFeeBps": 0, "performanceFeeBps": 0, "feeRecipientAddress": "0x76f8fc6667e239f83a547d4e16225d6a34f6fa22", "pauseFlags": "0", "allocationTargets": [ { "sourceId": "0x1111111111111111111111111111111111111111111111111111111111111111", "targetBps": 8000 } ], "idleTargetBps": 2000, "highWaterNavPerShare": "1000000", "enabledSourceCount": 1, "totalAssetsUnits": "125000000", "idleAssetsUnits": "25000000", "freeIdleAssetsUnits": "25000000", "reservedRedemptionAssetsUnits": "0", "navPerShareUnits": "1002400", "createdAt": "2026-09-01T14:30:00.000Z", "updatedAt": "2026-09-10T18:40:00.000Z", "nav": { "observationKind": "onchain_read", "blockNumber": 9182041, "blockHash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "totalAssetsUnits": "125000000", "totalSupplyUnits": "124700000000000000000", "navPerShareUnits": "1002400", "valuationFailure": null, "observedAt": "2026-09-10T18:40:00.000Z" }, "automation": { "mode": "ground_managed", "health": "healthy", "pendingWork": [], "blockingReason": null, "lastEvaluatedAt": "2026-09-10T18:40:10.000Z", "lastOperationAt": "2026-09-10T17:05:00.000Z" } }