Spot
The section documents the info endpoints that are specific to spot.
Retrieve spot metadata
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "spotMeta" |
Response
{% tabs %}
{
"tokens": [
{
"name": "USDC",
"szDecimals": 8,
"weiDecimals" 8,
"index": 0,
"tokenId": "0x6d1e7cde53ba9467b783cb7c530ce054",
"isCanonical": true,
"evmContract":null,
"fullName":null
},
{
"name": "PURR",
"szDecimals": 0,
"weiDecimals": 5,
"index": 1,
"tokenId": "0xc1fb593aeffbeb02f85e0308e9956a90",
"isCanonical": true,
"evmContract":null,
"fullName":null
},
{
"name": "HFUN",
"szDecimals": 2,
"weiDecimals": 8,
"index": 2,
"tokenId": "0xbaf265ef389da684513d98d68edf4eae",
"isCanonical": false,
"evmContract":null,
"fullName":null
},
],
"universe": [
{
"name": "PURR/USDC",
"tokens": [1, 0],
"index": 0,
"isCanonical": true
},
{
"tokens": [2, 0],
"name": "@1",
"index": 1,
"isCanonical": false
},
]
}
{% endtab %}
Retrieve spot asset contexts
POST https://api.hyperliquid.xyz/info
Headers
| Name | Type | Description |
|---|---|---|
| Content-Type* | String | "application/json" |
Request Body
| Name | Type | Description |
|---|---|---|
| type* | String | "spotMetaAndAssetCtxs" |
{% tabs %}
[
{
"tokens": [
{
"name": "USDC",
"szDecimals": 8,
"weiDecimals" 8,
"index": 0,
"tokenId": "0x6d1e7cde53ba9467b783cb7c530ce054",
"isCanonical": true,
"evmContract":null,
"fullName":null
},
{
"name": "PURR",
"szDecimals": 0,
"weiDecimals": 5,
"index": 1,
"tokenId": "0xc1fb593aeffbeb02f85e0308e9956a90",
"isCanonical": true,
"evmContract":null,
"fullName":null
}
],
"universe": [
{
"name": "PURR/USDC",
"tokens": [1, 0],
"index": 0,
"isCanonical": true
}
]
},
[
{
"dayNtlVlm":"8906.0",
"markPx":"0.14",
"midPx":"0.209265",
"prevDayPx":"0.20432"
}
]
]
{% endtab %}
Retrieve a user's token balances
POST https://api.hyperliquid.xyz/info
See a user's token balances.
Under unified account or portfolio margin, this is the source of truth for trading account balance across spot and perps.
Headers
| Name | Type | Description |
|---|---|---|
| Content-Type* | "application/json" |
Request Body
| Name | Type | Description |
|---|---|---|
| type* | String | "spotClearinghouseState" |
| user* | String | Onchain address in 42-character hexadecimal format; e.g. 0x0000000000000000000000000000000000000000. |
{% tabs %}
{
"balances": [
{
"coin": "USDC",
"token": 0,
"hold": "0.0",
"total": "14.625485",
"entryNtl": "0.0"
},
{
"coin": "PURR",
"token": 1,
"hold": "0.0",
"total": "2000.0",
"entryNtl": "1234.56"
},
{
"coin": "+1230",
"hold": "0.0",
"total": "25.0",
"entryNtl": "12.5"
}
]
}
{% endtab %}
Retrieve information about the Spot Deploy Auction
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "spotDeployState" |
| user* | String | Onchain address in 42-character hexadecimal format; e.g. 0x0000000000000000000000000000000000000000. |
Response
{% tabs %}
{
"states": [
{
"token": 150,
"spec" : {
"name": "HYPE",
"szDecimals": 2,
"weiDecimals": 8,
},
"fullName": "Hyperliquid",
"spots": [107],
"maxSupply": 1000000000,
"hyperliquidityGenesisBalance": "120000",
"totalGenesisBalanceWei": "100000000000000000",
"userGenesisBalances": [
("0xdddddddddddddddddddddddddddddddddddddddd", "428,062,211")...
],
"existingTokenGenesisBalances": [
(1, "0")...
]
}
],
"gasAuction": {
"startTimeSeconds": 1733929200,
"durationSeconds": 111600,
"startGas": "181305.90046",
"currentGas": null,
"endGas": "181291.247358"
}
}
{% endtab %}
Retrieve information about the Spot Pair Deploy Auction
POST https://api.hyperliquid.xyz/info
Note: This returns the status of the Dutch auction for spot pair deployments between existing base and quote tokens. Participation in this auction is permissionless through the same action as the registerSpot phase of base token deployment.
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "spotPairDeployAuctionStatus" |
{% tabs %}
{
"startTimeSeconds":1755468000,
"durationSeconds":111600,
"startGas":"500.0",
"currentGas":"500.0",
"endGas":null
}
{% endtab %}
Retrieve information about a token
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "tokenDetails" |
| tokenId* | String | Onchain id in 34-character hexadecimal format; e.g. 0x00000000000000000000000000000000. |
Response
{% tabs %}
{
"name": "TEST",
"maxSupply": "1852229076.12716007",
"totalSupply": "851681534.05516005",
"circulatingSupply": "851681534.05516005",
"szDecimals": 0,
"weiDecimals": 5,
"midPx": "3.2049",
"markPx": "3.2025",
"prevDayPx": "3.2025",
"genesis": {
"userBalances": [
[
"0x0000000000000000000000000000000000000001",
"1000000000.0"
],
[
"0xffffffffffffffffffffffffffffffffffffffff",
"1000000000.0"
]
],
"existingTokenBalances": []
},
"deployer": "0x0000000000000000000000000000000000000001",
"deployGas": "100.0",
"deployTime": "2024-06-05T10:50:59.434",
"seededUsdc": "0.0",
"nonCirculatingUserBalances": [],
"futureEmissions": "0.0"
}
{% endtab %}
Retrieve outcome metadata
POST https://api.hyperliquid.xyz/info
See the Asset IDs section for the format the API uses to refer to outcomes. Outcomes and questions deployed from a template have the name template:<id>, where <id> is the template's id in the outcomeTemplates response. See the HIP-4 deployment docs for their description format.
Recurring standalone outcomes and questions are named Recurring, and their description is |-separated key:value pairs starting with class. expiry is a UTC time in the format YYYYMMDD-HHMM, and underlying is a perp coin name. Descriptions may contain other keys, which can be ignored.
class:priceBinaryis a standalone outcome, e.g.class:priceBinary|underlying:BTC|expiry:20260526-0600|targetPrice:77363|period:1d. It resolves to Yes if theunderlyingmark price atexpiryis abovetargetPrice.class:priceBucketis a question, e.g.class:priceBucket|underlying:BTC|expiry:20260615-0600|priceThresholds:63250,65831|period:1d, wherepriceThresholdsis<lower>,<upper>. Based on theunderlyingmark price atexpiry:- The outcome with description
index:0resolves to Yes if the price is belowlower. - The outcome with description
index:1resolves to Yes if the price is at leastlowerand belowupper. - The outcome with description
index:2resolves to Yes if the price is at leastupper.
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "outcomeMeta" |
Response
{% tabs %}
{
"outcomes": [
{
"outcome": 123,
"name": "Recurring",
"description": "class:priceBinary|underlying:HYPE|expiry:20260310-1100|targetPrice:34.5|period:3m",
"sideSpecs": [
{
"name": "Yes"
},
{
"name": "No"
}
]
}
]
}
{% endtab %}
Retrieve outcome templates
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "outcomeTemplates" |
Returns all outcome templates. role is one of {"standaloneOutcome": {"sideNames": [...]}}, "question", or {"questionOutcome": {"parent": <question template id>}}. name and description contain {keyword} placeholders, and keywords lists each keyword with its type as [keyword, type] pairs. See the HIP-4 deployment docs for the value format of each type.
Response
{% tabs %}
[
{
"id": "binaryPrice",
"role": { "standaloneOutcome": { "sideNames": ["Yes", "No"] } },
"name": "{perp} above {threshold} at {time}?",
"description": "The market resolves to Yes if the {perp} price is above {threshold} at {time}, and otherwise resolves to No. Settlement is according to the {seconds}-second TWAP of {priceDescription} price ending at {time}. If {perp} is delisted before this market settles, settlement is instead according to the {perp} settlement price at delisting. metadata=category:price|subCategory:N/A|semanticRestriction:This market must refer to the price of a Hyperliquid perp.",
"keywords": [["perp", "hlPerp"], ["priceDescription", "string"], ["seconds", "uInt"], ["threshold", "uDecimal"], ["time", "dateTime"]]
},
{
"id": "policyRateDecision",
"role": "question",
"name": "{institution} {decisionLabel} rate decision",
"description": "This market has three possible results: No change, Decrease, or Increase. Exactly one corresponding named outcome resolves to Yes; the other two and the protocol-created fallback resolve to No. It covers the {decisionLabel} {institution} decision concerning {policyMeasure}, scheduled for {scheduledDecision} UTC (the \"Decision\"). The Decision Value is the numeric value of {policyMeasure} announced by {officialSource}. The Prior Value is the value of that same measure in effect immediately before the Decision. No change resolves to Yes if the Decision Value equals the Prior Value. Decrease resolves to Yes if the Decision Value is lower. Increase resolves to Yes if the Decision Value is higher. If the Decision is rescheduled, the rescheduled decision applies if {officialSource} publishes it by {decisionDeadline} UTC. If the Decision is canceled or postponed without a replacement decision, or no official Decision Value is published by {decisionDeadline} UTC, No change resolves to Yes. Policy changes outside the scheduled Decision are ignored except when establishing the Prior Value. If {institution} replaces {policyMeasure}, the closest official successor measure identified by {officialSource} is used. Resolution uses the initially published decision; later revisions do not change the resolution. {officialSource} is the primary resolution source; independent reputable reporting may be used if it has not published the relevant decision. No change resolves to Yes under the deadline rule above only if neither {officialSource} nor independent reputable reporting establishes a Decision Value by {decisionDeadline} UTC. metadata=category:economics|subCategory:N/A|semanticRestriction:This market must refer to a scheduled policy rate decision by an official institution.",
"keywords": [["decisionDeadline", "dateTime"], ["decisionLabel", "string"], ["institution", "string"], ["officialSource", "string"], ["policyMeasure", "string"], ["scheduledDecision", "dateTime"]]
},
{
"id": "policyRateDecrease",
"role": { "questionOutcome": { "parent": "policyRateDecision" } },
"name": "Decrease",
"description": "This outcome resolves to Yes if the Decision Value is lower than the Prior Value under the parent question's rules.",
"keywords": []
}
]
{% endtab %}
Retrieve information about a settled outcome
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "settledOutcome" |
| outcome* | int | outcome |
Response
{% tabs %}
{
"spec": {
"outcome": 95,
"name": "Recurring",
"description": "class:priceBinary|underlying:BTC|expiry:20260526-0600|targetPrice:77363|period:1d",
"sideSpecs": [
{
"name": "Yes"
},
{
"name": "No"
}
],
"quoteToken": "USDC"
},
"settleFraction": "0.0",
"details": "price:76876.9"
}
{% endtab %}
Retrieve outcome deployer limits
POST https://api.hyperliquid.xyz/info
Headers
| Name | Value |
|---|---|
| Content-Type* | "application/json" |
Body
| Name | Type | Description |
|---|---|---|
| type* | String | "outcomeDeployerLimits" |
| venue* | String | venue name |
Response
{% tabs %}
{
"nDailyOutcomesRemaining": 50,
"nActiveOutcomesRemaining": 14
}
{% endtab %}