---
title: "Consolidate staking positions (ETH validator consolidation)"
method: POST
path: "/staking/chains/{chainDescriptor}/consolidate"
tags: ["Staking"]
---

# Consolidate staking positions (ETH validator consolidation)

`POST /staking/chains/{chainDescriptor}/consolidate`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/staking/chains/{chainDescriptor}/consolidate`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/staking/chains/:chainDescriptor/consolidate/post.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Path parameters

- `chainDescriptor` 'ETH' | 'ETH_TEST6' | 'ETH_TEST_HOODI', required

## Headers

- `Idempotency-Key` string

## Request body

- MergeStakeAccountsRequest
  - `sourceId` string, uuid, required: Id of the source position to merge from
  - `destinationId` string, uuid, required: Id of the destination position to merge into
  - `fee` string: Represents the fee for a transaction, which can be specified as a percentage value. Only one of fee/feeLevel is required.
  - `feeLevel` 'LOW' | 'MEDIUM' | 'HIGH': Represents the fee level for a transaction, which can be set as slow, medium, or fast. Only one of fee/feeLevel is required.
  - `txNote` string: The note to associate with the merge transaction.

## Response `201`

Merge request accepted and created.

- MergeStakeAccountsResponse
  - `id` string, required: The unique identifier of the merge position (the id of the destination position)

## Other responses

- `400`: Bad request: missing/invalid fields, unsupported amount, or malformed payload.
- `403`: Forbidden: insufficient permissions, disabled feature, or restricted provider/validator.
- `404`: Not found: requested resource does not exist (e.g., position, validator, provider, or wallet).
- `429`: Rate limit exceeded: slow down and retry later.
- `500`: Internal error while processing the request.
- `default`: Error Response

---

[API](https://skmtc.dev/fireblocks/apis/fireblocks-api.md) - [All operations](https://skmtc.dev/fireblocks/apis/fireblocks-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireblocks/apis/fireblocks-api/revisions/4eba9965659a?raw)
