Get selectable validators for an LST deposit
GET/v1/data/vaults/validators
Returns the selectable delegation targets (validators / validator-groups / nodes) for an LST that lets — or requires — the depositor to choose where the stake is delegated. The companion to the delegation descriptor carried on each lst item in /v1/data/vaults: the descriptor says whether a choice is needed and the deposit option key to send it back as; this endpoint returns the live set.
The flow
/v1/data/vaults?provider=lst→ an item'sproviderMeta.delegationtells you if a choice is needed:- absent ⇒ pooled LST (Lido, Rocket Pool, …) — no picker, deposit directly.
{ required, kind, optionKey, default, source }⇒ a selection applies.
- If
source: "endpoint", call this endpoint to populate the picker. - Send the chosen item's
idback to /v1/actions/vaults/deposit as the param named bydelegation.optionKey(e.g.validator=<id>for Core,validatorGroup=<id>for Celo).
Behaviour by LST type
- Required (Core stCORE —
validator): the picker is mandatory; preselect therecommendeditem. - Optional / auto (Celo stCELO —
validatorGroup,default: "auto"): the picker is optional — omit the choice and the deposit endpoint auto-resolves a valid group. Offer it as an "advanced" control. - Off-chain (Solv —
poolId,source: "offchain"):items[]is empty — the value comes from the protocol's docs, not the chain. Render an input, not a list. - Pooled / unknown:
delegation: null, emptyitems[](200, not 404) so a UI can treat "no selection" uniformly.
Per-item fields
| field | meaning |
|---|---|
id | the opaque value to pass back as delegation.optionKey (validator / group / node address) |
status | active · inactive · jailed · full — only active targets are selectable |
selectable | passes the protocol's eligibility (healthy + not blocked + has room) |
recommended | the default pick (best capacity / health) — preselect this |
receivableVotes | remaining capacity (raw underlying string), where the protocol exposes it (Celo) — show as "room left" so a user avoids a near-full target |
Only the selectable set is returned today; per-validator APR / commission are populated as clean sources are wired (absent ⇒ not yet available, never approximated).
Results are cached ~60s (validator metadata moves per epoch/round, not per block).
Request
Responses
- 200
- 400
{ chainId, shareToken, delegation, start, count, items[] }. delegation is null for pooled/unknown share tokens; items[] is empty for pooled or off-chain (Solv poolId) selections.
Validation error