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
targetPriceandexpiryto traders or pricing engines - Map
Yes/NoSides — Build UI affordances and routing for each side defined insideSpecs - Handle Recurrence — Detect when the prior recurring contract has rolled into the next period
- Surface Prediction Questions — Render any one-off
questionsreleased as named markets
Common Use Cases
1. Read the Live Recurring Binary
Pull the active BTC daily binary and surface its strike and expiry:
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:
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:
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:
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
- Parse
descriptiondefensively — Treat unknown segments as opaque so future fields (additionalclassvalues, multi-leg specs) don't break your parser - Don't hardcode
Yes/No— Drive UI fromsideSpecsto stay forward-compatible with multi-outcome markets - Refresh on schedule — The recurring outcome ID changes each
period; poll near theexpirytime or after settlement - Treat
questionsas additive — The array is empty today but will populate as one-off prediction markets launch - Use
expiryin UTC —YYYYMMDD-HHMMis 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:
class:priceBinary|underlying:BTC|expiry:20260506-0600|targetPrice:80930|period:1d| Segment | Meaning |
|---|---|
class | Outcome class. priceBinary means a binary payoff (1 if Yes resolves true, otherwise 0) based on a price comparison. |
underlying | Asset whose mark price the outcome settles against (e.g., BTC). |
expiry | Settlement time in YYYYMMDD-HHMM UTC. The recurring binary always uses 0600 UTC. |
targetPrice | Strike. Yes settles to 1 if the underlying mark price is above this at expiry; otherwise No settles to 1. |
period | Recurrence cadence. 1d indicates a fresh contract is created daily once the previous one settles. |
Related Endpoints
- 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
- HIP-4: Outcome markets — Specification and rollout details
Track HIP-4 outcome markets with Dwellir's HyperCore Info Endpoint. Get your API key →
openOrders
Get all open limit orders for any user on Hyperliquid, including order details, prices, sizes, and timestamps.
perpDexs
Get all perpetual DEXs deployed on Hyperliquid. Query deployer details, listed assets, open interest caps, funding multipliers, fee configuration, and sub-deployer permissions.