TriportRPC

Get stake accounts by vote account

GEThttps://api.triport.io/v1/sol/snapshot/stake/by-voter/Vote111111111111111111111111111111111111111?limit=2&offset=0

Returns every stake account delegated to a single Solana vote account, as captured in Triport's historical epoch snapshots.

Solanasol_gpa_snapshotbusiness

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_pubkeystringrequired
Base58 vote account public key, 32–44 characters.
Query parametersobject
limitintegeroptional
Max results to return per page.
offsetintegeroptional
Number of results to skip, for pagination.

Response

Response fields

FieldTypeDescription
voterstringThe vote account queried (echoes vote_pubkey).
accountsarrayArray of SolStakeAccount objects (see below).
totalinteger (int64)Total stake accounts for this voter across captured snapshots.

SolStakeAccount

FieldTypeDescription
pubkeystringStake account address (base58). Required.
voterstringVote account this stake is delegated to (base58). Required.
stakeinteger (int64)Active delegated stake, in lamports. Required.
activation_epochinteger (int64)Epoch in which this delegation became active. Required.
deactivation_epochinteger (int64) | nullEpoch in which deactivation was requested, or null if still active.

Errors

CodeMeaningWhen it happens
401UnauthorizedMissing or invalid API key.
403ForbiddenAPI key lacks the sol_gpa_snapshot scope or the required business tier.
429Too many requestsRate 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 total to decide how many pages to fetch: keep requesting with an increasing offset (in steps of limit) until offset >= 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.