GET /basis/{coin}
GET /basis/{coin}
Section titled “GET /basis/{coin}”Two different measurements for one market:
perp_premium_bps, the perp premium: Hyperliquid’s mark price against Hyperliquid’s own oracle price. This is the premium that funding follows, and the onedirection,signalandinterpretationdescribe.oracle_divergence_bps: Hyperliquid’s oracle (a weighted median of exchange spot prices) against Chainlink’s spot price on Arbitrum. Both are spot references, so this measures how far two spot sources disagree, not funding pressure.
basis_bps and basis_pct are kept for old clients and are deprecated. They carry the oracle vs Chainlink
gap, as they always have, not the perp premium.
Request
Section titled “Request”GET https://api.cerebruspulse.xyz/basis/{coin}Path Parameters
Section titled “Path Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
coin | string | Yes | Token symbol (BTC, ETH, SOL). It needs a Chainlink feed in the snapshot (38 on 2026-09-24, BTC, ETH, SOL, LINK, ARB, DOGE, AVAX, NEAR, AAVE, UNI, OP and PEPE among them) and a Hyperliquid market. An unsupported coin gets a 400 listing the available ones, not charged. |
Response
Section titled “Response”All prices are USD per single token, including for 1000-token markets such as PEPE.
| Field | Type | Description |
|---|---|---|
endpoint | string | basis |
coin | string | The symbol, upper-case |
market_symbol | string | Hyperliquid’s name for the market (kPEPE for PEPE) |
price_unit | string | 1 <coin>: every price here is per token |
timestamp_iso | string | When the response was computed (UTC) |
basis.hl_mark_px | number | Hyperliquid mark price |
basis.hl_oracle_px | number | Hyperliquid oracle price |
basis.chainlink_spot_px | number | Chainlink spot price (Arbitrum) |
basis.perp_premium_bps | number | Perp premium: (hl_mark_px − hl_oracle_px) / hl_oracle_px × 10000 |
basis.premium_index_bps | number | null | Hyperliquid’s own premium sample (impact prices against the oracle) in basis points, which its funding averages |
basis.oracle_divergence_bps | number | null | (hl_oracle_px − chainlink_spot_px) / chainlink_spot_px × 10000; null, with the warning chainlink_price_implausible, when the two differ by more than 2× |
basis.basis_bps | number | null | Deprecated: the same value as oracle_divergence_bps (see meta.deprecated) |
basis.basis_pct | number | null | Deprecated: basis_bps in percent |
basis.direction | string | hl_premium, hl_discount or aligned: the sign of perp_premium_bps |
basis.signal | string | A label for the premium’s size and sign: neutral (−10 to 10 bps), mildly_bullish (10 to 50), mildly_bearish (−50 to −10), bearish_contrarian (above 50), bullish_contrarian (below −50). A description of the premium, not a recommendation |
basis.interpretation | string | The label in words |
meta | object | Common metadata (Response Schemas) |
meta.offering | string | pulse_basis |
meta.basis_definition | string | The two definitions above, as text |
meta.deprecated | object | Fields kept for old clients, each with what to read instead |
meta.chainlink_data_age_seconds | number | null | Age of the Chainlink snapshot. Above 120 seconds, meta.warning is stale_chainlink_data |
meta.chainlink_round_age_seconds | number | null | Age of the Chainlink round behind the price, when the snapshot records it; null otherwise |
meta.chainlink_feed_network | string | arbitrum |
meta.hl_source | string | mark_and_oracle |
Example
Section titled “Example”GET /basis/BTC: real engine output on market data captured at 2026-09-24 17:05 UTC. Lists are cut to 3 items. Live responses may also carry meta.disclaimer, which the gateway adds.
{ "endpoint": "basis", "coin": "BTC", "market_symbol": "BTC", "price_unit": "1 BTC", "timestamp_iso": "2026-09-24T17:05:00Z", "basis": { "hl_mark_px": 84517, "hl_oracle_px": 84539, "chainlink_spot_px": 84501.01946422, "perp_premium_bps": -2.6, "premium_index_bps": -4.61, "oracle_divergence_bps": 4.49, "basis_bps": 4.49, "basis_pct": 0.0449, "direction": "hl_discount", "signal": "neutral", "interpretation": "Perp trades at its oracle price: no significant premium" }, "meta": { "provider": "Cerebrus Pulse", "offering": "pulse_basis", "execution_ms": 0, "basis_definition": "perp_premium_bps: Hyperliquid mark vs its oracle (perp premium), which direction, signal and interpretation describe; oracle_divergence_bps: Hyperliquid oracle vs Chainlink spot, which basis_bps has always carried", "deprecated": { "basis.basis_bps": "the Hyperliquid oracle vs Chainlink spot gap, not the perp premium; read basis.oracle_divergence_bps, or basis.perp_premium_bps for the premium", "basis.basis_pct": "basis.basis_bps / 100; read basis.oracle_divergence_bps" }, "data_age_seconds": 60, "chainlink_data_age_seconds": 55.6, "chainlink_round_age_seconds": null, "chainlink_feed_network": "arbitrum", "hl_source": "mark_and_oracle", "sources": [ { "name": "Hyperliquid", "url": "https://hyperliquid.xyz" }, { "name": "Chainlink Data Feeds (Arbitrum One)", "url": "https://data.chain.link" } ] }}Errors
Section titled “Errors”| Status | Reason |
|---|---|
| 400 | No Chainlink feed or Hyperliquid market for the coin, or no snapshot yet (not charged) |
| 402 | Payment required (the standard x402 flow) |
| 429 | Rate limit exceeded |
| 503 | Service disabled, payments down, or an upstream feed is missing or stale; no price is quoted |
| 504 | Engine timeout (not charged) |