info (spotMeta)
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "spotMeta"
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload = { "type": "spotMeta" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({type: 'spotMeta'})
};
fetch('https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'spotMeta'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload := strings.NewReader("{\n \"type\": \"spotMeta\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"spotMeta\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"spotMeta\"\n}"
response = http.request(request)
puts response.read_body{
"tokens": [
{
"name": "<string>",
"szDecimals": 123,
"weiDecimals": 123,
"index": 123,
"tokenId": "<string>",
"isCanonical": true,
"evmContract": {
"address": "<string>",
"evm_extra_wei_decimals": 123
},
"fullName": "<string>",
"deployerTradingFeeShare": "<string>"
}
],
"universe": [
{
"name": "<string>",
"tokens": [
123
],
"index": 123,
"isCanonical": true
}
]
}Hyperliquid node API
spotMeta | Hyperliquid info
The info endpoint with type: “spotMeta” retrieves spot metadata including tokens and universe for the Hyperliquid exchange. On Hyperliquid info.
POST
/
4f8d8f4040bdacd1577bff8058438274
/
info
info (spotMeta)
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "spotMeta"
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload = { "type": "spotMeta" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({type: 'spotMeta'})
};
fetch('https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'spotMeta'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload := strings.NewReader("{\n \"type\": \"spotMeta\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"spotMeta\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"spotMeta\"\n}"
response = http.request(request)
puts response.read_body{
"tokens": [
{
"name": "<string>",
"szDecimals": 123,
"weiDecimals": 123,
"index": 123,
"tokenId": "<string>",
"isCanonical": true,
"evmContract": {
"address": "<string>",
"evm_extra_wei_decimals": 123
},
"fullName": "<string>",
"deployerTradingFeeShare": "<string>"
}
],
"universe": [
{
"name": "<string>",
"tokens": [
123
],
"index": 123,
"isCanonical": true
}
]
}This method is available on Chainstack. Not all Hyperliquid methods are available on Chainstack, as the open-source node implementation does not support them yet — see Hyperliquid methods for the full availability breakdown.
info endpoint with type: "spotMeta" retrieves spot metadata including tokens and universe for the Hyperliquid exchange. This endpoint provides essential information about available spot tokens, their specifications, and trading pairs.
Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
Request body
type(string, required) — The request type. Must be"spotMeta"to retrieve spot metadata.
Response
The response contains two main sections:Tokens
An array of spot tokens with their metadata:name(string) — The token name (e.g., “USDC”, “PURR”).szDecimals(integer) — Number of decimal places for size precision.weiDecimals(integer) — Number of decimal places for wei representation.index(integer) — Unique token index identifier.tokenId(string) — Unique token identifier in hexadecimal format.isCanonical(boolean) — Whether the token is canonical on the platform.evmContract(object, nullable) — EVM contract data if applicable:address(string),evm_extra_wei_decimals(integer).fullName(string, nullable) — Full descriptive name of the token.deployerTradingFeeShare(string, optional) — Deployer trading fee share for this token.
Universe
An array of spot trading pairs:name(string) — Trading pair name (e.g., “PURR/USDC”, “@1”).tokens(array) — Array of token indices that make up the trading pair.index(integer) — Unique pair index identifier.isCanonical(boolean) — Whether the trading pair is canonical.
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{"type": "spotMeta"}' \
https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info
from hyperliquid.info import Info
info = Info("YOUR_CHAINSTACK_ENDPOINT", skip_ws=True)
spot_meta = info.spot_meta()
print(spot_meta)
import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";
const transport = new HttpTransport({ apiUrl: "YOUR_CHAINSTACK_ENDPOINT" });
const info = new InfoClient({ transport });
const spotMeta = await info.spotMeta();
console.log(spotMeta);
Use your own endpoint in your code. The code examples use a placeholder Chainstack endpoint (YOUR_CHAINSTACK_ENDPOINT) — replace it with your own Hyperliquid node endpoint from the Chainstack console. The curl above uses a shared public endpoint for quick checks only; do not use it in production.
Use case
Theinfo endpoint with type: "spotMeta" is essential for spot trading applications that need to:
- Display available spot tokens and their specifications
- Validate trading pair configurations
- Map token indices to human-readable names
- Understand decimal precision for accurate calculations
- Identify canonical vs non-canonical tokens and pairs
- Build trading interfaces with proper token and pair data
Body
application/json
Available options:
spotMeta Last modified on June 24, 2026
Was this page helpful?