> ## Documentation Index
> Fetch the complete documentation index at: https://docs.beaconcha.in/llms.txt
> Use this file to discover all available pages before exploring further.

# ETH.STORE®

> Returns ETH.STORE® — the staking benchmark measuring the average return that validators on the Ethereum network achieved over each 24-hour period. Each datapoint covers one beaconchain-day (a fixed window of `86400 ÷ seconds_per_slot ÷ slots_per_epoch` epochs, indexed by the number of whole days elapsed since genesis) and aggregates every validator that was active for the full day.

Each datapoint reports the effective, start, and end balances, the deposits credited during the day, and the rewards split into consensus-layer (attestation, sync-committee, proposal) and execution-layer (priority transaction fees and MEV) components. The annualized rate of return (APR) is given for each layer and combined, together with 7-day and 31-day trailing averages that smooth out day-to-day variance.

Results are returned one datapoint per day, most recent first. Free plans select a trailing evaluation window (`24h` for the latest datapoint, up to `all_time` with pagination for the full history). [Scale and Enterprise plans](https://beaconcha.in/pricing) can additionally request an arbitrary range by Unix timestamp, epoch, or slot. Because a datapoint is computed only after its day has finalized, every returned value is immutable and safe to cache indefinitely.

ETH.STORE® is not made available for use as a benchmark, whether in relation to a financial instrument, financial contract or to measure the performance of an investment fund, or otherwise in a way that would require it to be administered by a benchmark administrator pursuant to the EU Benchmarks Regulation. Currently Bitfly does not grant any right to access or use ETH.STORE® for such purpose.




## OpenAPI

````yaml /v3/bundled.yaml post /api/v2/ethereum/eth-store
openapi: 3.0.4
info:
  title: External Service API
  version: 1.0.3
servers:
  - url: https://beaconcha.in
    description: Production API
security:
  - ApiKeyAuth: []
paths:
  /api/v2/ethereum/eth-store:
    post:
      tags:
        - Network
      summary: ETH.STORE®
      description: >
        Returns ETH.STORE® — the staking benchmark measuring the average return
        that validators on the Ethereum network achieved over each 24-hour
        period. Each datapoint covers one beaconchain-day (a fixed window of
        `86400 ÷ seconds_per_slot ÷ slots_per_epoch` epochs, indexed by the
        number of whole days elapsed since genesis) and aggregates every
        validator that was active for the full day.


        Each datapoint reports the effective, start, and end balances, the
        deposits credited during the day, and the rewards split into
        consensus-layer (attestation, sync-committee, proposal) and
        execution-layer (priority transaction fees and MEV) components. The
        annualized rate of return (APR) is given for each layer and combined,
        together with 7-day and 31-day trailing averages that smooth out
        day-to-day variance.


        Results are returned one datapoint per day, most recent first. Free
        plans select a trailing evaluation window (`24h` for the latest
        datapoint, up to `all_time` with pagination for the full history).
        [Scale and Enterprise plans](https://beaconcha.in/pricing) can
        additionally request an arbitrary range by Unix timestamp, epoch, or
        slot. Because a datapoint is computed only after its day has finalized,
        every returned value is immutable and safe to cache indefinitely.


        ETH.STORE® is not made available for use as a benchmark, whether in
        relation to a financial instrument, financial contract or to measure the
        performance of an investment fund, or otherwise in a way that would
        require it to be administered by a benchmark administrator pursuant to
        the EU Benchmarks Regulation. Currently Bitfly does not grant any right
        to access or use ETH.STORE® for such purpose.
      operationId: GetEthStore
      requestBody:
        $ref: '#/components/requestBodies/ethStore'
      responses:
        '200':
          $ref: '#/components/responses/EthStore'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/DefaultError'
components:
  requestBodies:
    ethStore:
      x-go-name: EthStoreRequestBody
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/NamedChain'
              - $ref: '#/components/schemas/CursorPageSizeBase'
              - $ref: '#/components/schemas/namedEthStoreRange'
            required:
              - range
  responses:
    EthStore:
      description: Successful response.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/EthStore.ContainerList'
              - $ref: '#/components/schemas/PagingRangeTemplate'
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Bad request. Please check your input and try again.
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized. Please provide a valid API key.
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: >-
              endpoint not allowed for your subscription tier. upgrade your
              subscription at https://beaconcha.in/pricing.
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: The requested resource was not found.
    MethodNotAllowed:
      description: Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: 'method not allowed: GET. all public API endpoints use POST.'
    RateLimitExceeded:
      description: Rate Limit Exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate limit exceeded. Please try again later.
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: internal server error. please try again later.
    DefaultError:
      description: An unexpected error response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: An unexpected error occurred.
  schemas:
    NamedChain:
      type: object
      properties:
        chain:
          $ref: '#/components/schemas/Chain'
    CursorPageSizeBase:
      type: object
      properties:
        cursor:
          $ref: '#/components/schemas/Cursor'
        page_size:
          $ref: '#/components/schemas/PageSize'
    namedEthStoreRange:
      type: object
      properties:
        range:
          $ref: '#/components/schemas/ethStoreRangeSelector'
    EthStore.ContainerList:
      type: object
      properties:
        data:
          type: array
          description: >-
            One ETH.STORE® datapoint per beaconchain-day in the requested range,
            ordered from most recent to oldest.
          items:
            $ref: '#/components/schemas/EthStore.Data'
      required:
        - data
    PagingRangeTemplate:
      type: object
      properties:
        paging:
          $ref: '#/components/schemas/Paging'
        range:
          $ref: '#/components/schemas/ResultRange'
      required:
        - range
    Error:
      type: object
      properties:
        error:
          type: string
    Chain:
      type: string
      enum:
        - mainnet
        - hoodi
      default: mainnet
      description: The Ethereum chain to query.
    Cursor:
      type: string
      description: >-
        Cursor value for pagination. See our [pagination guide](/api/pagination)
        for more details.
      default: ''
    PageSize:
      type: integer
      description: The number of items to return per page.
      minimum: 1
      maximum: 10
      default: 10
    ethStoreRangeSelector:
      description: >
        Selects which ETH.STORE® daily datapoints to return.


        - **Evaluation window** (free): returns the most recent daily datapoints
        for a trailing period — `24h` (the latest day), `7d`, `30d`, `90d`, or
        `all_time` (the full history, paginated).

        - **Unix timestamp, epoch, or slot range** (Scale & Enterprise): returns
        every daily datapoint whose beaconchain-day overlaps the requested
        range. The range is snapped outward to whole UTC days so partial days
        are included in full.
      oneOf:
        - $ref: '#/components/schemas/NamedEvaluationWindow'
        - $ref: '#/components/schemas/timeRangeSelectorTime'
          title: 💎 Unix Timestamp
        - $ref: '#/components/schemas/timeRangeSelectorEpoch'
          title: 💎 Epoch
        - $ref: '#/components/schemas/timeRangeSelectorSlot'
          title: 💎 Slot
    EthStore.Data:
      type: object
      description: >
        A single ETH.STORE® datapoint: the network-wide average return earned by
        validators over one beaconchain-day.


        A beaconchain-day is a fixed window of `86400 ÷ seconds_per_slot ÷
        slots_per_epoch` epochs, indexed by the number of whole days elapsed
        since genesis. Each datapoint aggregates every validator that was active
        for the full day.


        A datapoint is computed only after its day has completed and finalized,
        so it is immutable and safe to cache indefinitely.
      properties:
        day:
          type: integer
          description: >-
            The beaconchain-day index — the number of whole days elapsed since
            genesis.
          example: 1024
        day_start:
          $ref: '#/components/schemas/timestamp'
          description: >-
            Unix timestamp (seconds) of the first slot of the beaconchain-day,
            inclusive.
        day_end:
          $ref: '#/components/schemas/timestamp'
          description: >-
            Unix timestamp (seconds) marking the end of the beaconchain-day,
            exclusive.
        effective_balance:
          $ref: '#/components/schemas/wei'
          description: >-
            Sum of the effective balances (in wei) of all validators included in
            the day. This is the denominator of the APR calculation.
        start_balance:
          $ref: '#/components/schemas/wei'
          description: >-
            Sum of the actual balances (in wei) of the included validators at
            the start of the day.
        end_balance:
          $ref: '#/components/schemas/wei'
          description: >-
            Sum of the actual balances (in wei) of the included validators at
            the end of the day.
        deposits:
          $ref: '#/components/schemas/wei'
          description: >-
            Sum of deposits (in wei) credited to the included validators during
            the day. Deposits are excluded from rewards so that newly added
            stake is not counted as yield.
        rewards:
          $ref: '#/components/schemas/EthStore.Rewards'
        apr:
          $ref: '#/components/schemas/EthStore.Apr'
        moving_averages:
          $ref: '#/components/schemas/EthStore.MovingAverages'
      required:
        - day
        - day_start
        - day_end
        - effective_balance
        - start_balance
        - end_balance
        - deposits
        - rewards
        - apr
        - moving_averages
    Paging:
      type: object
      properties:
        next_cursor:
          description: >-
            Cursor to the next page of results. See our [pagination
            guide](/api/pagination) for more details. If empty, there are no
            more pages to fetch.
          type: string
    ResultRange:
      type: object
      description: >
        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.
      properties:
        slot:
          $ref: '#/components/schemas/SlotRange'
        epoch:
          $ref: '#/components/schemas/EpochRange'
        timestamp:
          $ref: '#/components/schemas/TimeRange'
      required:
        - slot
        - epoch
        - timestamp
    NamedEvaluationWindow:
      type: object
      title: Fixed Window
      properties:
        evaluation_window:
          $ref: '#/components/schemas/EvaluationWindow'
      required:
        - evaluation_window
    timeRangeSelectorTime:
      type: object
      title: Unix Timestamp
      description: Range provided via Unix timestamp (inclusive)
      properties:
        timestamp:
          $ref: '#/components/schemas/timeRangeStartEnd'
      required:
        - timestamp
    timeRangeSelectorEpoch:
      type: object
      title: Epoch
      description: Range provided via epoch number
      properties:
        epoch:
          $ref: '#/components/schemas/epochRangeStartEnd'
      required:
        - epoch
    timeRangeSelectorSlot:
      type: object
      title: Slot
      description: Range provided via slot number
      properties:
        slot:
          $ref: '#/components/schemas/slotRangeStartEnd'
      required:
        - slot
    timestamp:
      type: integer
      minimum: 0
    wei:
      type: string
      description: Amount in wei (1 ETH = 10^18 wei)
      pattern: ^(0|-?[1-9][0-9]*)$
    EthStore.Rewards:
      type: object
      description: >-
        Total network validator rewards accrued during the beaconchain-day, in
        wei.
      properties:
        total:
          $ref: '#/components/schemas/wei'
          description: Combined consensus- and execution-layer rewards for the day, in wei.
        consensus_layer:
          $ref: '#/components/schemas/wei'
          description: >-
            Consensus-layer rewards (attestation, sync-committee, and proposal
            rewards) for the day, in wei.
        execution_layer:
          $ref: '#/components/schemas/wei'
          description: >-
            Execution-layer rewards (priority transaction fees and MEV) for the
            day, in wei.
      required:
        - total
        - consensus_layer
        - execution_layer
    EthStore.Apr:
      type: object
      description: >-
        Annualized rate of return (APR), expressed as a fraction where `1.0`
        equals 100%. ETH.STORE® uses simple (non-compounded) annualization — a
        beaconchain-day's rewards divided by its effective balance, scaled by
        365.
      properties:
        combined:
          type: number
          format: float
          description: >-
            Combined consensus- and execution-layer APR, as a fraction of the
            effective balance.
          example: 0.0342
        consensus_layer:
          type: number
          format: float
          description: >-
            Consensus-layer APR (attestation, sync-committee, and proposal
            rewards), as a fraction of the effective balance.
          example: 0.0271
        execution_layer:
          type: number
          format: float
          description: >-
            Execution-layer APR (priority transaction fees and MEV), as a
            fraction of the effective balance.
          example: 0.0071
      required:
        - combined
        - consensus_layer
        - execution_layer
    EthStore.MovingAverages:
      type: object
      description: >-
        Unweighted trailing averages of APR and rewards over the fixed look-back
        windows published by ETH.STORE®. Each window is inclusive of the current
        beaconchain-day and smooths out day-to-day variance from luck, proposer
        distribution, and MEV.
      properties:
        window_7d:
          $ref: '#/components/schemas/EthStore.MovingAverage'
          description: >-
            7-day trailing average — this beaconchain-day and the 6 preceding
            days.
        window_31d:
          $ref: '#/components/schemas/EthStore.MovingAverage'
          description: >-
            31-day trailing average — this beaconchain-day and the 30 preceding
            days.
      required:
        - window_7d
        - window_31d
    SlotRange:
      type: object
      properties:
        start:
          $ref: '#/components/schemas/Slot'
        end:
          $ref: '#/components/schemas/Slot'
      required:
        - start
        - end
    EpochRange:
      type: object
      properties:
        start:
          $ref: '#/components/schemas/Epoch'
        end:
          $ref: '#/components/schemas/Epoch'
      required:
        - start
        - end
    TimeRange:
      type: object
      properties:
        start:
          $ref: '#/components/schemas/timestamp'
        end:
          $ref: '#/components/schemas/timestamp'
      required:
        - start
        - end
    EvaluationWindow:
      type: string
      enum:
        - 24h
        - 7d
        - 30d
        - 90d
        - all_time
      description: >
        The evaluation window for aggregating metrics. All windows except
        `all_time` are **rolling periods**—continuously moving time windows that
        always end at the current epoch.


        Rolling windows update every epoch (~6.4 minutes), so the data always
        reflects the most recent period. For example, `30d` returns rewards from
        exactly 30 days ago until now, not a fixed calendar month.


        - `24h`: Last 24 hours (rolling)

        - `7d`: Last 7 days (rolling)

        - `30d`: Last 30 days (rolling)

        - `90d`: Last 90 days (rolling)

        - `all_time`: Since validator activation (not rolling)
    timeRangeStartEnd:
      type: object
      description: Unix timestamp range (inclusive)
      properties:
        start:
          $ref: '#/components/schemas/timestamp'
          example: 0
          description: Start Unix Timestamp
        end:
          $ref: '#/components/schemas/timestamp'
          example: 2147483647
          description: End Unix Timestamp
      required:
        - start
        - end
    epochRangeStartEnd:
      type: object
      description: Epoch range (inclusive)
      properties:
        start:
          $ref: '#/components/schemas/EpochSelector'
          description: Start Epoch
        end:
          $ref: '#/components/schemas/EpochSelector'
          description: End Epoch
      required:
        - start
        - end
    slotRangeStartEnd:
      type: object
      description: Slot range (inclusive)
      properties:
        start:
          $ref: '#/components/schemas/SlotSelector'
          description: Start Slot
        end:
          $ref: '#/components/schemas/SlotSelector'
          description: End Slot
    EthStore.MovingAverage:
      type: object
      description: >
        A trailing average over a fixed look-back window, inclusive of the
        current beaconchain-day.


        Each figure is the unweighted arithmetic mean of the daily values in the
        window — every day counts once, regardless of how much stake was active
        that day. This is deliberate: each beaconchain-day covers a different
        set of validators (those active for the whole day, excluding
        consolidation sources and targets), so the days are not slices of one
        continuously held portfolio and cannot be pooled into a single return.
      properties:
        apr:
          $ref: '#/components/schemas/EthStore.Apr'
          description: >-
            Mean of the daily APRs over the look-back window, for the consensus
            layer, execution layer, and combined.
        rewards:
          type: object
          description: >-
            Mean daily network rewards over the look-back window, in wei. No
            combined total is provided — sum the layers if needed.
          properties:
            consensus_layer:
              $ref: '#/components/schemas/wei'
              description: Mean daily consensus-layer rewards over the window, in wei.
            execution_layer:
              $ref: '#/components/schemas/wei'
              description: Mean daily execution-layer rewards over the window, in wei.
          required:
            - consensus_layer
            - execution_layer
      required:
        - apr
        - rewards
    Slot:
      type: integer
      minimum: 0
      description: Slot by number.
    Epoch:
      type: integer
      minimum: 0
    EpochSelector:
      description: |
        Specify an epoch using one of the following methods.
        - epoch number
        - View: "latest", "finalized" 
      oneOf:
        - $ref: '#/components/schemas/EpochByNumber'
        - $ref: '#/components/schemas/EpochByChainView'
    SlotSelector:
      description: |
        Specify a slot using one of the following methods.
        - Slot number
        - Consensus layer block root
        - View: "latest", "finalized" 
      oneOf:
        - $ref: '#/components/schemas/SlotByNumber'
        - $ref: '#/components/schemas/SlotByConsensusLayerBlockRoot'
        - $ref: '#/components/schemas/SlotByChainView'
      default: latest
    EpochByNumber:
      title: Number
      type: object
      properties:
        number:
          $ref: '#/components/schemas/Epoch'
      required:
        - number
    EpochByChainView:
      title: View
      type: object
      properties:
        view:
          allOf:
            - $ref: '#/components/schemas/ChainView'
          description: >
            - "latest": Refers to the most recent epoch, which may not yet be
            finalized.

            - "finalized": Refers to the latest epoch that has been finalized
            and is not subject to change.
      required:
        - view
    SlotByNumber:
      title: Number
      type: object
      properties:
        number:
          $ref: '#/components/schemas/Slot'
      required:
        - number
    SlotByConsensusLayerBlockRoot:
      title: Root
      type: object
      properties:
        root:
          $ref: '#/components/schemas/ConsensusLayerBlockRoot'
      required:
        - root
    SlotByChainView:
      title: View
      type: object
      properties:
        view:
          allOf:
            - $ref: '#/components/schemas/ChainView'
          description: >
            - "latest": Refers to the most recent slot, which may be subject to
            reorganization.

            - "finalized": Refers to the latest slot that has been finalized and
            is not subject to change.
      required:
        - view
    ChainView:
      type: string
      enum:
        - latest
        - finalized
      description: >
        - "latest": Refers to the most recent block, which may be subject to
        reorganization.

        - "finalized": Refers to the latest block that has been finalized and is
        not subject to change.
    ConsensusLayerBlockRoot:
      type: string
      pattern: ^0x[a-fA-F0-9]{64}$
      description: A 32-byte block root represented as a hex string with 0x prefix.
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Authorization header with value: Bearer YOUR_TOKEN. Refer to the [API
        Keys](/api/overview#api-keys) section to create your API key.

````