List approved shareholders
curl --request GET \
--url https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders"
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}/shareholders', 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}/shareholders",
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}/shareholders"
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}/shareholders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders")
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{
"shareholders": {
"version": "2",
"root": "0x4444444444444444444444444444444444444444444444444444444444444444",
"confirmedAt": "2026-09-10T18:40:00.000Z",
"addresses": [
{
"address": "0x76f8fc6667e239f83a547d4e16225d6a34f6fa22",
"status": "confirmed"
}
]
}
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}Shareholders
Get MicroVault shareholders
Returns wallets in the current shareholder list and whether the list containing each wallet has been confirmed onchain.
GET
/
v2
/
microvaults
/
vaults
/
{vaultId}
/
shareholders
List approved shareholders
curl --request GET \
--url https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders"
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}/shareholders', 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}/shareholders",
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}/shareholders"
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}/shareholders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/microvaults/vaults/{vaultId}/shareholders")
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{
"shareholders": {
"version": "2",
"root": "0x4444444444444444444444444444444444444444444444444444444444444444",
"confirmedAt": "2026-09-10T18:40:00.000Z",
"addresses": [
{
"address": "0x76f8fc6667e239f83a547d4e16225d6a34f6fa22",
"status": "confirmed"
}
]
}
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}Read the active shareholder root and the addresses represented by it.
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
Approved shareholder addresses.
Current shareholder list and its onchain confirmation state.
Show child attributes
Show child attributes