---
title: "Attestation Slots"
method: POST
path: "/api/v2/ethereum/validators/attestation-slots"
tags: ["Validator"]
---

# Attestation Slots

`POST /api/v2/ethereum/validators/attestation-slots`

Returns all slot numbers where the specified validators were assigned attestation duties, grouped by slot.
Each result shows a slot number and the count of your validators that attested in that slot. This is useful for tracking when your validators attested and identifying slots where they may have missed attestations.
For example, querying one epoch with 200 validators returns up to 32 results (one per slot in the epoch) rather than 200 individual validator-slot pairs.

Combine this endpoint with others for deeper insights:
- Consensus slot information:   
  [v2/ethereum/slot](/api-reference/ethereum/slot/overview)

This endpoint serves as a high-level overview, while other endpoints provide detailed data for specific slots or validators. Results can be filtered by a time range.

Note: This endpoint supports **only finalized** data at this time.

## Request body

- ValidatorChainOptionalStartEndCursorPageSize
  - `chain` 'mainnet' | 'hoodi' — The Ethereum chain to query.
  - `cursor` string — Cursor value for pagination. See our [pagination guide](/api/pagination) for more details.
  - `page_size` integer — The number of items to return per page.
  - `validator` union, required — 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_entity` for 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.
    - ValidatorsByIdentifiers
      - `validator_identifiers` ValidatorIndexPublicKey[], required — An array containing either validator indices or public keys. Index and public key can be mixed in the same array. Subscribed users (Hobbyist, Business, and Scale tiers) can include up to 100 entries; free trial users and legacy subscription users (Sapphire, Emerald, Diamond) are limited to 20.
        - union
          - integer — Validator Index
          - string — Public key of a validator
    - ValidatorsByDashboard
      - `dashboard_id` integer, required — beaconcha.in dashboard ID. You can find your dashboard ID in the URL of your dashboard page on beaconcha.in (e.g., https://beaconcha.in/dashboard/12345).
      - `group_id` integer, nullable — Optional beaconcha.in dashboard group ID. If no group ID is provided, all validators in the dashboard are considered.
    - ValidatorsByDeposit
      - `deposit_address` string, required — A standard Ethereum address (20-byte hex string with 0x prefix).
    - ValidatorsByWithdrawal
      - `withdrawal` string, required — Either an execution layer address (20-byte hex string with 0x prefix) or a full 32-byte withdrawal credential.
    - ValidatorsByEntity — Select validators by their assigned entity (e.g., staking provider) and optionally a sub-entity. Entity and sub-entity names are matched exactly and are case-sensitive.
      - `entity` string, required — The name of the entity to filter validators by (e.g., "Lido", "Coinbase"). Matching is case-sensitive; use the exact name as returned by the entities overview endpoint.
      - `sub_entity` string — Optional sub-entity name to further filter validators within the entity. Matching is case-sensitive; use the exact name as returned by the sub-entities overview endpoint.
  - `range` union — Specify a time range using either Unix timestamps or epoch numbers. If left null, the API will query the entire available history of the selected validators.
    - TimeRangeSelectorTime — Range provided via Unix timestamp (inclusive)
      - `timestamp` TimeRangeStartEnd, required — Unix timestamp range (inclusive)
        - `start` integer, required
        - `end` integer, required
    - TimeRangeSelectorEpoch — Range provided via epoch number
      - `epoch` EpochRangeStartEnd, required — Epoch range (inclusive)
        - `start` union, required — Specify an epoch using one of the following methods. - epoch number - View: "latest", "finalized"
          - EpochByNumber
            - `number` integer, required
          - EpochByChainView
            - `view` 'latest' | 'finalized', required — - "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.
        - `end` union, required — Specify an epoch using one of the following methods. - epoch number - View: "latest", "finalized"
          - EpochByNumber
            - `number` integer, required
          - EpochByChainView
            - `view` 'latest' | 'finalized', required — - "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.
    - TimeRangeSelectorSlot — Range provided via slot number
      - `slot` SlotRangeStartEnd, required — Slot range (inclusive)
        - `start` union — Specify a slot using one of the following methods. - Slot number - Consensus layer block root - View: "latest", "finalized"
          - SlotByNumber
            - `number` integer, required — Slot by number.
          - SlotByConsensusLayerBlockRoot
            - `root` string, required — A 32-byte block root represented as a hex string with 0x prefix.
          - SlotByChainView
            - `view` 'latest' | 'finalized', required — - "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.
        - `end` union — Specify a slot using one of the following methods. - Slot number - Consensus layer block root - View: "latest", "finalized"
          - SlotByNumber
            - `number` integer, required — Slot by number.
          - SlotByConsensusLayerBlockRoot
            - `root` string, required — A 32-byte block root represented as a hex string with 0x prefix.
          - SlotByChainView
            - `view` 'latest' | 'finalized', required — - "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.

## Response `200`

Successful response.

- object — Response containing detailed attestation information of the validators.
  - `data` ValidatorAttestationsData[], required
    - `slot` integer, required — Slot by number.
    - `assigned_validator_count` integer, required — The count of unique validators from your selected set that were assigned attestation duties for this specific slot.
    - `finality` 'not_finalized' | 'finalized', required — 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.
  - `paging` Paging
    - `next_cursor` string — 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.
  - `range` ResultRange, required — The range of data covered by the results, specified in slots, epochs, and Unix timestamps.
    - `slot` SlotRange, required
      - `start` integer, required — Slot by number.
      - `end` integer, required — Slot by number.
    - `epoch` EpochRange, required
      - `start` integer, required
      - `end` integer, required
    - `timestamp` TimeRange, required
      - `start` integer, required
      - `end` integer, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `429` — Rate Limit Exceeded
- `500` — Internal Server Error
- `default` — An unexpected error response.

---

[API](https://skmtc.dev/beaconcha/apis/external-service-api.md) · [All operations](https://skmtc.dev/beaconcha/apis/external-service-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/beaconcha/external-service-api/revisions/ad26ad970b4e/schema)
