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

# 👀 Explorer State

> Returns the explorer's current view of the Ethereum chain, including network health, validator counts, balances, and finality status.

Unlike most API endpoints where processing lag is invisible, this endpoint explicitly exposes how far behind the explorer is relative to the actual chain head (see `data_freshness`). Use it to determine whether the data you're querying from other endpoints is sufficiently up-to-date for your use case.




## OpenAPI

````yaml /v3/bundled.yaml post /api/v2/ethereum/state
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/state:
    post:
      tags:
        - Network
      summary: 👀 Explorer State
      description: >
        Returns the explorer's current view of the Ethereum chain, including
        network health, validator counts, balances, and finality status.


        Unlike most API endpoints where processing lag is invisible, this
        endpoint explicitly exposes how far behind the explorer is relative to
        the actual chain head (see `data_freshness`). Use it to determine
        whether the data you're querying from other endpoints is sufficiently
        up-to-date for your use case.
      operationId: GetExplorerState
      requestBody:
        $ref: '#/components/requestBodies/JustChain'
      responses:
        '200':
          $ref: '#/components/responses/EthereumState'
        '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:
    JustChain:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NamedChain'
  responses:
    EthereumState:
      description: Successful response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EthereumState.Container'
    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'
    EthereumState.Container:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/EthereumState.Data'
      description: Response containing the current state of the chain.
      required:
        - data
    Error:
      type: object
      properties:
        error:
          type: string
    Chain:
      type: string
      enum:
        - mainnet
        - hoodi
      default: mainnet
      description: The Ethereum chain to query.
    EthereumState.Data:
      type: object
      description: >
        The explorer's current view of the Ethereum chain, including network
        health, finality status, and chain progression.


        This is the explorer's processed view, which may lag slightly behind the
        actual chain head.

        See `data_freshness` to determine how up-to-date this information is
        relative to the real chain state.
      properties:
        chain_health:
          $ref: '#/components/schemas/StateChainHealth'
        chain_view:
          $ref: '#/components/schemas/StateChainView'
        data_freshness:
          $ref: '#/components/schemas/StateFreshness'
      required:
        - chain_health
        - chain_view
        - data_freshness
    StateChainHealth:
      type: object
      description: >
        Overall health status of the beacon chain network, based on finality and
        sync status.
      properties:
        is_finalizing:
          type: boolean
          description: >
            Indicates whether the beacon chain is currently finalizing, based on
            the age of the last finalized epoch.


            If false, the chain is considered non-finalizing because the last
            finalized epoch is more than 3 epochs behind the head epoch (normal
            finality takes ~2 epochs, with 1 extra epoch of tolerance for
            indexing/processing delays). This may indicate issues with validator
            participation or other network problems. 


            Users should exercise caution in such cases, as recent unfinalized
            blocks and state changes may be subject to reorganization.
            Already-finalized data remains reliable.
      required:
        - is_finalizing
    StateChainView:
      type: object
      description: >
        The beacon chain's current progression, given as three reference points
        — the `head`, `justified`, and `finalized` checkpoints — together with
        the active sync committee period.


        Each reference point carries a `consensus_reference` (its
        consensus-layer `slot` and `block_root`) and an `execution_reference`
        (the execution-layer block number and hash).


        A slot may be missed (no block proposed) while the chain still advances
        in time. When the referenced slot was missed, its `block_root` is
        `null`, but `slot` still identifies that point in the chain's timeline.
      properties:
        head:
          $ref: '#/components/schemas/ChainState'
          description: |
            The current head of the beacon chain. 
        justified:
          $ref: '#/components/schemas/ChainState'
          description: >
            The current justified state of the beacon chain.


            In Ethereum Proof-of-Stake, a "justified" slot is the most recent
            slot that has received enough attestations from validators to be
            considered safe, but not yet finalized. 

            Justification is an intermediate step before finality, providing a
            strong indication that the chain is progressing securely, but
            allowing for possible reorganization until finalization occurs.
        finalized:
          $ref: '#/components/schemas/ChainState'
          description: >
            The current finalized checkpoint of the beacon chain.


            In Ethereum Proof-of-Stake, finalization applies to a checkpoint:
            once finalized, it cannot be changed or reorganized without slashing
            at least one-third of all validators, providing strong economic
            security guarantees.


            `block_root`/`slot` reference the checkpoint block that provides
            this finality guarantee (the block at the first slot of the
            checkpoint epoch, or the most recent block before it if that slot
            was missed).
        sync_committee_period:
          $ref: '#/components/schemas/StateChainViewSyncPeriod'
      required:
        - head
        - justified
        - finalized
        - sync_committee_period
    StateFreshness:
      type: object
      description: >
        Provides transparency into how closely our exported view of the beacon
        chain tracks the actual "wall-clock" chain head on the consensus layer.


        This metric reflects the number of slots by which our processed and
        queryable data may lag behind the absolute latest state of the chain,
        due to necessary processing and indexing delays. 

        For most customers, this slight delay is acceptable and does not impact
        typical use cases. However, we offer this information openly so that
        applications with critical requirements for real-time data can assess
        the freshness of our responses.


        By exposing data freshness, we aim to be transparent about any
        processing delays and empower users to make informed decisions about
        data reliability and timeliness.
      properties:
        slot_lag:
          type: integer
          description: >-
            Number of slots our exported beacon chain view is behind the actual
            chain head. Lag is measured in slot increments (each slot is 12
            seconds), with a small 2-second margin allowed for network and
            processing overhead.
        finality_slot_lag:
          type: integer
          description: >-
            Number of slots our exported beacon chain view is behind the actual
            finalized state of the chain. This reflects the lag in processing
            and indexing finalized data, which may be slightly higher than the
            head lag due to additional finality processing requirements.
        slot:
          $ref: '#/components/schemas/Slot'
          description: >-
            The current slot number of the actual chain head.`slot_lag` is
            relative to this slot, so the latest slot included in our view would
            be `slot - slot_lag`.
        finality_slot:
          $ref: '#/components/schemas/Slot'
          description: >-
            The current slot number of the actual finalized state of the chain.
            `finality_slot_lag` is relative to this slot, so the latest
            finalized slot included in our view would be `finality_slot -
            finality_slot_lag`.
      required:
        - slot_lag
    ChainState:
      type: object
      properties:
        consensus_reference:
          $ref: '#/components/schemas/StateConsensusReference'
        execution_reference:
          $ref: '#/components/schemas/ExecutionLayerReference'
      required:
        - consensus_reference
        - execution_reference
    StateChainViewSyncPeriod:
      type: object
      description: >
        Provides information about the current sync committee period on the
        beacon chain.


        This object allows clients to determine the current sync committee
        period and the exact time, slot, and epoch boundaries for that period.
      properties:
        period:
          $ref: '#/components/schemas/SyncCommitteePeriod'
          description: >-
            The current sync committee period number. Each period spans 256
            epochs (approximately 27.3 hours).
        range:
          $ref: '#/components/schemas/ResultRange'
          description: >-
            The epoch, slot, and timestamp range covered by this sync committee
            period.
      required:
        - period
        - range
    Slot:
      type: integer
      minimum: 0
      description: Slot by number.
    StateConsensusReference:
      type: object
      description: >
        Reference to a consensus layer checkpoint (head, justified, or
        finalized).
      nullable: true
      properties:
        slot:
          $ref: '#/components/schemas/Slot'
        block_root:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ConsensusLayerBlockRoot'
      required:
        - slot
    ExecutionLayerReference:
      type: object
      description: |
        Reference to an execution layer block if one exists for the given slot.
        This will be null for missed slots.
      properties:
        block:
          $ref: '#/components/schemas/Block'
        hash:
          $ref: '#/components/schemas/ExecutionLayerBlockHash'
      required:
        - block
        - hash
    SyncCommitteePeriod:
      description: >
        The sync committee period number.


        Each sync committee period spans 256 epochs (approximately 27.3 hours
        with 6.4 minute epochs).

        The first sync committee period (period 290 on Ethereum Mainnet) started
        at the Altair hard fork on Oct 27, 2021, 10:56:23am UTC (epoch 74240).
      type: integer
      minimum: 0
    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
    ConsensusLayerBlockRoot:
      type: string
      pattern: ^0x[a-fA-F0-9]{64}$
      description: A 32-byte block root represented as a hex string with 0x prefix.
    Block:
      type: integer
      minimum: 0
      description: Block by number.
    ExecutionLayerBlockHash:
      type: string
      pattern: ^0x[a-fA-F0-9]{64}$
      description: A 32-byte block hash represented as a hex string with 0x prefix.
    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
    Epoch:
      type: integer
      minimum: 0
    timestamp:
      type: integer
      minimum: 0
  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.

````