Skip to main content
Paid plans

ON Sharp: the sharpest line in the market

One consensus price from the sharpest, highest-limit books in the world, de-vigged, blended and re-priced at a fixed 2% margin. Recomputed within a second of the market moving and pushed to you in real time.

🎯 Fixed 2% margin⚡ Real-time WebSocket📈 Movement history

What makes ON Sharp different

Not a scraped book. A line computed from the books that set the market, built for modelling, steam detection and closing line value.

🎯

The sharpest line in the market

A consensus of the sharpest, highest-limit books in the world, weighted by how much they lead price discovery. One line that says what the sharp market thinks.

⚡

Real time, no polling delay

ON Sharp is recomputed within a second of any book behind it moving and pushed straight to your WebSocket. No fetch cycle sits between the market and you.

📐

A fixed, known margin

Every price is de-vigged, blended in probability space and re-priced at exactly 2% (two-way) or 2.5% (three-way). A move in ON Sharp is a move in probability, never a book widening its margin.

📈

Movement history built in

ON Sharp is on the odds movement allowlist, so every change is recorded and available from /odds/movements for steam detection and closing line value.

🏟️

Pre-match, seven sports

Football, basketball, tennis, American football, baseball, ice hockey and esports, from the moment the sharp market opens a line until kickoff.

🔧

Same API, one more column

Nothing new to integrate. ON Sharp is a bookmaker in /odds and on the WebSocket, so it sits next to the other 365+ books in the response you already parse.

How the line is built

1

De-vig every contributor

Each sharp book's price is stripped of its margin to recover the fair probability it implies. Exchanges contribute their back/lay midpoint, never the back price alone.

2

Blend by who leads

Fair probabilities are combined with weights that favour the books that lead price discovery, so a consensus is never outvoted by books that merely follow.

3

Re-price at a fixed margin

The blended probability is turned back into odds at exactly 2% (two-way) or 2.5% (three-way). Only markets where enough of the panel agrees on the same line are published, so a single book is never relabelled as ON Sharp.

Built-in margin, two-way2.0% fixed
Built-in margin, three-way2.5% fixed
UpdateReal time
Sports7 pre-match

What a fixed margin means for you

Every bookmaker prices a little above 100% probability. That excess is the margin, and at most books it changes from league to league and hour to hour. ON Sharp's never does.

Strip it in one line

Because the margin is always exactly 2% (or 2.5% on three-way markets), the fair probability behind any ON Sharp price is a division, not an estimate.

# two-way: home 1.885, away 2.043
p_home = (1 / 1.885) / 1.02   # 0.520
p_away = (1 / 2.043) / 1.02   # 0.480

# three-way: divide by 1.025 instead
p_home = (1 / 3.613) / 1.025  # 0.270

Implied probabilities always sum to 1.020 on two-way markets and 1.025 on three-way markets. Check it on any response.

Why it matters for steam and CLV

At a normal book a price can move because the book got nervous and widened its margin, not because the probability changed. With a fixed margin that door is closed: when ON Sharp moves, the sharp market's view of the probability moved, full stop.

  • No false steam: a book widening its prices before a team news drop is not a move in ON Sharp.
  • Fair value without guessing which de-vig method a book "really" uses.
  • Comparable across sports and leagues, where a single book might run 2% on one and 7% on another.
  • A closing price whose margin you can remove exactly, so CLV is measured in probability, not in odds noise.

One sharp book vs ON Sharp

Most models anchor on a single sharp book. That works until the book you picked is the one testing a price, capping a market or sitting out a league.

Margin

A single sharp book

Varies by league, market and time of day; often higher on lower leagues and alternative lines

ON Sharp

Fixed 2% two-way, 2.5% three-way, everywhere

What a move means

A single sharp book

That book changed its price: risk position, a limit hit, or a margin change

ON Sharp

The sharp market changed its probability; single-book noise is absorbed

Blind spots

A single sharp book

Leagues the book sits out, markets it caps early, prices it is testing

ON Sharp

Published only where several sharp books agree on the same line; otherwise no line rather than a wrong one

Alternative lines

A single sharp book

Its own ladder

ON Sharp

Every line the sharp market agrees on

Stake limits

A single sharp book

Published by some books

ON Sharp

None. Nobody offers the ON Sharp price, so a limit would be fiction

Integration

A single sharp book

One book per column, each with its own quirks

ON Sharp

One column in the same /odds response and WebSocket stream

Grade a price against ON Sharp

A worked closing line value example, start to finish.

  1. 1

    Record the price

    Monday 14:00: a recreational book prices Brentford at 3.90. ON Sharp is 3.613 on the same side at that moment, a fair probability of 0.270.

  2. 2

    Fetch the close

    After kickoff, call /odds/movements for the event with bookmaker=ON Sharp and market=ML. The last entry before the match starts is the closing line: 3.412.

  3. 3

    De-vig both

    Closing fair probability is (1 / 3.412) / 1.025 = 0.286. The 3.90 price implies 0.256 before any margin.

  4. 4

    Read the result

    The 3.90 price implied 0.256 where the sharp market closed at 0.286: about +3 points of closing line value, or roughly 11% better than the close. Tracked across many prices, this shows how far a book's prices sit from where the sharp market closes.

GET /v3/odds/movements

GET /v3/odds/movements?eventId=61300607
    &bookmaker=ON Sharp&market=ML&apiKey=KEY

{
  "eventid": "61300607",
  "bookmaker": "ON Sharp",
  "opening": { "timestamp": 1790265600000, "home": 3.613, "draw": 3.902, "away": 2.033 },
  "movements": [
    { "timestamp": 1790265600000, "home": 3.613, "draw": 3.902, "away": 2.033 },
    { "timestamp": 1790420000000, "home": 3.509, "draw": 3.902, "away": 2.067 },
    { "timestamp": 1790507100000, "home": 3.412, "draw": 3.902, "away": 2.103 }
  ]
}

Every ON Sharp change is recorded from the moment a line opens. Take the last entry before kickoff as the close.

Up and running in three calls

Find the event, pull the line, then let the WebSocket keep it current.

1. Find the event

curl

curl "https://api.odds-api.io/v3/events/search\
  ?query=Brentford&apiKey=KEY"

# -> [{ "id": 61300607, "home": "Brentford FC", ... }]

2. Pull the line

Python

import requests

r = requests.get(
    "https://api.odds-api.io/v3/odds",
    params={"eventId": 61300607,
            "bookmakers": "ON Sharp",
            "apiKey": KEY},
)
ml = r.json()["bookmakers"]["ON Sharp"][0]
home = float(ml["odds"][0]["home"])
p_home = (1 / home) / 1.025

3. Keep it current

WebSocket, JavaScript

const ws = new WebSocket(
  "wss://api.odds-api.io/v3/ws?apiKey=KEY" +
  "&channels=odds&markets=ML,Spread,Totals"
);
ws.onmessage = ({ data }) => {
  const msg = JSON.parse(data);
  if (msg.bookie !== "ON Sharp") return;
  // msg.markets is the complete current set:
  // replace, do not merge
  store.set(msg.id, msg.markets);
};

Sports and markets

Pre-match only. Everything the sharp market prices on the main lines, and every alternative line it agrees on.

Sports

FootballBasketballTennisAmerican FootballBaseballIce HockeyEsports

Markets

  • Moneyline · Full match and first half
  • Spread · Full match and first half, every line the market prices
  • Totals · Full match and first half, every line the market prices
  • Corners · Spread and totals, full match and first half
  • Tennis games · Game spread and game totals
  • Baseball first 5 innings · Moneyline, run line and totals

ON Sharp in the response

Request it like any other bookmaker. Same fields, same WebSocket channel.

GET /v3/odds?eventId=61300607&bookmakers=ON Sharp

{
  "id": 61300607,
  "home": "Brentford FC",
  "away": "Manchester United",
  "date": "2025-09-27T11:30:00Z",
  "sport": { "name": "Football", "slug": "football" },
  "league": { "name": "Premier League", "slug": "england-premier-league" },
  "bookmakers": {
    "ON Sharp": [
      {
        "name": "ML",
        "updatedAt": "2025-09-27T11:29:58Z",
        "odds": [
          { "home": "3.613", "draw": "3.902", "away": "2.033" }
        ]
      },
      {
        "name": "Spread",
        "updatedAt": "2025-09-27T11:29:58Z",
        "odds": [
          { "hdp": 0.25, "home": "1.885", "away": "2.043" },
          { "hdp": 0.5, "home": "1.702", "away": "2.312" }
        ]
      },
      {
        "name": "Totals",
        "updatedAt": "2025-09-27T11:29:57Z",
        "odds": [
          { "hdp": 2.5, "over": "1.724", "under": "2.273" },
          { "hdp": 2.75, "over": "1.912", "under": "2.012" }
        ]
      }
    ]
  }
}

Where to use it

Closing line value

Grade any price against the sharpest reference price with a margin you can strip exactly.

Value and arbitrage screens

Compare 365+ books against one fair line instead of picking a favourite sharp book by hand.

Steam detection

A move in ON Sharp means the sharp market moved, not one book. Pull the history from /odds/movements.

Model calibration

A clean, fixed-margin probability series to train and validate against.

Available on every paid plan

Add ON Sharp to your bookmaker selection and it appears in /odds, /odds/movements and on the WebSocket.

Frequently asked questions

What is ON Sharp?

ON Sharp is a synthetic bookmaker built by odds-api.io. It blends the prices of the sharpest, highest-limit books in the market into a single consensus line, de-vigged and re-priced at a fixed 2% margin (2.5% on three-way markets). It is not a book you can bet at; it is the sharpest reference price available through the API.

How fast does ON Sharp move?

In real time. The line is recomputed the moment any of the books behind it changes and pushed straight to WebSocket subscribers. Because it is a consensus, a single book widening or testing a price does not move it; a genuine shift in the sharp market does.

Which sports and markets does ON Sharp cover?

Pre-match odds on football, basketball, tennis, American football, baseball, ice hockey and esports. Markets are moneyline, spreads and totals (full match and first half, all lines), corners, tennis game lines and baseball first-five-innings lines. Player props and in-play odds are not included.

What does "fixed 2% margin" mean?

A bookmaker's prices always imply a total probability above 100%; the excess is its margin, and at most books it varies by league, market and time. ON Sharp's implied probabilities always add up to exactly 102% on two-way markets and 102.5% on three-way markets. Divide any implied probability by 1.02 (or 1.025) and you have the fair probability; nothing else moves the price except the sharp market changing its mind.

Why is there no stake limit on ON Sharp?

A stake limit describes a bet you could actually place, and nobody offers the ON Sharp price. So ON Sharp prices carry no max field. Use the movement history and the fixed margin instead. Both are built for modelling, not for placing bets.

How do I get ON Sharp?

ON Sharp is available on all paid plans. Add it to your bookmaker selection in the dashboard and request it by name: /v3/odds?eventId=...&bookmakers=ON Sharp, or subscribe to it on the WebSocket. Odds movement history is at /v3/odds/movements?bookmaker=ON Sharp.

Which books make up ON Sharp?

We do not publish the composition. What we publish is the method: each contributing book is de-vigged, the fair probabilities are blended with weights that favour the books that lead price discovery, and a fixed margin is applied. A line is only published when enough of the panel agrees on the same market, so you never receive a single book relabelled.