← Back to blog
·12 min read·SettleRisk Team

Dispute Pricing Explained: Why Mid-Price Isn't Fair Price

pricingdisputesmarket-making

If you're trading or making markets in prediction market contracts, you're probably using mid-price as your reference point. That works when resolution is certain and immediate. But when there's a meaningful probability of disputes, the mid-price overstates fair value. Understanding exactly how much it overstates -- and being able to quantify the gap -- is what separates systematic traders from everyone else.

The Problem with Mid-Price

Mid-price reflects the market's consensus on event probability. A contract trading at $0.65 implies a 65% chance the event occurs. But this ignores a critical question: what happens if the contract doesn't resolve cleanly?

Consider a market with:

  • Mid-price: $0.65
  • Dispute probability: 23%
  • Expected settlement delay: 48 hours

During a dispute, your capital is locked. You can't redeploy it. You can't exit your position. And the resolution might not go the way you expected. These costs are real, they are quantifiable, and ignoring them means you are systematically overpaying for contracts. For deeper context on what resolution risk means and why it matters, see our resolution risk primer and the full methodology documentation.

The Math Behind Risk Premium

Our pricing engine starts from a deterministic risk score between 0 and 100. The score itself is built from platform base points, driver contributions, mitigation adjustments, and complexity penalties (see our full scoring methodology for details). From that score, we derive the dispute probability heuristic:

p_dispute = clamp(
  0.01 + 0.003 * aggregate_risk_score
  + 0.05 * I(platform == polymarket)
  + 0.06 * I(risk_tier == CRITICAL),
  0.0, 0.90
)

The I(...) terms are indicator functions: they equal 1 when the condition is true, 0 otherwise. Polymarket carries a platform premium because on-chain oracle challenge mechanisms introduce additional dispute surface area. The CRITICAL tier bump reflects the empirical observation that markets scoring 75+ have qualitatively different dispute dynamics.

From p_dispute, we compute the resolution risk premium in basis points:

resolution_risk_premium_bps = 5
  + 40 * p_dispute
  + 20 * I(risk_tier == HIGH)
  + 60 * I(risk_tier == CRITICAL)

For a Polymarket contract with a risk score of 67 (HIGH tier):

  • p_dispute = clamp(0.01 + 0.003 * 67 + 0.05 * 1 + 0.06 * 0, 0, 0.90) = 0.261
  • resolution_risk_premium_bps = 5 + 40 * 0.261 + 20 * 1 + 60 * 0 = 35.44, rounded to 35 bps

That 35 bps is the minimum compensation you need for bearing the resolution risk alone, before capital lockup costs enter the picture.

Breaking Down Fair Price

SettleRisk's pricing engine decomposes the true fair price into four components:

1. Risk Premium

The risk premium is the price discount for bearing resolution risk. It reflects the probability-weighted cost of adverse resolution outcomes, computed from the formulas above.

For our running example with a Polymarket market scoring 67 (HIGH tier), p_dispute of 0.261 yields a risk premium of 35 bps. On a $25,000 notional position, that is $87.50 -- not a rounding error.

2. Capital Lockup Cost

When capital is frozen during a dispute, you're paying an opportunity cost. We model expected delay using a lognormal distribution parameterized by platform baselines and risk-adjusted multipliers. The capital lockup cost is then:

expected_lockup_years = expected_settlement_delay_hours / (24 * 365)
capital_lockup_cost_bps = annual_capital_cost_apr * expected_lockup_years * 10000

The next section walks through multiple worked examples at different APRs and delay scenarios.

3. Fair Spread

The fair spread is the minimum bid-ask spread a market maker should charge to be compensated for resolution risk. It combines the risk premium and capital lockup cost into a single actionable number:

recommended_spread_bps = base_spread_bps
  + resolution_risk_premium_bps
  + capital_lockup_cost_bps

If you are already quoting a base spread of 50 bps for execution risk and adverse selection, the fair spread adds the resolution risk components on top. This is the number you actually plug into your quoting engine.

4. Adjusted Fair Price

The final output: the reference price adjusted for all resolution risk costs. In v1, the adjusted fair price is the input price (mid_price or p_event) itself -- the risk adjustments are expressed through the spread and premium fields rather than shifting the price. This keeps the pricing engine composable: you decide how to apply the premiums to your strategy.

Capital Lockup: Worked Examples

The capital lockup cost depends heavily on your cost of capital and the expected delay duration. Here's how the math plays out across different scenarios:

| Scenario | Delay (hours) | APR | Lockup (years) | Cost (bps) | Cost on $50k | |----------|:---:|:---:|:---:|:---:|:---:| | LOW risk, Kalshi, low APR | 4 | 8% | 0.000457 | 0.37 | $0.18 | | LOW risk, Kalshi, high APR | 4 | 20% | 0.000457 | 0.91 | $0.46 | | MEDIUM risk, Polymarket | 18 | 12% | 0.00205 | 2.47 | $1.23 | | HIGH risk, Polymarket | 48 | 12% | 0.00548 | 6.58 | $3.29 | | HIGH risk, high APR | 48 | 20% | 0.00548 | 10.96 | $5.48 | | CRITICAL risk, Polymarket | 200 | 12% | 0.02283 | 27.40 | $13.70 | | CRITICAL risk, high APR | 200 | 20% | 0.02283 | 45.66 | $22.83 |

At low risk tiers, lockup cost is negligible -- sub-basis-point. But once you hit HIGH or CRITICAL tiers with delays stretching into days, it starts to compound meaningfully, especially for traders running at higher costs of capital (leveraged positions, borrowed funds, or DeFi yield opportunity costs). For a deeper dive into how we model the delay distribution itself, see our settlement delay modeling guide.

When Disputes Create Arbitrage

Mispriced resolution risk creates exploitable opportunities in both directions. If the market does not discount for resolution risk but you do, you can systematically sell overpriced contracts. Conversely, if the market over-discounts -- perhaps due to a recent high-profile dispute in an unrelated market creating sector-wide fear -- you can buy contracts below their risk-adjusted fair value.

Consider two Polymarket contracts on closely related events:

  • Market A: risk score 22 (MEDIUM), p_dispute = 0.126, mid-price $0.70. Resolution risk premium is 10 bps. The market is essentially clean.
  • Market B: risk score 68 (HIGH), p_dispute = 0.264, mid-price $0.70. Resolution risk premium is 36 bps. The market has a single-source URL dependency and temporal ambiguity in its rules.

Both trade at $0.70. A naive trader sees identical contracts. A risk-aware trader sees that Market B should be quoted 26 bps wider than Market A. If you are selling Market B at $0.70 without adjusting for resolution risk, you are giving away edge.

The arbitrage becomes even more concrete in batch scenarios. Suppose you're running a market-making strategy across 200 contracts. Without dispute pricing, you are quoting the same spread on all of them. With dispute pricing, you widen on the 30 contracts in HIGH/CRITICAL tiers and tighten on the 100 contracts in LOW tier -- capturing the resolution risk premium on every fill. Over thousands of trades, this compounds into a significant P&L advantage. Explore real examples in our case studies.

Portfolio-Level Dispute Pricing

Individual contract pricing is necessary but not sufficient. When you hold multiple positions, dispute risk aggregates in ways that are not purely additive.

The key insight is correlation. If you hold ten contracts that all depend on the same resolution source URL, a single source failure triggers disputes on all ten simultaneously. Your capital lockup is not 10 independent events -- it is one correlated event locking up 10x the capital.

SettleRisk's batch pricing endpoints let you price up to 1,000 contracts in a single call. At the portfolio level, you should consider:

  1. Source concentration risk: Group positions by their resolution-critical URLs. If a single URL failure would trigger disputes on 15% of your book, your effective lockup cost is much higher than the sum of individual costs.
  2. Platform concentration risk: Polymarket carries a 5% p_dispute platform premium (from the 0.05 * I(polymarket) term). A book concentrated on Polymarket has higher aggregate dispute exposure than a diversified cross-platform book.
  3. Tier distribution: Monitor what percentage of your notional sits in each risk tier. A portfolio with 40% of capital in HIGH/CRITICAL markets needs substantially wider average spreads to remain profitable after dispute costs.
  4. Correlated delays: During platform-level events (oracle outages, governance disputes), delay distributions shift upward across all markets on that platform simultaneously.

A practical heuristic: compute your portfolio-weighted average p_dispute and compare it to your realized dispute rate. If your weighted average exceeds 15%, you are carrying meaningful tail risk and should consider trimming HIGH/CRITICAL positions or widening quotes further. See our features overview for details on batch pricing and portfolio analytics.

Fair Price vs. Mid-Price: Comparison by Risk Tier

The table below shows how the gap between mid-price and risk-adjusted fair spread widens across tiers. All examples assume a Polymarket contract with annual_capital_cost_apr = 0.12:

| Risk Tier | Score | p_dispute | Delay (hrs) | Risk Premium (bps) | Lockup Cost (bps) | Total Spread Add (bps) | Mid $0.65 Fair Spread | |-----------|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | LOW | 15 | 0.105 | 7.2 | 9 | 1 | 10 | $0.0065 | | MEDIUM | 35 | 0.165 | 14.8 | 12 | 2 | 14 | $0.0091 | | HIGH | 67 | 0.261 | 48.0 | 35 | 7 | 42 | $0.0273 | | CRITICAL | 82 | 0.366 | 198.0 | 80 | 27 | 107 | do_not_quote |

At LOW tier, the adjustment is a rounding error. At HIGH tier, it is 42 bps -- material for any strategy with thin margins. At CRITICAL tier, the engine returns do_not_quote because no reasonable spread can compensate for the combination of high dispute probability, extreme delay tail, and the possibility of adverse resolution.

Fair Spread in Practice

Here is how a market maker would integrate SettleRisk's output into a quoting workflow:

  1. Fetch risk scores for your universe of markets via /v1/risk-scores:batch.
  2. Filter: immediately exclude any market where do_not_quote == true. These are markets where the resolution risk is too high to quote at any spread.
  3. Compute fair spread: for each remaining market, call /v1/pricing:batch with your base_spread_bps (your baseline for execution and adverse selection) and annual_capital_cost_apr.
  4. Set quotes: use recommended_spread_bps as your minimum spread. Your bid is mid_price - recommended_spread_bps / 2 and your ask is mid_price + recommended_spread_bps / 2.
  5. Monitor: subscribe to webhooks for score.tier_changed and rules.changed events. When a market's risk profile shifts, re-price immediately.

The result: you quote tight on clean markets (capturing volume) and wide on dirty markets (capturing risk premium). Markets that are too risky to quote profitably are automatically excluded. Over time, this systematic approach dominates naive mid-price-based quoting.

When "Do Not Quote" Kicks In

For markets with CRITICAL risk tiers (75-100), p99 delay exceeding your configured threshold, or any resolution-critical URL currently offline, our engine returns do_not_quote: true. This means the resolution risk is so high that no spread can adequately compensate you -- the rational action is to skip the market entirely.

This is not a conservative safety margin. It is a direct consequence of the math: when p_dispute exceeds ~35% and p99 delay stretches into hundreds of hours, the expected lockup cost and risk premium consume the entire available margin. Quoting these markets is negative expected value.

Using the Pricing API

Python:

from settlerisk import SettleRiskClient

client = SettleRiskClient(key_id="vx_...", secret="...")

# Single market pricing
pricing = client.price({
    "platform": "polymarket",
    "platform_market_id": "0xabc",
    "mid_price": 0.65,
    "position_side": "YES",
    "position_notional_usd": 25000,
    "annual_capital_cost_apr": 0.12
})

print(f"Risk premium: {pricing.risk_premium_bps} bps")
print(f"Fair spread:  {pricing.recommended_spread_bps} bps")
print(f"Do not quote: {pricing.do_not_quote}")

# Batch pricing for portfolio
batch = client.batch_price([
    {"platform": "polymarket", "platform_market_id": id, "mid_price": mid}
    for id, mid in portfolio.items()
])
for item in batch.results:
    if item.do_not_quote:
        print(f"SKIP {item.platform_market_id}")
    else:
        print(f"{item.platform_market_id}: spread={item.recommended_spread_bps} bps")

TypeScript:

import { SettleRiskClient } from "@settlerisk/sdk";

const client = new SettleRiskClient({
  keyId: "vx_...",
  secret: "...",
});

// Single market pricing
const pricing = await client.price({
  platform: "polymarket",
  platformMarketId: "0xabc",
  midPrice: 0.65,
  positionSide: "YES",
  positionNotionalUsd: 25000,
  annualCapitalCostApr: 0.12,
});

console.log(`Risk premium: ${pricing.riskPremiumBps} bps`);
console.log(`Fair spread:  ${pricing.recommendedSpreadBps} bps`);
console.log(`Do not quote: ${pricing.doNotQuote}`);

// Batch pricing for portfolio
const batch = await client.batchPrice(
  Object.entries(portfolio).map(([id, mid]) => ({
    platform: "polymarket",
    platformMarketId: id,
    midPrice: mid,
  }))
);

for (const item of batch.results) {
  if (item.doNotQuote) {
    console.log(`SKIP ${item.platformMarketId}`);
  } else {
    console.log(`${item.platformMarketId}: spread=${item.recommendedSpreadBps} bps`);
  }
}

One API call gives you everything you need to make informed position sizing and quoting decisions. The batch endpoint handles up to 1,000 markets per request, so you can reprice your entire book in a single round trip.

Key Takeaway

Mid-price is not fair price. Resolution risk creates a systematic wedge between what a contract trades at and what it's actually worth. Quantifying that wedge -- through dispute probability, capital lockup cost, and risk-adjusted spreads -- is the difference between trading blind and trading informed.

The traders who price resolution risk explicitly will systematically outperform those who don't, the same way that options traders who model volatility outperform those who trade on intrinsic value alone. The edge is structural and persistent.

Ready to start pricing resolution risk into your strategy? Request a demo to see the pricing engine on your markets, or explore the full methodology to understand every formula behind the numbers.