APY & ROI
Returns the annual percentage yield (APY) and return on investment (ROI) for a known collection or group of validators. Known collections are referenced by index, public key, deposit address, or withdrawal address.
Use case guide: APY & ROI metrics explains how to choose a window, interpret return metrics, and decide when BeaconScore® is the better comparison.
For comparing performance across different staking providers, we recommend using the BeaconScore® from the Performance Aggregated endpoints instead of APY or ROI, as BeaconScore® normalizes for luck and provides a fairer comparison. Note that some residual luck factors outside a validator’s control can still influence BeaconScore®, especially over short evaluation windows. See the Residual Luck Factors section in the BeaconScore® documentation for details.
Custom time ranges: Query arbitrary time ranges using Unix timestamps, epochs, or slots — exclusively for Scale and Enterprise plans. Custom ranges are served at whole-UTC-day granularity (partial days are rounded outward), and the response range reports the actual covered range.
Authorizations
Body
Free selectors available to all users:
- validator_identifiers: One or more validator indices or public keys to filter by.
- dashboard_id: Your beaconcha.in dashboard ID (requires a free account).
Premium selectors for Scale & Enterprise plans (https://beaconcha.in/pricing):
- withdrawal: The validator's withdrawal credential or the Ethereum wallet address used for withdrawals.
- deposit_address: The Ethereum wallet address used for the validator's deposit.
- entity: The name of the assigned entity (e.g., "Lido", "Coinbase"). Optionally include
sub_entityfor more specific filtering. Matching is case-sensitive.
Note: The set of validators matched by deposit_address and withdrawal selectors is updated once per epoch (~6.4 minutes). Newly deposited validators may take up to one epoch to appear in query results.
Note: The set of validators matched by entity selector is updated once per day.
- Indices/Pubkeys
- Dashboard
- 💎 Deposit
- 💎 Withdrawal
- 💎 Entity
Specify a date range to receive aggregated data for that period — ideal for use cases like daily income tracking for income reporting.
Arbitrary time ranges — using Unix timestamps, epochs, or slots — are supported exclusively for Scale and Enterprise plans.
Arbitrary ranges are served at whole-UTC-day granularity: a range that covers only part of a UTC day is expanded outward so every UTC day it touches is returned in full. The response range reports the range actually covered by the returned data — it can be wider than requested (outward day expansion) or narrower (leading or trailing days with no data for the selected validators are not included).
- Fixed Window
- 💎 Unix Timestamp
- 💎 Epoch
- 💎 Slot
The Ethereum chain to query.
mainnet, hoodi Response
Successful response.
Response containing apy and roi information of the validators.
Validator performance metrics, expressed both as ROI (Return on Investment) and APY (Annual Percentage Yield).
- ROI represents the actual return over the selected evaluation window, not annualized.
- APY is the same return but annualized to show the equivalent yearly rate.
ROI helps understand raw performance during the evaluation range, while APY allows comparison against annualized benchmarks. Note that APY is an extrapolation and does not reflect future performance.
The time span actually covered by the returned results — from the first to the last matching data point — specified in slots, epochs, and Unix timestamps.
This reflects the data that was found, not the range that was queried. When no data is found, it falls back to the requested range, or to the full available history if no range was given.
For arbitrary (custom) time-range queries the queried range is expanded outward to whole UTC days, so the covered range may be wider than requested. As stated above, the reported range still reflects the data that was actually found — a touched UTC day with no data for the selected validators will not extend it.

