---
title: "Propose a new Distributed Validator Cluster"
method: POST
path: "/v1/definition"
tags: ["Cluster Definition"]
---

# Propose a new Distributed Validator Cluster

`POST /v1/definition`

This endpoint allows the caller to propose a distributed key generation ceremony.The caller must have accepted the latest version of [Obol's terms and conditions](https://obol.tech/terms.pdf). The caller must specify the configuration of a Distributed Validator Cluster; such as the participating operators and the validator exit details. Operators invited to participate in this cluster must submit a public key (in [ENR](https://docs.obol.tech/docs/v0.12.0/int/faq/errors#enrs-keys) form) to serve as their node's identity, along with EIP712 signatures indicating their acceptance of the terms of this cluster.

## Headers

- `authorization` string, required

## Request body

- ClusterDefDto
  - `name` string, required
  - `operators` OperatorDto[], required — operator data.
    - `address` string, required — Ethereum address of Operator.
    - `enr` string, required
    - `fork_version` 'mainnet' | '0x00000000' | 'goerli' | '0x00001020' | 'gnosis' | '0x00000064' | 'sepolia' | '0x90000069' | 'hoodi' | '0x10000910', required
    - `version` string, required
    - `enr_signature` string, required
    - `config_signature` string, required
  - `creator` CreatorDto[], required — creator data.
    - `address` string, required — Ethereum address of Creator.
    - `config_signature` string, required
  - `uuid` string, required
  - `version` string, required
  - `num_validators` number, required
  - `threshold` number, required
  - `dkg_algorithm` 'frost' | 'keycast' | 'default', required
  - `fork_version` 'mainnet' | '0x00000000' | 'goerli' | '0x00001020' | 'gnosis' | '0x00000064' | 'sepolia' | '0x90000069' | 'hoodi' | '0x10000910', required
  - `timestamp` string, required
  - `validators` ClusterDefValidator[], required — validator withdrawal configuration.
    - `fee_recipient_address` string, required — Ethereum address to receive transaction fees.
    - `withdrawal_address` string, required — Ethereum address to receive staked ether.
  - `deposit_amounts` string[], required — partial deposits.
  - `consensus_protocol` 'qbft' | '', required
  - `target_gas_limit` number, required
  - `compounding` boolean, required — Flag that enables compounding rewards for validators by using 0x02 withdrawal credentials
  - `config_hash` string, required

## Response `201`

The cluster object

- ClusterDefinitionResponse
  - `name` string, required
  - `uuid` string, required
  - `creator` Creator, required
  - `version` string, required
  - `num_validators` number, required
  - `threshold` number, required
  - `dkg_algorithm` string, required
  - `fork_version` string, required
  - `config_hash` string, required — config_hash is a 32 bytes SSZ hash of cluster config.
  - `timestamp` string, required
  - `validators` Validator[], required
  - `deposit_amounts` string[], required — Partial depoists.
  - `definition_hash` string, required — definition_hash is a 32 bytes SSZ hash of cluster config.
  - `fee_recipient_address` string, required — Ethereum address to receive transaction fees.
  - `withdrawal_address` string, required — Ethereum address to receive staked ether.
  - `operators` Operator[], required
  - `consensus_protocol` string, required
  - `target_gas_limit` number, required
  - `compounding` boolean, required

## Other responses

- `400` — Invalid definition data
- `401` — Missing t&c signature Authorization header is missing or incorrect
- `409` — Duplicate entry
- `500` — An unknown error occurred

---

[API](https://skmtc.net/obol/apis/obol-api.md) · [All operations](https://skmtc.net/obol/apis/obol-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/obol/obol-api/revisions/707a88e0b355/schema)
