Skip to main content
GET
/
v1
/
validators
List Validators
curl --request GET \
  --url https://api.example.com/v1/validators
{
  "data": [
    {
      "public_key": "<string>",
      "index": 123,
      "status": "<string>",
      "activation_epoch": 123,
      "exit_epoch": 123,
      "owner": "<string>",
      "committee": [
        {}
      ],
      "quorum": 123,
      "partial_quorum": 123,
      "graffiti": "<string>",
      "liquidated": true
    }
  ]
}
Returns a list of validators (shares) managed by the node, with support for filtering by owner, operator, cluster, public key, or validator index.

Endpoint

GET /v1/validators

Query Parameters

owners
string
Comma-separated list of owner addresses (hex, with or without 0x prefix)Example: owners=0x1234...5678,0xabcd...ef01
operators
string
Comma-separated list of operator IDs (integers)Example: operators=1,2,3
clusters
string
Space-separated list of operator clusters. Each cluster is a comma-separated list of operator IDs. Only exact matches are returned.Example: clusters=1,2,3,4 5,6,7,8
subclusters
string
Space-separated list of operator subclusters. Returns validators whose committee contains the specified operators (partial match).Example: subclusters=1,2 3,4
pubkeys
string
Comma-separated list of validator public keys (hex, 96 characters each)Example: pubkeys=0x1234...5678,0xabcd...ef01
indices
string
Comma-separated list of validator indices (integers)Example: indices=100,200,300

Response

data
array
required
Array of validator objects

Example Requests

List all validators

curl http://localhost:16000/v1/validators

Filter by owner

curl "http://localhost:16000/v1/validators?owners=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"

Filter by operator

curl "http://localhost:16000/v1/validators?operators=1,2,3"

Filter by exact cluster

curl "http://localhost:16000/v1/validators?clusters=1,2,3,4"

Filter by public key

curl "http://localhost:16000/v1/validators?pubkeys=0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"

Filter by validator indices

curl "http://localhost:16000/v1/validators?indices=100,200,300"

Example Response

{
  "data": [
    {
      "public_key": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
      "index": 123456,
      "status": "active_ongoing",
      "activation_epoch": 50000,
      "exit_epoch": 18446744073709551615,
      "owner": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      "committee": [1, 2, 3, 4],
      "quorum": 0,
      "partial_quorum": 0,
      "graffiti": "SSV.Network",
      "liquidated": false
    },
    {
      "public_key": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12345678",
      "index": 0,
      "status": "",
      "activation_epoch": 0,
      "exit_epoch": 0,
      "owner": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      "committee": [5, 6, 7, 8],
      "quorum": 0,
      "partial_quorum": 0,
      "graffiti": "",
      "liquidated": false
    }
  ]
}

Filter Behavior

Multiple Filters

When multiple filters are provided, they are combined with AND logic:
# Returns validators owned by address AND operated by operator 1
curl "http://localhost:16000/v1/validators?owners=0x742d...&operators=1"

Multiple Values in Same Filter

Multiple values within a single filter use OR logic:
# Returns validators with operator 1 OR operator 2 OR operator 3
curl "http://localhost:16000/v1/validators?operators=1,2,3"

Clusters vs Subclusters

  • clusters: Exact match - the validator’s committee must exactly match the specified operators
  • subclusters: Partial match - the validator’s committee must contain all specified operators (but may have more)
# Exact match: only validators with committee [1,2,3,4]
curl "http://localhost:16000/v1/validators?clusters=1,2,3,4"

# Partial match: validators with committees containing both 1 and 2 (e.g., [1,2,3,4] or [1,2,5,6])
curl "http://localhost:16000/v1/validators?subclusters=1,2"

Validator Status Values

The status field reflects the beacon chain validator status:
StatusDescription
pending_initializedDeposit processed, waiting in queue
pending_queuedIn activation queue
active_ongoingActive and performing duties
active_exitingActive but exit initiated
active_slashedSlashed while active
exited_unslashedExited cleanly
exited_slashedExited due to slashing
withdrawal_possibleWithdrawals can be processed
withdrawal_doneFully withdrawn
(empty)No beacon metadata available yet

Use Cases

Monitoring Specific Validators

# Track validators by public key
curl "http://localhost:16000/v1/validators?pubkeys=0x1234...,0x5678..." | jq '.data[] | {index, status}'

Operator Health Checks

# Check all validators for a specific operator
curl "http://localhost:16000/v1/validators?operators=42" | jq '.data | length'

Cluster Analysis

# Find validators with a specific operator combination
curl "http://localhost:16000/v1/validators?clusters=1,2,3,4" | jq '.data[] | {public_key, status}'

Source Code Reference

Implementation: /home/daytona/workspace/source/api/handlers/validators/validators.go:20

Build docs developers (and LLMs) love