Get stake accounts by vote account
https://api.triport.io/v1/sol/snapshot/stake/by-voter/Vote111111111111111111111111111111111111111?limit=2&offset=0Returns every stake account delegated to a single Solana vote account, as captured in Triport's historical epoch snapshots.
This endpoint returns the set of stake accounts delegated to a single vote account, as recorded in the platform's historical epoch snapshots. Instead of scanning the live chain with a program-account query, you read from pre-captured snapshots, which makes it cheap to answer questions like "who delegates to this validator?" and to track a validator's delegator set across captured epochs.
Results are paginated and the response includes a total count of all matching
stake accounts across captured snapshots, which you can use to drive pagination.
Each entry is a SolStakeAccount describing the stake account address, the vote
account it delegates to, the active stake in lamports, and its activation /
deactivation epochs.
This is the canonical, fully-documented member of the snapshot stake-index
family; the sibling stake-index endpoints share the same SolStakeAccount
shape.
Parameters
Path parameters
vote_pubkeystringrequiredQuery parametersobjectlimitintegeroptionaloffsetintegeroptionalResponse
Response fields
| Field | Type | Description |
|---|---|---|
voter | string | The vote account queried (echoes vote_pubkey). |
accounts | array | Array of SolStakeAccount objects (see below). |
total | integer (int64) | Total stake accounts for this voter across captured snapshots. |
SolStakeAccount
| Field | Type | Description |
|---|---|---|
pubkey | string | Stake account address (base58). Required. |
voter | string | Vote account this stake is delegated to (base58). Required. |
stake | integer (int64) | Active delegated stake, in lamports. Required. |
activation_epoch | integer (int64) | Epoch in which this delegation became active. Required. |
deactivation_epoch | integer (int64) | null | Epoch in which deactivation was requested, or null if still active. |
Errors
| Code | Meaning | When it happens |
|---|---|---|
401 | Unauthorized | Missing or invalid API key. |
403 | Forbidden | API key lacks the sol_gpa_snapshot scope or the required business tier. |
429 | Too many requests | Rate limit for your tier exceeded; retry after backoff. |
All errors share the standard problem envelope — see errors.md.
Examples
JavaScript (fetch)
const voter = "Vote111111111111111111111111111111111111111";
const url =
`https://api.triport.io/v1/sol/snapshot/stake/by-voter/${voter}` +
`?limit=100&offset=0`;
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.TRIPORT_API_KEY}` },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { voter: queried, accounts, total } = await res.json();
console.log(`${queried}: ${accounts.length} of ${total} stake accounts`);TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const triport = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const page = await triport.sol.snapshot.stakeByVoter(
"Vote111111111111111111111111111111111111111",
{ limit: 100, offset: 0 },
);
for (const acct of page.accounts) {
console.log(acct.pubkey, acct.stake);
}
console.log(`total: ${page.total}`);Python (triport-sdk)
import os
from triport import Triport
client = Triport(api_key=os.environ["TRIPORT_API_KEY"])
page = client.sol.snapshot.stake_by_voter(
"Vote111111111111111111111111111111111111111",
limit=100,
offset=0,
)
for acct in page["accounts"]:
print(acct["pubkey"], acct["stake"])
print("total:", page["total"])Notes
- Pagination. Use
totalto decide how many pages to fetch: keep requesting with an increasingoffset(in steps oflimit) untiloffset >= total. - Historical, not live. Records come from captured epoch snapshots rather
than a live chain scan. A delegator that has begun unstaking appears with a
non-null
deactivation_epoch. - Related endpoints. This is one of the snapshot stake-index queries. To
follow a single stake account across every captured epoch, use
snapshot-stake-by-pubkey.md; for the latest
epoch's header plus its first page of accounts, use
snapshot-stake-latest.md. The account snapshot
endpoint
GET /v1/sol/snapshot/account/{address}returns the captured state of a single account.