Skip to main content

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

  1. /v1/data/vaults?provider=lst → an item's providerMeta.delegation tells you if a choice is needed:
    • absent ⇒ pooled LST (Lido, Rocket Pool, …) — no picker, deposit directly.
    • { required, kind, optionKey, default, source } ⇒ a selection applies.
  2. If source: "endpoint", call this endpoint to populate the picker.
  3. Send the chosen item's id back to /v1/actions/vaults/deposit as the param named by delegation.optionKey (e.g. validator=<id> for Core, validatorGroup=<id> for Celo).

Behaviour by LST type

  • Required (Core stCORE — validator): the picker is mandatory; preselect the recommended item.
  • 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, empty items[] (200, not 404) so a UI can treat "no selection" uniformly.

Per-item fields

fieldmeaning
idthe opaque value to pass back as delegation.optionKey (validator / group / node address)
statusactive · inactive · jailed · full — only active targets are selectable
selectablepasses the protocol's eligibility (healthy + not blocked + has room)
recommendedthe default pick (best capacity / health) — preselect this
receivableVotesremaining 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

{ 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.