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

# Network Performance

> Returns aggregated performance metrics for the entire network in the given time range.

**Use case guide:** [Entity benchmarking](/use-cases/entity-benchmarking-overview) uses this endpoint as the network baseline for public and private validator-set comparisons.

Must provide either start + end times or epochs

**Coming Soon:** Support for querying arbitrary time ranges using Unix timestamps, epochs, or slots — exclusively for [Scale and Enterprise plans](https://beaconcha.in/pricing).




## OpenAPI

````yaml /v3/bundled.yaml post /api/v2/ethereum/performance-aggregate
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/performance-aggregate:
    post:
      tags:
        - Network
      summary: Network Performance
      description: >
        Returns aggregated performance metrics for the entire network in the
        given time range.


        **Use case guide:** [Entity
        benchmarking](/use-cases/entity-benchmarking-overview) uses this
        endpoint as the network baseline for public and private validator-set
        comparisons.


        Must provide either start + end times or epochs


        **Coming Soon:** Support for querying arbitrary time ranges using Unix
        timestamps, epochs, or slots — exclusively for [Scale and Enterprise
        plans](https://beaconcha.in/pricing).
      operationId: GetNetworkPerformanceAggregate
      requestBody:
        $ref: '#/components/requestBodies/aggregateChainStartEnd'
      responses:
        '200':
          $ref: '#/components/responses/PerformanceSummary'
        '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:
    aggregateChainStartEnd:
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/NamedChain'
              - $ref: '#/components/schemas/namedTimeRangeSelector'
            required:
              - range
  responses:
    PerformanceSummary:
      description: Successful response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PerformanceSummary.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'
    namedTimeRangeSelector:
      type: object
      properties:
        range:
          $ref: '#/components/schemas/timeRangeSelector'
    PerformanceSummary.Container:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/PerformanceSummary.Data'
        range:
          $ref: '#/components/schemas/ResultRange'
      description: >-
        Response containing performance summary information of the entire
        network.
      required:
        - data
        - range
    Error:
      type: object
      properties:
        error:
          type: string
    Chain:
      type: string
      enum:
        - mainnet
        - hoodi
      default: mainnet
      description: The Ethereum chain to query.
    timeRangeSelector:
      description: >
        Specify a date range to receive aggregated data for that period — ideal
        for use cases like daily income tracking for income reporting.


        Support for querying arbitrary time ranges using Unix timestamps,
        epochs, or slots will be **coming soon**, exclusively for Scale and
        Enterprise plans (https://beaconcha.in/pricing).
      oneOf:
        - $ref: '#/components/schemas/NamedEvaluationWindow'
        - $ref: '#/components/schemas/timeRangeSelectorTime'
          title: 💎 Unix Timestamp
        - $ref: '#/components/schemas/timeRangeSelectorEpoch'
          title: 💎 Epoch
        - $ref: '#/components/schemas/timeRangeSelectorSlot'
          title: 💎 Slot
    PerformanceSummary.Data:
      type: object
      properties:
        beaconscore:
          $ref: '#/components/schemas/performanceBeaconscore'
        duties:
          $ref: '#/components/schemas/PerformanceDuties.Duties'
        finality:
          $ref: '#/components/schemas/FinalityParams'
      required:
        - beaconscore
        - duties
        - finality
    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
    performanceBeaconscore:
      type: object
      description: >-
        BeaconScore efficiency metrics for the selected scope and evaluation
        window. Values are ratios from 0 to 1, where 1 represents perfect duty
        performance.
      properties:
        total:
          allOf:
            - $ref: '#/components/schemas/percent'
          description: >-
            Overall BeaconScore combining attestation, proposal, and sync
            committee performance.
          nullable: true
        attestation:
          allOf:
            - $ref: '#/components/schemas/percent'
          description: BeaconScore component for attestation performance.
          nullable: true
        proposal:
          allOf:
            - $ref: '#/components/schemas/percent'
          description: >-
            BeaconScore component for proposal performance, normalized to reduce
            the effect of proposal luck.
          nullable: true
        sync_committee:
          allOf:
            - $ref: '#/components/schemas/percent'
          description: BeaconScore component for sync committee performance.
          nullable: true
    PerformanceDuties.Duties:
      type: object
      properties:
        attestation:
          $ref: '#/components/schemas/PerformanceDuties.Attestation'
        sync_committee:
          $ref: '#/components/schemas/ValidatorSyncCommitteeDutyParticipation'
        proposal:
          $ref: '#/components/schemas/PerformanceDuties.Proposal'
      required:
        - attestation
        - sync_committee
        - proposal
    FinalityParams:
      type: string
      description: |
        Indicates the finality status of the data provided. 
          - Finalized data cannot be changed without slashing at least one-third of all validators, providing strong economic guarantees.
          - Data marked as not_finalized does not have this guarantee and may still change.
      enum:
        - not_finalized
        - finalized
    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
    percent:
      type: number
      format: float
      minimum: 0
      maximum: 1
    PerformanceDuties.Attestation:
      type: object
      properties:
        included:
          type: integer
          description: >
            Number of times the validator's attestation was included on-chain.


            This count includes all attestations submitted by the validator,
            even if they were included too late to earn a reward (such late
            attestations are still considered "missed" for reward purposes).

            "Included" reflects every attestation that made it on-chain,
            regardless of timeliness or eligibility for rewards.


            This metric indicates whether your validator is actively submitting
            attestations to the network.
        assigned:
          type: integer
          description: >
            Number of times the validator was assigned an attestation duty.

            This represents the total opportunities to attest, regardless of
            whether the validator fulfilled the duty.
        correct_head:
          description: >
            Number of times the validator attested with the correct head block.

            Correct references are necessary to be rewarded by the chain but
            incorrect references result in no reward or a penalty.
          type: integer
        correct_source:
          description: >
            Number of times the validator attested with the correct source
            block.

            Correct references are necessary to be rewarded by the chain but
            incorrect references result in no reward or a penalty.
          type: integer
        correct_target:
          description: >
            Number of times the validator attested with the correct target
            block.

            Correct references are necessary to be rewarded by the chain but
            incorrect references result in no reward or a penalty.
          type: integer
        valuable_correct_head:
          description: >
            Counts the number of correct head attestations that were included
            early enough to receive a reward.


            Attestations that were included too late to earn a reward (and are
            treated as missed for reward purposes) are not counted as valuable.
          type: integer
        valuable_correct_source:
          description: >
            Counts the number of correct source attestations that were included
            early enough to receive a reward.


            Attestations that were included too late to earn a reward (and are
            treated as missed for reward purposes) are not counted as valuable.
          type: integer
        valuable_correct_target:
          description: >
            Counts the number of correct target attestations that were included
            early enough to receive a reward.


            Attestations that were included too late to earn a reward (and are
            treated as missed for reward purposes) are not counted as valuable.
          type: integer
        avg_inclusion_delay:
          description: >
            Average inclusion delay measures how quickly a validator's
            attestations are included in the chain, expressed in slots. 

            Lower values indicate more timely inclusion and better performance.


            An ideal value of 0 means every attestation was included at the
            earliest possible opportunity—one slot after it was assigned to you.


            Note: Do not confuse this metric with the `reward.inclusion_delay`
            field found in the rewards endpoint, which refers to a specific
            reward (measured in gwei) that was only applicable prior to the
            Altair hardfork. 
          type: number
          format: float
          example: 1.2
          minimum: 0
          maximum: 63
        avg_inclusion_delay_excluding_missed_slots:
          description: >
            This is your average inclusion delay, excluding any missed blocks.


            - If `avg_inclusion_delay_excluding_missed_slots` is close to zero
            but avg_inclusion_delay is higher, this indicates that most of your
            attestations are included promptly, and any lost rewards are
            primarily due to missed blocks on the network (outside your
            control). 

            - If both values are large, it suggests your validator is
            experiencing delays in submitting attestations, likely due to issues
            with your validator's setup or connectivity.             
              
            Note: avg_inclusion_delay is used for reward calculations.
            Therefore, an `avg_inclusion_delay_excluding_missed_slots` of zero
            does not mean there were no missed rewards.


            The `avg_inclusion_delay_excluding_missed_slots` is always less than
            or equal to your actual `avg_inclusion_delay`.
          type: number
          format: float
          example: 1.2
          minimum: 0
          maximum: 63
        missed:
          type: integer
          description: >
            Number of times the validator missed voting on an attestation duty,
            including missed blocks on the network.
      required:
        - included
        - assigned
        - correct_head
        - correct_source
        - correct_target
        - valuable_correct_head
        - valuable_correct_source
        - valuable_correct_target
        - avg_inclusion_delay
        - avg_inclusion_delay_excluding_missed_slots
        - missed
    ValidatorSyncCommitteeDutyParticipation:
      type: object
      properties:
        successful:
          type: integer
          description: >-
            Number of times the validator successfully participated in the sync
            committee.
          minimum: 0
        assigned:
          type: integer
          description: >-
            Number of times the validator has been assigned to participate in
            the sync committee, excluding missed slots.
          minimum: 0
        missed:
          type: integer
          description: >
            Number of times the validator missed participation in the sync
            committee, excluding missed network slots.


            The `missed` is always less than or equal to your actual
            `missed_including_missed_slots`.
          minimum: 0
        missed_including_missed_slots:
          type: integer
          description: >
            Number of times the validator missed participation in the sync
            committee, including missed network slots.


            Missed network slots are beyond your control. If this value is
            significantly higher than `missed`, it indicates that your validator
            is generally performing well, and most missed rewards are due to
            network issues rather than validator faults. 


            However, if both `missed` and `missed_including_missed_slots` are
            high, it suggests potential issues with your validator's setup or
            connectivity, leading to missed sync committee messages.
          minimum: 0
        scheduled:
          type: integer
          description: >-
            Number of scheduled sync committee votes for active and upcoming
            sync committees.
          minimum: 0
      required:
        - successful
        - assigned
        - missed
        - missed_including_missed_slots
        - scheduled
    PerformanceDuties.Proposal:
      type: object
      properties:
        successful:
          type: integer
          description: Number of times the validator successfully proposed a block.
        assigned:
          type: integer
          description: Number of times the validator was assigned to propose a block.
        missed:
          type: integer
          description: >-
            Number of times the validator either missed a scheduled block
            proposal or had their proposed block orphaned
        included_slashings:
          type: integer
          description: >
            Number of slashing proofs included in blocks proposed by the
            validator.

            A slashing proof provides cryptographic evidence that one or more
            validators proposing two different blocks for the same slot.
      required:
        - successful
        - assigned
        - missed
        - included_slashings
    Slot:
      type: integer
      minimum: 0
      description: Slot by number.
    Epoch:
      type: integer
      minimum: 0
    timestamp:
      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.

````