Skip to content

World Cup Liquidity Rewards

World Cup API

How Outcome rewards two-sided liquidity and trading across the World Cup champion market and every World Cup match market.

This technical reference explains how rewards are scored and paid so makers and takers can reason about the program and update their strategies with confidence.

The program runs from the opening match on June 11 through the final on July 19. It has two independent reward programs:

  1. The champion market, covering the single "2026 World Cup champion?" market for the full tournament.
  2. The match markets, covering every World Cup match, with rewards published per match each day.

Both programs share the same core philosophy and building blocks. They differ in budget allocation and a small number of scoring parameters. Rewards are paid in USDC on Hyperliquid. All trading takes place on Outcome.xyz, and reward computation infrastructure is operated by Monarch.

Core Philosophy

The program pays for liquidity that is genuinely useful to traders: deep, two-sided depth posted close to fair value, with more reward weight directed to the markets and moments that need liquidity most. It stays simple enough that makers can reason about it and continuously adjust.

Three ideas apply across the program:

  • Near fair value: Only orders inside a scored band around the current mid earn, and orders closer to the mid earn more.
  • Two-sided: Useful depth on bids and asks is scored, and two-sided quotes receive a multiplier.
  • Useful: Quotes that actually get filled earn an additional reward, and a smaller share is set aside for takers who use that liquidity.

Shared Concepts

Settlement and Price Convention

A YES contract settles at 1.00 if the outcome occurs and 0.00 if it does not. Order prices range from 0 to 1, a price in this range is equivalent to the implied probability, where one cent equals one percentage point of probability. e.g. 56 cents = 56% implied probability.

Hyperliquid Mid

hyperliquid_mid is the mid price of the market's order book on Hyperliquid. It is used for distance scoring, quote depth scoring, maker fill scoring, taker fill scoring, and probability-weighted reward scoring.

Reward Split

Within each reward budget, the same split applies:

ComponentShareWhat it pays for
Quote rewards50%Sustained displayed depth near fair value.
Maker fill rewards40%Maker-side fills, proving useful liquidity.
Taker fill rewards10%Taker-side fills, to bootstrap real usage.

Maker fill rewards pay the execution of resting orders. Combined with quote rewards, the large majority of every budget flows to liquidity providers, with a smaller taker incentive on top.

Builder Code Eligibility

Only orders and trades placed on Outcome.xyz are eligible for rewards. Eligible activity must use the Outcomexyz builder code with the addresses attached to all orders:

text
0xab5dbc057628bc18523c4cdfc0e1e2ebdbecb704

There is currently no additional fee for using the builder code. This keeps attribution simple and makes reward accounting auditable without adding extra trading cost.

Scoring Data

Quote scoring is calculated by recording the live orderbook during the incentivized period. This score is summed up individually for each maker over every block where the scoring criteria relative to that block's mid price is applied.

Quote Depth Scoring

Quote rewards are based on scored bid depth and scored ask depth. One-sided liquidity can score, but balanced two-sided liquidity earns more.

A market block only scores if the maker has at least 50 USD of raw displayed bid-plus-ask order notional inside the scored band, before distance, time, live, two-sided, or probability multipliers:

text
raw_bid_notional_usd + raw_ask_notional_usd >= 50 USD

Each reward program defines how side scores, live multipliers, and the two-sided multiplier are applied. The two-sided multiplier is evaluated independently for every market a maker quotes. Balanced liquidity in one market does not improve the score in another.

Reward Program 1: Champion Market

Market Structure

"2026 World Cup champion?" is a multi-outcome market. The program scores each team's selected YES winner book once. The scored book is the outcome YES-frame book: Monarch reconstructs the selected YES child plus its sibling NO placement stream, mirrors sibling prices as 1 - price, flips bid/ask, and scores the merged liquidity once under the selected YES child. NO book scoring is not a separate reward surface, but NO-placed liquidity and fills on the selected sibling can contribute once after normalization.

Reward Budget

text
daily_pool = 1,000 USD
reward_period = 1 day
quote_reward_pool = 50%
maker_fill_pool = 40%
taker_fill_pool = 10%
payout_method = pro-rata by probability-weighted score

There is one shared daily pool for the full champion campaign and no fixed budget per team.

Team Eligibility

Eligibility is set once per reward day using a blended mid. The blended mid is only used for daily eligibility, not intraday scoring. The eligible team list is published before the start of each reward day, targeted for 09:00 UTC, on the Outcome frontend and via Monarch's API.

text
eligibility_mid = internal blended mid
team is day-eligible if eligibility_mid >= 1.00% and eligibility_mid <= 99.00%

The day-start list avoids constant eligibility churn during the day. If a team is eliminated, scoring for that team stops immediately.

Scoreable Blocks

During the day, quote depth, maker fills, and taker fills only score in blocks where the Hyperliquid mid stays inside the scoring thresholds:

text
block is scoreable if current_hyperliquid_mid >= 1.00% and current_hyperliquid_mid <= 99.00%

If a team starts above 1.00% but the Hyperliquid mid falls below it, blocks below 1.00% score zero, and scoring resumes if the mid moves back above 1.00%. The same applies symmetrically at 99.00%. Eliminated teams stop scoring immediately.

Distance Multiplier

The champion program uses a fixed 3.00 cent distance curve. Orders only score inside the 1.00% to 99.00% rewardable range.

text
distance_cents = abs(order_price - hyperliquid_mid) * 100
max_distance = 0.03
max_distance_cents = 3.00

lower_scored_bound = max(0.01, hyperliquid_mid - max_distance)
upper_scored_bound = min(0.99, hyperliquid_mid + max_distance)

if lower_scored_bound <= order_price <= upper_scored_bound:
  distance_multiplier = ((3 - distance_cents) / 1.5) ^ 2
else:
  distance_multiplier = 0

Orders outside the scored band receive zero score. The fixed curve keeps the same multiplier across all markets.

Worked cutoffs:

Hyperliquid midMax distanceScored band
16.00%3.00 cents13.00% to 19.00%
1.10%3.00 cents1.00% to 4.10%
98.50%3.00 cents95.50% to 99.00%

Quote Depth Score

For each maker, team, and block:

text
raw_bid_notional_usd = sum(bid_order_notional_usd inside the scored band)
raw_ask_notional_usd = sum(ask_order_notional_usd inside the scored band)
raw_in_band_notional_usd = raw_bid_notional_usd + raw_ask_notional_usd

bid_side_score = sum(bid_order_notional_usd * distance_multiplier)
ask_side_score = sum(ask_order_notional_usd * distance_multiplier)

depth_score = bid_side_score + ask_side_score

if max(bid_side_score, ask_side_score) > 0:
  balance_ratio = min(bid_side_score, ask_side_score) / max(bid_side_score, ask_side_score)
else:
  balance_ratio = 0

two_sided_multiplier = 1 + 2 * balance_ratio

if raw_in_band_notional_usd >= 50:
  team_block_score = depth_score * two_sided_multiplier
else:
  team_block_score = 0

The multiplier ranges from 1.00x for one-sided liquidity to 3.00x for fully balanced two-sided liquidity.

Probability-Weighted Scoring

At the end of the daily reward period, each team's average daily Hyperliquid mid is converted into an adjusted probability weight, with a 2% minimum applied before normalization:

text
daily_mean_hyperliquid_mid = average hyperliquid_mid across valid blocks for the team
adjusted_probability_weight = max(0.02, daily_mean_hyperliquid_mid)
normalization_total = sum(adjusted_probability_weight across eligible teams)
team_score_weightage = adjusted_probability_weight / normalization_total

final_team_block_score = team_block_score * team_score_weightage

Reward weight follows the market's own probability distribution, so attention flows to the contenders, while the 2% minimum keeps eligible lower-probability teams worth quoting. Adjusted probability weights can sum to more than 100% before normalization, but team_score_weightage is the actual normalized weight and always sums to 1.00 across eligible teams.

We publish the eligible team list each day. Example weightings may be published alongside it for reference; those figures are illustrative and are not a guaranteed per-team budget.

Champion Rewards

Quote reward, per maker:

text
maker_quote_score = sum(final_team_block_score across eligible teams and blocks)
maker_quote_reward =
  quote_reward_pool * daily_pool * maker_quote_score / total_maker_quote_score

Maker fill reward, per maker-side fill on an eligible, non-eliminated team while the Hyperliquid mid is inside the scoring thresholds and the builder code is used:

text
maker_fill_score = maker_fill_notional_usd * team_score_weightage
maker_fill_reward =
  maker_fill_pool * daily_pool * maker_fill_score / total_maker_fill_score

Taker fill reward, per taker-side fill under the same conditions:

text
taker_fill_score = taker_fill_notional_usd * team_score_weightage
taker_fill_reward =
  taker_fill_pool * daily_pool * taker_fill_score / total_taker_fill_score

Final payout, per wallet:

text
total_reward = maker_quote_reward + maker_fill_reward + taker_fill_reward

Reward Program 2: Match Markets

Market Structure

Daily match campaigns apply to all World Cup match markets for that reward day. For each match, the program scores the mutually exclusive YES outcome books:

Group-stage matches score three YES books:

text
Team 1 wins YES
Team 2 wins YES
Draw YES

Knockout matches score one selected YES-frame book. The sibling NO placement stream is normalized into that book before scoring, but NO books are not scored as separate reward surfaces:

text
Team 1 wins/progresses YES (equivalent to Team 2 loses/knocked out)

Reward Budget

For each match, Monarch publishes the match list, reward amount, scheduled kickoff time, and incentive window at the 09:00 UTC update before the incentive window begins.

text
reward_period = match incentive window
quote_reward_pool = 50%
maker_fill_pool = 40%
taker_fill_pool = 10%
payout_method = pro-rata by score

Match reward amounts scale with tournament stage:

StageReward amount
Group stage100 USD per match
Round of 32200 USD per match
Round of 16400 USD per match
Quarter finals600 USD per match
Semi finals1,000 USD per match
Third place600 USD for the match
Final2,000 USD for the match

The match reward is split equally across its scored YES outcomes, so the program buys liquidity across the full match surface:

text
scored_outcome_count = number of scored YES outcomes for the match
outcome_reward_amount = match_reward_amount / scored_outcome_count
outcome_quote_pool = 50% * outcome_reward_amount
outcome_maker_fill_pool = 40% * outcome_reward_amount
outcome_taker_fill_pool = 10% * outcome_reward_amount

Incentive Window

text
incentive_start_time = scheduled_kickoff_time - 24 hours
incentive_end_time = final whistle, or when penalties are resolved if the match goes to penalties

Orders and trades only score inside the match incentive window. This gives makers time to build pre-match liquidity while keeping rewards focused on markets close enough to kickoff to matter.

The stored match configuration includes the tournament stage for reward setup, but the public daily-matches API does not expose stage. The public 09:00 UTC match response includes the match id, reward amount, scheduled kickoff time, incentive start time, incentive end rule, status, live multiplier, and scored outcomes.

Scoreable Blocks

A block scores only where the market can support useful trading and the Hyperliquid mid is inside the scoring thresholds:

text
block is inside the match incentive window
market is active
market is not resolved
hyperliquid_mid is available
current_hyperliquid_mid >= 1.00%
current_hyperliquid_mid <= 99.00%

Blocks before the start time or after the end time score zero. If the mid leaves the 1.00% to 99.00% band, those blocks score zero and resume when it returns. If a market is paused, halted, cancelled, stale, or missing a reliable Hyperliquid mid, those blocks score zero. If a market resolves or becomes impossible to trade normally, scoring stops immediately.

Live Match Multiplier

Liquidity and fills during the live match receive a 3x multiplier, directing rewards toward the period when match markets need liquidity most:

text
if the match is live:
  live_multiplier = 3
else:
  live_multiplier = 1

The live window runs from the kickoff whistle to the final whistle, or until penalties are resolved. It does not apply before kickoff, after the match ends, while the market is paused or halted, or when normal live trading is not supported.

Distance Multiplier

Match markets move quickly, so the program uses a fixed 5.00 cent cutoff with a curve that still pays more for liquidity closer to fair value:

text
distance_cents = abs(order_price - hyperliquid_mid) * 100
max_distance_cents = 5.00

if distance_cents <= max_distance_cents:
  distance_multiplier = ((5 - distance_cents) / 2.5) ^ 2
else:
  distance_multiplier = 0

An order at the mid earns a multiplier of 4x, falling to 0 at exactly 5.00 cents away. Orders more than 5.00 cents from the mid score zero.

Quote Depth Score

For each maker, match, outcome, and block:

text
raw_bid_notional_usd = sum(bid_order_notional_usd inside the scored band)
raw_ask_notional_usd = sum(ask_order_notional_usd inside the scored band)
raw_in_band_notional_usd = raw_bid_notional_usd + raw_ask_notional_usd

base_bid_side_score = sum(bid_order_notional_usd * distance_multiplier)
base_ask_side_score = sum(ask_order_notional_usd * distance_multiplier)

bid_side_score = base_bid_side_score * live_multiplier
ask_side_score = base_ask_side_score * live_multiplier

depth_score = bid_side_score + ask_side_score

if max(bid_side_score, ask_side_score) > 0:
  balance_ratio = min(bid_side_score, ask_side_score) / max(bid_side_score, ask_side_score)
else:
  balance_ratio = 0

two_sided_multiplier = 1 + 2 * balance_ratio

if raw_in_band_notional_usd >= 50:
  match_block_score = depth_score * two_sided_multiplier
else:
  match_block_score = 0

Match Rewards

Quote reward, per maker, summed over scored outcomes:

text
maker_outcome_quote_score = sum(match_block_score across eligible blocks)
maker_outcome_quote_reward =
  outcome_quote_pool * maker_outcome_quote_score / total_maker_outcome_quote_score
maker_quote_reward = sum(maker_outcome_quote_reward across matches and scored outcomes)

Maker fill reward, per maker-side fill on a scored outcome under the block conditions and builder code:

text
maker_outcome_fill_score = maker_fill_notional_usd * live_multiplier
maker_outcome_fill_reward =
  outcome_maker_fill_pool * maker_outcome_fill_score / total_maker_outcome_fill_score
maker_fill_reward = sum(maker_outcome_fill_reward across matches and scored outcomes)

Taker fill reward, per taker-side fill under the same conditions:

text
taker_outcome_fill_score = taker_fill_notional_usd * live_multiplier
taker_outcome_fill_reward =
  outcome_taker_fill_pool * taker_outcome_fill_score / total_taker_outcome_fill_score
taker_fill_reward = sum(taker_outcome_fill_reward across matches and scored outcomes)

Final payout, per wallet:

text
total_reward = maker_quote_reward + maker_fill_reward + taker_fill_reward

Exclusions

Across both programs, the following do not score:

  • Markets that are paused, halted, cancelled, stale, or resolved.
  • Blocks outside the eligible period: the reward day for the champion market, or the incentive window for matches.
  • Blocks without a reliable Hyperliquid mid.
  • Blocks where the Hyperliquid mid is below 1.00% or above 99.00%.
  • Orders outside the scored band: 3.00 cents for the champion market, 5.00 cents for matches.
  • Teams that were not eligible at reward-day start, and eliminated teams in the champion market.
  • NO books as separate reward surfaces; NO-placed liquidity and fills only score once when they belong to the selected sibling and are normalized into the selected YES-frame book.
  • Orders or trades that do not use the @Outcomexyz builder code.
  • Self-trades, related-wallet churn, wash trading, and circular volume.

These exclusions remove the most obvious ways to be paid for liquidity that is stale, duplicated, fake, unattributable, or not useful.

Payout and Settlement

Rewards are paid in USDC on Hyperliquid, pro-rata within each reward pool, based on each wallet's share of scored activity. There are no fixed per-wallet caps. The champion market settles each day; match rewards settle per incentive window.

Quick Reference

ItemChampion marketMatch markets
ScopeOne market, full tournament, eligible teams published dailyEvery match, published daily
Reward period1 dayMatch incentive window
Budget1,000 USD per day100 to 2,000 USD per match by stage
Split50 / 40 / 1050 / 40 / 10
Scored booksEach team's YES bookMutually exclusive YES books
Distance cutoffFixed 3.00 centsFixed 5.00 cents
At-mid multiplier4.00x4.00x
Live multiplierNone3x during live play
WeightingProbability-weighted, 2% min weight, normalizedEqual split across scored outcomes
Scoring thresholds1.00% to 99.00%1.00% to 99.00%
Minimum depth50 USD raw in-band bid+ask notional50 USD raw in-band bid+ask notional
Two-sided multiplier1.00x to 3.00x1.00x to 3.00x

Monarch docs live in the monorepo and deploy separately from the app.