> ## Documentation Index
> Fetch the complete documentation index at: https://goldrush.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# validatorL1Votes | Hyperliquid Info API

> Hyperliquid validatorL1Votes: fetch the pending validator L1 governance votes/actions.

<CardGroup cols={2}>
  <Card title="Credit Cost"> 1 per call</Card>
  <Card title="Processing"> Realtime</Card>
</CardGroup>

The Hyperliquid info endpoint with `type: "validatorL1Votes"` is used to fetch the pending validator L1 governance votes/actions.

<Tip>
  Estimate your monthly cost for this API using the [Pricing Calculator](/docs/pricing-calculator?endpoint=%2Fapi-reference%2Fhyperliquid-info%2Fvalidator-l1-votes).
</Tip>

<Info>
  * Wire-equal to `POST api.hyperliquid.xyz/info` with `{"type": "validatorL1Votes"}`.
  * Each entry is an L1 governance action currently awaiting validator votes, with an `expireTime` (ms) after which the pending vote lapses.
  * The `action` object is a tagged variant; its inner shape depends on the specific L1 action being voted on (the example below shows a `settleOutcome` action).
  * This is a global, non-user-keyed type.
</Info>

Returns the pending validator L1 governance votes - the L1 actions currently awaiting validator approval. Each entry pairs an `expireTime` with the `action` under vote.

The `action` is a tagged variant whose inner structure depends on the action type, so treat it as an opaque object keyed by action tag unless you are decoding a specific action you recognize.

## Endpoint

```
POST https://hypercore.goldrushdata.com/info
Authorization: Bearer <GOLDRUSH_API_KEY>
Content-Type: application/json
```

## Request

<ParamField body="type" type="string" required>
  Always `"validatorL1Votes"`.
</ParamField>

### Example

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://hypercore.goldrushdata.com/info \
    -H "Authorization: Bearer $GOLDRUSH_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "type": "validatorL1Votes"
    }'
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch("https://hypercore.goldrushdata.com/info", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.GOLDRUSH_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      type: "validatorL1Votes",
    }),
  });

  const votes = await response.json();
  ```

  ```python Python theme={null}
  import os, requests

  response = requests.post(
      "https://hypercore.goldrushdata.com/info",
      headers={"Authorization": f"Bearer {os.environ['GOLDRUSH_API_KEY']}"},
      json={"type": "validatorL1Votes"},
  )

  votes = response.json()
  ```
</CodeGroup>

## Response

An array of pending L1 action votes. Empty when no L1 action is awaiting votes.

```json theme={null}
[
  {
    "expireTime": 1785021897017,
    "action": {
      "O": {
        "settleOutcome": {
          "outcome": 855,
          "settleFraction": "0",
          "details": "...",
          "nameAndDescription": ["...", "..."]
        }
      }
    }
  }
]
```

### Field descriptions

<ResponseField name="[n]" type="object">
  A pending L1 governance action awaiting validator votes.

  <Expandable title="properties">
    <ResponseField name="expireTime" type="int">
      Unix timestamp in milliseconds at which this pending vote expires.
    </ResponseField>

    <ResponseField name="action" type="object">
      The L1 governance action under vote. A tagged variant whose inner shape depends on the action type - treat it as an opaque object unless you are decoding a known action. The example shows a `settleOutcome` action carrying the target `outcome` id, a `settleFraction`, and descriptive metadata.
    </ResponseField>
  </Expandable>
</ResponseField>

*Last reviewed: 2026-07-24*
