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

# BLS-to-execution credential changes

> Retrieve on-chain BLS-to-execution credential change messages (EIP-4881 style) for one or more validators. Each item includes the slot and epoch of inclusion, the canonical block root, the validator’s BLS pubkey and signature over the change message, the original 0x00 withdrawal credentials, and the resulting 0x01 credentials (derived from the execution address).
Provide validator identifiers as a comma-separated list in the path. The service accepts validator indices and 0x-prefixed BLS pubkeys (up to the server-enforced limit; default 100). If a provided pubkey does not resolve to a known validator index, the request fails with HTTP 400.



## OpenAPI

````yaml /api/v1/bundled.yaml get /api/v1/validator/{indexOrPubkey}/blsChange
openapi: 3.0.4
info:
  title: beaconcha.in API Documentation
  license:
    name: GPL-3.0
    url: https://www.gnu.org/licenses/gpl-3.0.en.html
  description: >-
    > ⚠️ No new features or endpoints will be added to V1. We recommend the [V2
    API](/api/overview) for all new projects. See the [migration
    guide](/api/v1-to-v2-migration).

    ## Introduction

    **Advanced and reliable API for accessing comprehensive Ethereum blockchain
    data.**


    - **Free Usage Policy:** The API is free to use under a fair use policy,
    with rate limits of 10 requests per minute per IP.

    - **Caching:** All responses are cached for 1 minute.

    - **Higher Usage Plans:** For higher usage plans, visit:
    [https://beaconcha.in/pricing](https://beaconcha.in/pricing). An API key is
    required to use these plans.


    ### API Key Usage

    API keys can be obtained at
    [/user/settings](https://beaconcha.in/user/settings) and must be included in
    requests either as a query string parameter or in the request header.


    #### Example: Query String Parameter

    ```bash

    curl https://beaconcha.in/api/v1/slot/1?apikey=<your_key>

    ```


    #### Example: Request Header

    ```bash

    curl -H 'apikey: <your_key>' https://beaconcha.in/api/v1/slot/1

    ```
  contact: {}
  version: '1.1'
servers:
  - url: https://beaconcha.in
    description: Ethereum mainnet
  - url: https://hoodi.beaconcha.in
    description: Hoodi Ethereum testnet
security:
  - ApiKeyAuthQuery: []
  - ApiKeyAuthHeader: []
tags:
  - name: Epoch
    description: Data related to consensus layer epochs
  - name: Slots
    description: Data related to consensus layer slots
  - name: Validators
    description: Data related to consensus layer validators
  - name: Rewards
    description: Data related to validator rewards
  - name: Sync Committees
    description: Data related to sync committees
  - name: Rocketpool
    description: Data related to the rocketpool protocol
  - name: ETH.Store®
    description: Data related to the ETH.Store® metric
  - name: Validator deposits
    description: Data related to execution layer validator deposits
  - name: Blocks
    description: Data related to execution layer blocks
  - name: Gas
    description: Data related to gas prices
  - name: Address
    description: Data related to ethereum addresses
  - name: Network
    description: Network data
  - name: Misc
    description: Miscellaneous data
  - name: User
    description: User data
  - name: Machine Metrics
    description: Submit machine, beacon-node, and validator-client monitoring metrics
paths:
  /api/v1/validator/{indexOrPubkey}/blsChange:
    get:
      tags:
        - Validators
      summary: BLS-to-execution credential changes
      description: >-
        Retrieve on-chain BLS-to-execution credential change messages (EIP-4881
        style) for one or more validators. Each item includes the slot and epoch
        of inclusion, the canonical block root, the validator’s BLS pubkey and
        signature over the change message, the original 0x00 withdrawal
        credentials, and the resulting 0x01 credentials (derived from the
        execution address).

        Provide validator identifiers as a comma-separated list in the path. The
        service accepts validator indices and 0x-prefixed BLS pubkeys (up to the
        server-enforced limit; default 100). If a provided pubkey does not
        resolve to a known validator index, the request fails with HTTP 400.
      operationId: listValidatorBlsChanges
      parameters:
        - name: indexOrPubkey
          in: path
          description: >-
            Comma-separated validator indices and/or public keys (maximum 100
            items by default).
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/primitives.indicesOrPubkeys'
      responses:
        '200':
          description: >-
            Matching BLS credential changes were retrieved successfully. The
            `data` array contains one entry per observed change event.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/types.ApiResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: >-
                            #/components/schemas/types.ApiValidatorBlsChangeResponse
        '400':
          description: >-
            The request is invalid (for example, malformed identifiers, too many
            identifiers, unresolved pubkeys, or database error).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.ApiErrorResponse'
              examples:
                invalidParam:
                  summary: Invalid validator identifier
                  value:
                    status: 'ERROR: invalid validator-parameter'
                    data: null
                tooMany:
                  summary: Too many identifiers
                  value:
                    status: 'ERROR: only a maximum of 100 query parameters are allowed'
                    data: null
                unresolvedPubkeys:
                  summary: Pubkey did not resolve to an index
                  value:
                    status: >-
                      ERROR: invalid validator argument, pubkey(s) did not
                      resolve to a validator index
                    data: null
                empty:
                  summary: No or invalid indices provided
                  value:
                    status: 'ERROR: no or invalid validator indicies provided'
                    data: null
                dbError:
                  summary: Database retrieval error
                  value:
                    status: 'ERROR: could not retrieve db results'
                    data: null
        '500':
          description: An unexpected server error occurred while processing your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.ApiErrorResponse'
              examples:
                serverError:
                  summary: Internal error
                  value:
                    status: 'ERROR: internal server error'
                    data: null
components:
  schemas:
    primitives.indicesOrPubkeys:
      type: string
      description: >
        Comma-separated list (no spaces) of validator identifiers. Each
        identifier must be either:

        - A validator index as a base-10 integer (for example, 652648)

        - A BLS public key as a 96-hex-character string with or without the 0x
        prefix (case-insensitive)


        Resolution and limits:

        - The server resolves public keys to validator indices before querying
        data.

        - The total number of identifiers must not exceed the server-enforced
        limit (default 100).

        - Identifiers that cannot be parsed or resolved result in HTTP 400.
      example: 1,2,3
    types.ApiResponse:
      type: object
      description: Standard success envelope used by all API endpoints.
      properties:
        status:
          type: string
          description: >-
            HTTP-independent status of the API operation. For successful
            responses this is always "OK".
          enum:
            - OK
        data:
          description: Response payload specific to the endpoint.
          nullable: true
          x-omitempty: true
    types.ApiValidatorBlsChangeResponse:
      type: object
      description: >-
        On-chain record of a validator’s BLS-to-execution credential change.
        Includes consensus-layer inclusion metadata, the validator’s BLS pubkey
        and signature over the change message, the original 0x00 withdrawal
        credentials, and the new 0x01 credentials derived from the execution
        address.
      properties:
        epoch:
          type: integer
          description: >-
            Epoch containing the block that included the credential change (>=
            0).
          minimum: 0
          example: 200820
        slot:
          type: integer
          description: >-
            Slot number of the beacon block that included the credential change
            (>= 0).
          minimum: 0
          example: 6426248
        blockroot:
          type: string
          description: 0x-prefixed 32-byte root of the including beacon block.
          pattern: ^0x[a-fA-F0-9]{64}$
          example: '0x387e15e80bfce46c2217cd149ec0a03a5f82ce393de12936ca243e076517148b'
        validatorindex:
          type: integer
          description: Index of the validator that submitted the credential change (>= 0).
          minimum: 0
          example: 20
        bls_pubkey:
          type: string
          description: >-
            BLS12-381 validator public key (48 bytes; 0x-prefixed hex with 96
            hex characters).
          pattern: ^0x[a-fA-F0-9]{96}$
          example: >-
            0x8b84918f955498cd0f6f44537cd0745d29ceffe16a37a353da746ad6879ec1c5992520708aad13b2333ce562faef083c
        bls_signature:
          type: string
          description: >-
            BLS signature over the change message (96 bytes; 0x-prefixed hex
            with 192 hex characters).
          pattern: ^0x[a-fA-F0-9]{192}$
          example: >-
            0xb735398d821c5eb6356c71e35d59dd29ee56429d03dd443746d3de1bffb9049ed1bd45ab115de42ee3c6d0b69017d9b11413e1c7a0640553c14f8d2076369d51301720f3861c9b824a8a486d116c9bfe38c53747b33d3f1e664ce5ead157ec16
        address:
          type: string
          description: >-
            Execution-layer address encoded in the new 0x01 withdrawal
            credentials (0x-prefixed, 20-byte hex).
          pattern: ^0x[a-fA-F0-9]{40}$
          example: '0x23a64e36ae03d85a6121e55e48f6b8eb63d72f76'
        withdrawalcredentials_0x00:
          type: string
          description: >-
            Original withdrawal credentials prior to the change (32 bytes;
            0x-prefixed hex, starts with 0x00).
          pattern: ^0x[a-fA-F0-9]{64}$
          example: '0x009081da37d4f11d87592b89734db953de64fcb381436b235551b209f3fac343'
        withdrawalcredentials_0x01:
          type: string
          description: >-
            New withdrawal credentials after the change (32 bytes; 0x-prefixed
            hex, starts with 0x01 = 0x01 || 0x00..00 || address).
          pattern: ^0x[a-fA-F0-9]{64}$
          example: '0x01000000000000000000000023a64e36ae03d85a6121e55e48f6b8eb63d72f76'
    types.ApiErrorResponse:
      type: object
      description: Standard error envelope returned when a request fails.
      properties:
        status:
          type: string
          description: >-
            Human-readable error indicator and message. The value begins with
            "ERROR:" followed by details.
          example: 'ERROR: <Message>'
        data:
          type: string
          description: Optional additional context for the error. Null in most cases.
          nullable: true
          default: null
  securitySchemes:
    ApiKeyAuthQuery:
      type: apiKey
      in: query
      name: apikey
      description: ''
    ApiKeyAuthHeader:
      type: apiKey
      in: header
      name: apikey
      description: ''

````