Skip to main content

Overview

Instead of manually tracking validator indices, you can use the Validator Dashboard to create private sets of validators. Once configured, query your entire dashboard or specific groups using a single dashboard_id.
Validator Selector: The dashboard_id and group_id selectors work with all validator endpoints including /api/v2/ethereum/validators/rewards-aggregate, /api/v2/ethereum/validators/rewards-list, and /api/v2/ethereum/validators/performance-aggregate.

Why Use Dashboard Selectors?

Organized Groups

Create custom validator groups to represent nodes, servers, or client configurations. Query rewards for each group separately using group_id.

Scales with Add-ons

With premium or Add-on subscriptions, your dashboard can scale up to 320,000+ ETH in stake.

No Index Tracking

Add validators once to your dashboard, then query by dashboard_id without maintaining lists of indices.

Real-Time Monitoring

The dashboard UI provides real-time slot visualization and performance metrics alongside API access.

Setting Up Your Dashboard

Step 1: Create a Dashboard

Visit beaconcha.in/dashboard and create a new dashboard.

Step 2: Add Validators

You can add validators using multiple methods:
MethodDescriptionBest For
Validator indicesEnter indices like 1, 2, 3Small sets
Public keysEnter full public keysSpecific validators
Deposit addressAll validators from an addressOperators
Withdrawal credentialsAll validators with same credentialsStaking pools
Graffiti matchingValidators with specific graffitiNode operators

Step 3: Create Groups (Optional)

Organize validators into groups to represent:
  • Different nodes or servers
  • Different client configurations (Lighthouse, Prysm, Teku, etc.)
  • Geographic locations
  • Customer segments
Groups must currently be created through the Dashboard UI. Once created, you can manage validators within groups using the Dashboard Management APIs.

Finding Your IDs

Dashboard ID

Your Dashboard ID is visible in the URL:
https://beaconcha.in/dashboard/123
                              ^^^
                          Dashboard ID

Group ID

To find your Group ID:
  1. Go to your Validator Dashboard
  2. Click the Manage Groups button (grid icon) in the dashboard header
  3. In the modal that opens, you’ll see a list of all your groups
  4. The Group ID is displayed next to each group name
The default group (containing validators not assigned to any specific group) has Group ID 0.

Querying Rewards by Dashboard

Query rewards for all validators in your dashboard:
curl --request POST \
  --url https://beaconcha.in/api/v2/ethereum/validators/rewards-aggregate \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "chain": "mainnet",
  "validator": {
    "dashboard_id": 123
  },
  "range": {
    "evaluation_window": "30d"
  }
}
'

Querying Rewards by Group

Query rewards for a specific group within your dashboard by adding group_id to your request:
curl --request POST \
  --url https://beaconcha.in/api/v2/ethereum/validators/rewards-aggregate \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "chain": "mainnet",
  "validator": {
    "dashboard_id": 123,
    "group_id": 456
  },
  "range": {
    "evaluation_window": "all_time"
  }
}
'

Example: Compare Rewards Across Node Groups

Compare performance across your node groups:
import requests

API_KEY = "<YOUR_API_KEY>"
DASHBOARD_ID = 123

# Define your groups (e.g., one per node/client)
GROUPS = {
    "Node A (Lighthouse)": 1,
    "Node B (Prysm)": 2,
    "Node C (Teku)": 3,
    "Node D (Lodestar)": 4
}

def get_group_rewards(dashboard_id: int, group_id: int, window: str = "30d") -> dict:
    """Fetch aggregated rewards for a specific group."""
    response = requests.post(
        "https://beaconcha.in/api/v2/ethereum/validators/rewards-aggregate",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "chain": "mainnet",
            "validator": {
                "dashboard_id": dashboard_id,
                "group_id": group_id
            },
            "range": {
                "evaluation_window": window
            }
        }
    )
    return response.json()

# Compare rewards across all groups
print(f"{'='*50}")
print(f"30-Day Rewards Comparison")
print(f"{'='*50}")

results = []
for name, group_id in GROUPS.items():
    result = get_group_rewards(DASHBOARD_ID, group_id)
    total_wei = int(result.get("data", {}).get("total", 0))
    total_eth = total_wei / 1e18
    results.append((name, total_eth))
    print(f"{name}: {total_eth:.4f} ETH")

# Find best and worst performing
results.sort(key=lambda x: x[1], reverse=True)
print(f"\nBest: {results[0][0]} ({results[0][1]:.4f} ETH)")
print(f"Worst: {results[-1][0]} ({results[-1][1]:.4f} ETH)")
print(f"Difference: {results[0][1] - results[-1][1]:.4f} ETH")

Managing Your Dashboard via API

Once your dashboard and groups are set up, you can programmatically manage validators:
ActionEndpointDocumentation
Add validatorsPOST /api/i/validator-dashboards/{id}/validatorsAPI Reference
Remove from groupDELETE /api/i/validator-dashboards/{id}/groups/{gid}/validatorsAPI Reference
Bulk deletePOST /api/i/validator-dashboards/{id}/validators/bulk-deletionsAPI Reference
Dashboard management APIs require an Orca subscription.

Dashboard Tiers

Dashboard capacity is based on Max Stake (ETH), not validator count:
TierMax StakeDashboardsPrice/moBest For
Free1FreeIndividual stakers
Guppy3,200 ETH1€8.99*Small operators
Dolphin9,600 ETH2€25.99*Professional operators
Orca32,000 ETH2€39.99*Large operators
*Prices for annual billing, excluding VAT

Premium Add-Ons

Need more capacity? Add-ons stack on top of your base tier:
Add-OnExtra CapacityPrice/mo
+32,000 ETH+32,000 ETH per dashboard€59.99*
+320,000 ETH+320,000 ETH per dashboard€359.99*
Upgrade at beaconcha.in/premium to increase your dashboard capacity. Contact support for even higher limits.

Best Practices

Query by Dashboard or Group

Use dashboard_id to query all validators, or add group_id to filter by a specific group.

Organize by Infrastructure

Create groups by node, client, or geographic location to isolate performance metrics.

Use Meaningful Names

Name groups clearly so API results are easy to interpret and report on.

Regular Audits

Periodically verify your dashboard contains all expected validators.