---
updatedAt: 2026-05-20T06:31:00.000Z
---

Fetch the complete documentation index at: https://docs.blockdaemon.com/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Generate a Signed Voluntary Exit Message

Generates a voluntary exit message, but does not broadcast it to the network.
Instead, the signed message is returned as part of the response.
You can use the [Native Ubiquity API for Ethereum](https://docs.blockdaemon.com/reference/ethereum-native-api) to broadcast the message.

---

- An exit message can be generated shortly after staking, once the validator shows a status on the consensus layer, typically within 7 hours after paying the deposit.
- Broadcasting or executing the exit is only possible after the validator reaches active status and has completed the activation queue.

`Note`: The validator must remain active for a minimum of 256 epochs, or approximately 27 hours, as per the Ethereum protocol rules.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "version": "1.0.0",
    "title": "Staking API",
    "description": "The Blockdaemon Staking API simplifies and streamlines institutional cryptocurrency staking. The API allows developers to interact with blockchain networks and perform various staking-related operations, such as delegating and undelegating tokens, in a single, unified interface.\n\nWith the Staking API, you can quickly and easily build and deploy applications that automate staking activities and increase efficiency in your blockchain operations.",
    "contact": {
      "name": "Blockdaemon",
      "email": "info@blockdaemon.com",
      "url": "https://blockdaemon.com"
    },
    "x-logo": {
      "url": "https://assets-global.website-files.com/633c5e06513fa35f3391a5f9/645d33beb6fa65f6cfb95eb8_BD%20Logo%20Stack%20-%20Purple.svg",
      "backgroundColor": "#fafafa",
      "altText": "Blockdaemon logo"
    }
  },
  "x-readme": {
    "explorer-enabled": false
  },
  "servers": [
    {
      "url": "https://svc.blockdaemon.com/boss"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "description": "When signing up for a staking account, you are provided with an API key.\n\nTo authenticate a Staking API request, pass your API key in the `X-API-Key` header.",
        "type": "apiKey",
        "in": "header",
        "name": "X-API-KEY"
      }
    },
    "parameters": {
      "EthereumExitEpoch": {
        "name": "epoch",
        "in": "query",
        "schema": {
          "type": "integer",
          "description": "Earliest epoch when voluntary exit can be processed.\nIf not provided the earliest possible epoch will be fetched from the network.\n",
          "format": "uint64",
          "example": 1001
        }
      },
      "EthereumNetwork": {
        "name": "network",
        "in": "path",
        "description": "Ethereum network",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/EthereumNetwork"
        }
      },
      "EthereumValidatorIndexParam": {
        "name": "validator_index",
        "in": "query",
        "schema": {
          "type": "integer",
          "description": "Validator index",
          "format": "uint64",
          "example": 25
        }
      },
      "EthereumValidatorPublicKey": {
        "name": "validator_public_key",
        "in": "query",
        "description": "Validator public key",
        "schema": {
          "$ref": "#/components/schemas/EthereumValidatorPublicKey"
        }
      },
      "ShowEthereumForkVersion": {
        "name": "show_fork_version",
        "in": "query",
        "description": "When this parameter is set to `true`, the response will include the field `fork_version` indicating the fork version constant for the currently active fork.\n\nThe fork versions values are unique for each network and each fork. As an example, here is the constants preset file for Mainnet:\nhttps://github.com/ethereum/consensus-specs/blob/dev/configs/mainnet.yaml",
        "required": false,
        "schema": {
          "type": "boolean"
        }
      }
    },
    "responses": {
      "InternalServerError": {
        "description": "Internal server error.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "InvalidRequest": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "description": "Error response envelope",
              "required": [
                "code",
                "message"
              ],
              "properties": {
                "code": {
                  "type": "integer",
                  "format": "int32",
                  "description": "Error code",
                  "example": 400
                },
                "message": {
                  "type": "string",
                  "description": "Error Message",
                  "example": "Detailed human-readable diagnostic message regarding any invalid request parameters"
                }
              }
            }
          }
        }
      },
      "NoValidatorsError": {
        "description": "Insufficient validators available to process Stake Intent request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Header 'X-API-Key' missing.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UnauthorizedError"
            }
          }
        }
      },
      "EthereumExitValidatorTx": {
        "description": "Ethereum exit validator transaction response",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/EthereumExitValidatorTx"
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "description": "Error response envelope",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32",
            "description": "Error code",
            "example": 500
          },
          "message": {
            "type": "string",
            "description": "Error Message",
            "example": "A descriptive error message"
          }
        }
      },
      "EthereumNetwork": {
        "type": "string",
        "description": "Ethereum network",
        "enum": [
          "mainnet",
          "hoodi"
        ]
      },
      "UnauthorizedError": {
        "type": "object",
        "description": "Error response envelope",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32",
            "description": "Error code",
            "example": 401
          },
          "message": {
            "type": "string",
            "description": "Error Message",
            "example": "A human-readable diagnostic message detailing any authorization failure"
          }
        }
      },
      "EthereumEpoch": {
        "type": "string",
        "description": "The numeric index of an [Ethereum epoch](https://ethereum.org/en/glossary/#epoch).",
        "example": "1001"
      },
      "EthereumValidatorIndex": {
        "type": "string",
        "description": "Validator index",
        "example": "25"
      },
      "EthereumValidatorPublicKey": {
        "type": "string",
        "description": "Public Key of an asymmetric key-pair.",
        "format": "hex",
        "example": "0xa1d1ad0714035353258038e964ae9675dc0252ee22cea896825c01458e1807bfad2f9969338798548d9858a571f7425c"
      },
      "EthereumExitValidatorMessage": {
        "type": "object",
        "description": "Ethereum exit validator message",
        "required": [
          "validator_pubkey",
          "validator_index",
          "epoch"
        ],
        "properties": {
          "validator_pubkey": {
            "$ref": "#/components/schemas/EthereumValidatorPublicKey"
          },
          "validator_index": {
            "$ref": "#/components/schemas/EthereumValidatorIndex"
          },
          "epoch": {
            "$ref": "#/components/schemas/EthereumEpoch"
          }
        }
      },
      "EthereumSignature": {
        "type": "string",
        "format": "hex",
        "description": "Ethereum signature",
        "example": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120087fed394b43849eebef1e88873cd9efdbe33136656e5148e659b8b2f33625d40000000000000000000000000000000000000000000000000000000000000030b81748644e23c4d950f9dd709f3eb73d5eacd9657997e1d9dde7c4ebd8a6519ecb9d0a7fb603d3b68e023278f9650122000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020010000000000000000000000c509bb854c526af4cee5e037089f7aa8e091d8870000000000000000000000000000000000000000000000000000000000000060b36b79b4b206c0310472c117fa40c05342b5dc3e89f98f42c9da3ce6450d4c603cad55248017fd4eca3ab277cca64569193e4d487f5b2ea78a2bcdc81926c313c05842a3af318967a775783bba22519e8b8886587efa99aa7dab5784f792b187"
      },
      "EthereumExitValidatorTx": {
        "type": "object",
        "description": "Ethereum exit validator transaction response",
        "required": [
          "message",
          "signature",
          "fork_version"
        ],
        "properties": {
          "message": {
            "$ref": "#/components/schemas/EthereumExitValidatorMessage"
          },
          "signature": {
            "$ref": "#/components/schemas/EthereumSignature"
          },
          "fork_version": {
            "$ref": "#/components/schemas/EthereumForkVersion"
          }
        }
      },
      "EthereumForkVersion": {
        "type": "string",
        "description": "A hex-encoded Ethereum fork version value.\n\nThe fork versions values are unique for each network and each fork. As an example, here is the constants preset file for Mainnet:\nhttps://github.com/ethereum/consensus-specs/blob/dev/configs/mainnet.yaml",
        "example": "0x03000000"
      }
    }
  },
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "paths": {
    "/v1/ethereum/{network}/signed-voluntary-exit": {
      "get": {
        "summary": "Generate a Signed Voluntary Exit Message",
        "operationId": "generateSignedVoluntaryExit",
        "tags": [
          "Ethereum"
        ],
        "description": "Generates a voluntary exit message, but does not broadcast it to the network.\nInstead, the signed message is returned as part of the response.\nYou can use the [Native Ubiquity API for Ethereum](https://docs.blockdaemon.com/reference/ethereum-native-api) to broadcast the message.\n\n---\n\n- An exit message can be generated shortly after staking, once the validator shows a status on the consensus layer, typically within 7 hours after paying the deposit.\n- Broadcasting or executing the exit is only possible after the validator reaches active status and has completed the activation queue.\n\n`Note`: The validator must remain active for a minimum of 256 epochs, or approximately 27 hours, as per the Ethereum protocol rules.",
        "parameters": [
          {
            "$ref": "#/components/parameters/EthereumNetwork"
          },
          {
            "$ref": "#/components/parameters/ShowEthereumForkVersion"
          },
          {
            "$ref": "#/components/parameters/EthereumValidatorIndexParam"
          },
          {
            "$ref": "#/components/parameters/EthereumValidatorPublicKey"
          },
          {
            "$ref": "#/components/parameters/EthereumExitEpoch"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/EthereumExitValidatorTx"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "validator not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/NoValidatorsError"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    }
  },
  "tags": [
    {
      "name": "Ethereum",
      "description": "Ethereum endpoints"
    }
  ]
}
```