info (outcomeMeta)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "outcomeMeta"
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = { "type": "outcomeMeta" }
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: 'outcomeMeta'})
};
fetch('https://api.hyperliquid.xyz/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://api.hyperliquid.xyz/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' => 'outcomeMeta'
]),
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://api.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"outcomeMeta\"\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://api.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"outcomeMeta\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/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\": \"outcomeMeta\"\n}"
response = http.request(request)
puts response.read_body{
"outcomes": [
{
"outcome": 1,
"name": "Recurring",
"description": "class:priceBinary|underlying:BTC|expiry:20260504-0600|targetPrice:78213|period:1d",
"sideSpecs": [
{
"name": "Yes"
},
{
"name": "No"
}
]
}
],
"questions": []
}Hyperliquid node API
outcomeMeta | Hyperliquid info
The info endpoint with type: “outcomeMeta” retrieves the live HIP-4 outcome markets and any categorical questions on the Hyperliquid exchange.
POST
/
info
info (outcomeMeta)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "outcomeMeta"
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = { "type": "outcomeMeta" }
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: 'outcomeMeta'})
};
fetch('https://api.hyperliquid.xyz/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://api.hyperliquid.xyz/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' => 'outcomeMeta'
]),
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://api.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"outcomeMeta\"\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://api.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"outcomeMeta\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/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\": \"outcomeMeta\"\n}"
response = http.request(request)
puts response.read_body{
"outcomes": [
{
"outcome": 1,
"name": "Recurring",
"description": "class:priceBinary|underlying:BTC|expiry:20260504-0600|targetPrice:78213|period:1d",
"sideSpecs": [
{
"name": "Yes"
},
{
"name": "No"
}
]
}
],
"questions": []
}You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See Hyperliquid methods for the full availability breakdown.
info endpoint with type: "outcomeMeta" retrieves the live HIP-4 outcome markets and any categorical questions on the Hyperliquid exchange. Outcome markets are fully collateralized binary contracts that settle within a fixed range — the primitive that powers prediction markets and bounded options-like instruments on Hyperliquid.
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
type(string, required) — Must be"outcomeMeta"
Returns
Returns an object with two arrays:Outcomes
An array of live outcome markets. Each entry contains:outcome(integer) — Outcome id. Used together with the side index to derive the asset encoding.name(string) — Human-readable market name (for example,"Recurring"for the recurring BTC daily binary, or a custom name for one-off markets).description(string) — For recurring binary markets, a pipe-separatedkey:valuestring withclass,underlying,expiry,targetPrice,period(for example,"class:priceBinary|underlying:BTC|expiry:20260504-0600|targetPrice:78213|period:1d"). For other market types, free-form text.sideSpecs(array) — Two-element array describing the YES (index 0) and NO (index 1) sides. Each element has anamefield.
Questions
An array of categorical multi-outcome questions (testnet only at the time of writing — mainnet returns an empty array). Each entry contains:question(integer) — Question id.name(string) — Question text.description(string) — Free-form description.fallbackOutcome(integer) — Outcome id used if none of the named outcomes matches.namedOutcomes(array of integers) — Outcome ids for the named legs.settledNamedOutcomes(array of integers) — Outcome ids that have already settled.
Asset encoding
outcomeMeta does not return per-side coin strings or asset ids. Compute them client-side from outcome and side (0 for YES, 1 for NO):
encoding = 10 * outcome + side
trade coin = "#<encoding>" # for /info l2Book and Exchange.order(...)
balance coin = "+<encoding>" # for spotClearinghouseState
asset id = 100_000_000 + encoding
1, side 0), the encoding is 10, the trade coin is #10, the balance coin is +10, and the asset id is 100_000_010.
See the full guide at Trading HIP-4 outcome markets on Hyperliquid for the rest of the trading flow.
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{"type": "outcomeMeta"}' \
https://api.hyperliquid.xyz/info
from hyperliquid.info import Info
from hyperliquid.utils import constants
# This endpoint is public-only, so use the default Hyperliquid mainnet API.
info = Info(constants.MAINNET_API_URL, skip_ws=True)
# The SDK has no typed wrapper for "outcomeMeta", so post the request directly.
# Every typed Info method is a thin wrapper over this same post(...) call.
outcome_meta = info.post("/info", {"type": "outcomeMeta"})
print(outcome_meta["outcomes"])
print(outcome_meta["questions"])
import * as hl from "@nktkas/hyperliquid";
// This endpoint is public-only, so use the default public HTTP transport.
const transport = new hl.HttpTransport();
const client = new hl.InfoClient({ transport });
const data = await client.outcomeMeta();
console.log(data.outcomes);
console.log(data.questions);
Use cases
- Market discovery — enumerate every live outcome market and its side names before placing orders.
- Settlement parser — read
descriptionto extract theexpiryandtargetPricefor binary price-based markets. - Categorical markets — list named legs of a
questionand their settled status (testnet). - Inventory reconciliation — track which
outcomeids are still live so you can mark settled positions out of your book.
Body
application/json
Request type to retrieve HIP-4 outcome market metadata
Available options:
outcomeMeta Last modified on June 24, 2026
Was this page helpful?