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.
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
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.
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.
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.
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.
| A single sharp book | ON Sharp | |
|---|---|---|
| Margin | Varies by league, market and time of day; often higher on lower leagues and alternative lines | Fixed 2% two-way, 2.5% three-way, everywhere |
| What a move means | That book changed its price: risk position, a limit hit, or a margin change | The sharp market changed its probability; single-book noise is absorbed |
| Blind spots | Leagues the book sits out, markets it caps early, prices it is testing | Published only where several sharp books agree on the same line; otherwise no line rather than a wrong one |
| Alternative lines | Its own ladder | Every line the sharp market agrees on |
| Stake limits | Published by some books | None. Nobody offers the ON Sharp price, so a limit would be fiction |
| Integration | One book per column, each with its own quirks | One column in the same /odds response and WebSocket stream |
Margin
Varies by league, market and time of day; often higher on lower leagues and alternative lines
Fixed 2% two-way, 2.5% three-way, everywhere
What a move means
That book changed its price: risk position, a limit hit, or a margin change
The sharp market changed its probability; single-book noise is absorbed
Blind spots
Leagues the book sits out, markets it caps early, prices it is testing
Published only where several sharp books agree on the same line; otherwise no line rather than a wrong one
Alternative lines
Its own ladder
Every line the sharp market agrees on
Stake limits
Published by some books
None. Nobody offers the ON Sharp price, so a limit would be fiction
Integration
One book per column, each with its own quirks
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
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
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
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
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.0253. 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
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.