Skip to main content

Staking

Three read operations. Two are anonymous, one requires an API key.

Setup

The two anonymous operations need no key:
For positions, pass a server-side key. The SDK refuses to accept one in a browser runtime.

Amounts are raw integer strings

Fields ending in Raw, plus accumulatedRewardsLamports, are unsigned integer strings in the token’s base units. aprPercent is a decimal string. Parse raw amounts with BigInt and decimals with a decimal library — never Number.

Pool state

Cached public, max-age=10, stale-while-revalidate=30 with an ETag. Rate policy public-read-cheap.

Leaderboard

The top 100 wallets by weighted stake.
The response is { data: [...] }. It is not cursor paginated — the top 100 is the whole result, and there is no way to page past it. Ranking is by weighted stake, so a smaller position on a longer lock can outrank a larger one on a shorter lock. Cached public, max-age=30, stale-while-revalidate=120 with an ETag. Rate policy public-read-expensive.

Your positions

listOwnedStakingPositions returns only positions owned by the wallet pinned to your API key. A v2 API key is bound to exactly one Blank account and that account’s single verified wallet. It can never read another wallet’s positions, and there is no parameter that changes this.
Cursor paginated with cursor and limit, returning { data: [...], page: { nextCursor, hasMore } }. Never cached — the response is private, no-store on the api-key-read rate policy. See Conventions.

Raw HTTP

From a server shell, never a browser:

Reads only

The v2 API exposes staking reads. There is no public API to enable staking, change the allocation, stake, unstake, or top up rewards. Those are creator-dashboard and app flows. See Staking for the product rules: lock periods, weighting, and how rewards accrue.

Errors

Full problem-details shape lives in Errors.

Next