Docs

outcomeMeta - HyperCore Info Endpoint

Get HIP-4 outcome market metadata on Hyperliquid, including the live recurring binary outcome, target price, expiry, side specifications, and any one-off prediction-market questions.

Get metadata for HIP-4 outcome markets currently live on HyperCore, including each active outcome's ID, target price, expiry, side specifications, recurrence cadence, and any one-off prediction-market questions.

Authenticate by including your Dwellir API key in the URL path: https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info.

When to Use This Endpoint

The outcomeMeta endpoint is essential for any application that interacts with HIP-4 outcome markets:

  • Discover Live Outcomes — Enumerate outcome IDs currently tradeable on HyperCore
  • Read the Strike & Expiry — Surface the targetPrice and expiry to traders or pricing engines
  • Map Yes / No Sides — Build UI affordances and routing for each side defined in sideSpecs
  • Handle Recurrence — Detect when the prior recurring contract has rolled into the next period
  • Surface Prediction Questions — Render any one-off questions released as named markets

Common Use Cases

1. Read the Live Recurring Binary

Pull the active BTC daily binary and surface its strike and expiry:

JavaScript
async function getActiveBinary() {
  const meta = await getOutcomeMeta();

  const recurring = meta.outcomes.find(o => o.name === 'Recurring');
  if (!recurring) return null;

  const spec = Object.fromEntries(
    recurring.description.split('|').map(part => {
      const [key, ...rest] = part.split(':');
      return [key, rest.join(':')];
    })
  );

  return {
    outcomeId: recurring.outcome,
    underlying: spec.underlying,
    targetPrice: Number(spec.targetPrice),
    expiry: spec.expiry, // YYYYMMDD-HHMM UTC
    period: spec.period,
    sides: recurring.sideSpecs.map(s => s.name)
  };
}

2. Detect a Period Roll

Recurring outcomes refresh on a fixed cadence — the outcome ID changes each period. Cache the previous ID and detect rolls:

JavaScript
let lastOutcomeId = null;

async function watchForRoll() {
  const meta = await getOutcomeMeta();
  const recurring = meta.outcomes.find(o => o.name === 'Recurring');
  if (!recurring) return;

  if (lastOutcomeId !== null && recurring.outcome !== lastOutcomeId) {
    console.log(`Period rolled: ${lastOutcomeId} -> ${recurring.outcome}`);
  }
  lastOutcomeId = recurring.outcome;
}

3. Render Yes / No Sides

Build the trade UI from sideSpecs rather than hardcoding labels — multi-outcome markets will return more than two sides:

JavaScript
function renderSides(outcome) {
  return outcome.sideSpecs.map(side => ({
    label: side.name,
    instrumentKey: `${outcome.outcome}:${side.name}`
  }));
}

4. Surface One-Off Questions

When prediction-market questions roll out, they appear in the questions array alongside recurring outcomes:

JavaScript
async function listAllMarkets() {
  const meta = await getOutcomeMeta();

  return [
    ...meta.outcomes.map(o => ({ kind: 'outcome', id: o.outcome, label: o.name })),
    ...meta.questions.map((q, idx) => ({ kind: 'question', id: idx, label: q.name ?? 'question' }))
  ];
}

Best Practices

  1. Parse description defensively — Treat unknown segments as opaque so future fields (additional class values, multi-leg specs) don't break your parser
  2. Don't hardcode Yes / No — Drive UI from sideSpecs to stay forward-compatible with multi-outcome markets
  3. Refresh on schedule — The recurring outcome ID changes each period; poll near the expiry time or after settlement
  4. Treat questions as additive — The array is empty today but will populate as one-off prediction markets launch
  5. Use expiry in UTCYYYYMMDD-HHMM is always UTC; convert before display

HIP-4 Context

HIP-4 is the Hyperliquid Improvement Proposal that introduces outcome markets as a new HyperCore primitive. Outcomes are fully collateralized, dated contracts that settle to a value within a fixed range (typically 0 or 1), giving HyperCore non-linear and prediction-market style payoffs without leverage or liquidation risk. Today the only outcome live on mainnet is the recurring binary BTC outcome, which settles every day at 06:00 UTC against the BTC mark price on HyperCore. Multi-outcome and one-off markets are planned future phases.

The outcomeMeta endpoint is the canonical place to discover what is currently live: the outcome ID needed to trade or query positions, the underlying asset, the strike (targetPrice), the next expiry, and the available sideSpecs (typically Yes and No). Any outstanding one-off prediction-market questions appear in the questions array; for the current recurring-only deployment this is empty.

Decoding the description String

Each outcome carries a pipe-delimited description string that fully specifies the contract:

Text
class:priceBinary|underlying:BTC|expiry:20260506-0600|targetPrice:80930|period:1d
SegmentMeaning
classOutcome class. priceBinary means a binary payoff (1 if Yes resolves true, otherwise 0) based on a price comparison.
underlyingAsset whose mark price the outcome settles against (e.g., BTC).
expirySettlement time in YYYYMMDD-HHMM UTC. The recurring binary always uses 0600 UTC.
targetPriceStrike. Yes settles to 1 if the underlying mark price is above this at expiry; otherwise No settles to 1.
periodRecurrence cadence. 1d indicates a fresh contract is created daily once the previous one settles.
  • meta — Get perpetual market metadata
  • spotMeta — Get spot trading asset metadata
  • clearinghouseState — Inspect a user's HyperCore positions, including outcome positions
  • exchangeStatus — Monitor exchange health before trading

External References


Track HIP-4 outcome markets with Dwellir's HyperCore Info Endpoint. Get your API key →