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

# Consolidate staking positions (ETH validator consolidation)

> Consolidates the source staking position into the destination, merging the balance into the destination and closing the source position once complete. Both positions must be from the same vault account (i.e. same withdrawal credentials).  On chain, this translates into a consolidation transaction, where the  source validator is consolidated into the destination validator.  Supported chains: Ethereum (ETH) only.
Endpoint Permission: Owner, Admin, Non-Signing Admin, Signer, Approver, Editor.
**Note:** This endpoint is currently in beta and might be subject to changes.



## OpenAPI

````yaml https://docs.fireblocks.com/api/v1/swagger.yaml post /staking/chains/{chainDescriptor}/consolidate
openapi: 3.0.0
info:
  title: Fireblocks API
  description: >
    Fireblocks provides a suite of applications to manage digital asset
    operations and a complete development platform to build your business on the
    blockchain.


    - Visit our website for more information: [Fireblocks
    Website](https://fireblocks.com)

    - Visit our developer docs: [Fireblocks
    DevPortal](https://developers.fireblocks.com)
  version: 1.6.2
  contact:
    email: developers@fireblocks.com
servers:
  - url: https://api.fireblocks.io/v1
    description: Fireblocks Production Environment Base URL
  - url: https://sandbox-api.fireblocks.io/v1
    description: Fireblocks Sandbox Environment Base URL
security: []
paths:
  /staking/chains/{chainDescriptor}/consolidate:
    post:
      tags:
        - Staking
      summary: Consolidate staking positions (ETH validator consolidation)
      description: >-
        Consolidates the source staking position into the destination, merging
        the balance into the destination and closing the source position once
        complete. Both positions must be from the same vault account (i.e. same
        withdrawal credentials).  On chain, this translates into a consolidation
        transaction, where the  source validator is consolidated into the
        destination validator.  Supported chains: Ethereum (ETH) only.

        Endpoint Permission: Owner, Admin, Non-Signing Admin, Signer, Approver,
        Editor.

        **Note:** This endpoint is currently in beta and might be subject to
        changes.
      operationId: consolidate
      parameters:
        - name: chainDescriptor
          in: path
          required: true
          description: Protocol identifier for the staking operation (e.g., ETH).
          example: ETH
          schema:
            type: string
            enum:
              - ETH
              - ETH_TEST6
              - ETH_TEST_HOODI
        - $ref: '#/components/parameters/X-Idempotency-Key'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeStakeAccountsRequest'
      responses:
        '201':
          description: Merge request accepted and created.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeStakeAccountsResponse'
        '400':
          description: >-
            Bad request: missing/invalid fields, unsupported amount, or
            malformed payload.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '403':
          description: >-
            Forbidden: insufficient permissions, disabled feature, or restricted
            provider/validator.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '404':
          description: >-
            Not found: requested resource does not exist (e.g., position,
            validator, provider, or wallet).
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '429':
          description: 'Rate limit exceeded: slow down and retry later.'
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '500':
          description: Internal error while processing the request.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        default:
          $ref: '#/components/responses/Error'
      x-codeSamples:
        - lang: TypeScript
          source: >-
            const response:
            Promise<FireblocksResponse<MergeStakeAccountsResponse>> =
            fireblocks.staking.consolidate(stakingApiConsolidateRequest);
        - lang: Java
          source: >-
            CompletableFuture<ApiResponse<MergeStakeAccountsResponse>> response
            = fireblocks.staking().consolidate(mergeStakeAccountsRequest,
            chainDescriptor, idempotencyKey);
        - lang: Python
          source: >-
            response =
            fireblocks.staking.consolidate(merge_stake_accounts_request,
            chain_descriptor, idempotency_key);
components:
  parameters:
    X-Idempotency-Key:
      name: Idempotency-Key
      in: header
      description: >-
        A unique identifier for the request. If the request is sent multiple
        times with the same idempotency key, the server will return the same
        response as the first request. The idempotency key is valid for 24
        hours.
      required: false
      schema:
        type: string
  schemas:
    MergeStakeAccountsRequest:
      type: object
      example:
        sourceId: b70701f4-d7b1-4795-a8ee-b09cdb5b850d
        destinationId: f3432f4-34d1-43495-a8ee-jfdjnfj34i3
        txNote: Merging stake for optimization
        feeLevel: MEDIUM
      properties:
        sourceId:
          type: string
          format: uuid
          example: b70701f4-d7b1-4795-a8ee-b09cdb5b850d
          description: Id of the source position to merge from
        destinationId:
          type: string
          format: uuid
          example: f3432f4-34d1-43495-a8ee-jfdjnfj34i3
          description: Id of the destination position to merge into
        fee:
          type: string
          example: '7'
          description: >-
            Represents the fee for a transaction, which can be specified as a
            percentage value. Only one of fee/feeLevel is required.
        feeLevel:
          $ref: '#/components/schemas/FeeLevel'
        txNote:
          type: string
          example: Merging stake for optimization
          description: The note to associate with the merge transaction.
      required:
        - sourceId
        - destinationId
    MergeStakeAccountsResponse:
      type: object
      properties:
        id:
          type: string
          example: b70701f4-d7b1-4795-a8ee-b09cdb5b850d
          description: >-
            The unique identifier of the merge position (the id of the
            destination position)
      required:
        - id
    ErrorSchema:
      type: object
      properties:
        message:
          type: string
        code:
          type: number
    FeeLevel:
      type: string
      example: MEDIUM
      description: >-
        Represents the fee level for a transaction, which can be set as slow,
        medium, or fast. Only one of fee/feeLevel is required.
      enum:
        - LOW
        - MEDIUM
        - HIGH
  headers:
    X-Request-ID:
      schema:
        type: string
      description: >-
        Unique ID correlated to the API request. Please provide it in any
        support ticket you create or on Github issues related to Fireblocks SDKs
  responses:
    Error:
      description: Error Response
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorSchema'

````