---
title: getClusterNodes
description: >-
  Returns network endpoints, shred version, feature set, and software version
  for known cluster nodes.
url: /docs/rpc/http/getclusternodes
type: reference
hideTableOfContents: true
---

Returns network endpoints, shred version, feature set, and software version for
known cluster nodes.

<Callout type="info" title="Source">
  [`get_cluster_nodes`](https://github.com/anza-xyz/agave/blob/v3.1.8/rpc/src/rpc.rs#L3634)
</Callout>

<APIMethod>

```jsonc !!request curl
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getClusterNodes"
}
```

```ts !!request title="Kit"
import { createSolanaRpc } from "@solana/kit";

const rpc_url = "https://api.devnet.solana.com";
const rpc = createSolanaRpc(rpc_url);

let nodes = await rpc.getClusterNodes().send();

console.log(nodes);
```

```ts !!request title="web3.js"
import { Connection, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(clusterApiUrl("devnet"), "confirmed");

let nodes = await connection.getClusterNodes();

console.log(nodes);
```

```rs !!request title="Rust"
use anyhow::Result;
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_commitment_config::CommitmentConfig;

#[tokio::main]
async fn main() -> Result<()> {
    let client = RpcClient::new_with_commitment(
        String::from("https://api.devnet.solana.com"),
        CommitmentConfig::confirmed(),
    );

    let nodes = client.get_cluster_nodes().await?;

    println!("{:#?}", nodes);

    Ok(())
}
```

### !params

### !!result

```jsonc !response
{
  "jsonrpc": "2.0",
  // !hover(1:18) result
  "result": [
    {
      // !hover featureSet
      "featureSet": 3073396398,
      // !hover gossip
      "gossip": "10.239.6.48:8001",
      // !hover pubkey
      "pubkey": "9QzsJf7LPLj8GkXbYT3LFDKqsj2hHG7TA3xinJHu8epQ",
      // !hover pubsub
      "pubsub": "10.239.6.48:8900",
      // !hover rpc
      "rpc": "10.239.6.48:8899",
      // !hover serveRepair
      "serveRepair": "10.239.6.48:8002",
      // !hover shredVersion
      "shredVersion": 2405,
      // !hover tpu
      "tpu": "10.239.6.48:8856",
      // !hover tpuForwards
      "tpuForwards": "10.239.6.48:8857",
      // !hover tpuForwardsQuic
      "tpuForwardsQuic": "10.239.6.48:8863",
      // !hover tpuQuic
      "tpuQuic": "10.239.6.48:8862",
      // !hover tpuVote
      "tpuVote": "10.239.6.48:8858",
      // !hover tvu
      "tvu": "10.239.6.48:8000",
      // !hover version
      "version": "1.0.0 c375ce1f"
    }
  ],
  "id": 1
}
```

!type array

The result field will be an array of JSON objects, each with the following sub
fields:

##### !! featureSet

!type u32 | null

First 4 bytes of the node's FeatureSet identifier

##### !! gossip

!type string | null

Gossip network address for the node

##### !! pubkey

!type string

Node public key, as base-58 encoded string

##### !! pubsub

!type string | null

WebSocket PubSub network address for the node, or `null` if the PubSub service
is not enabled

##### !! rpc

!type string | null

JSON RPC network address for the node, or `null` if the JSON RPC service is not
enabled

##### !! serveRepair

!type string | null

Serve repair UDP network address for the node

##### !! shredVersion

!type u16 | null

The shred version the node has been configured to use

##### !! tpu

!type string | null

TPU UDP network address for the node

##### !! tpuForwards

!type string | null

TPU forwards UDP network address for the node

##### !! tpuForwardsQuic

!type string | null

TPU forwards QUIC network address for the node

##### !! tpuQuic

!type string | null

TPU QUIC network address for the node

##### !! tpuVote

!type string | null

TPU vote UDP network address for the node

##### !! tvu

!type string | null

TVU UDP network address for the node

##### !! version

!type string | null

The software version of the node, or `null` if the version information is not
available

</APIMethod>
