Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/owlsinsight-com:owlsinsight-com-ev-value-bets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: 'Generated from the Owls Insight API manifest and the owls-insight-ts SDK types. Schemas are deliberately lenient: every field is optional, enums are open (x-extensible-enum), and unknown fields may appear. Decode accordingly.'
title: Owls Insight EV / value bets API
version: 0.78.0
x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: EV / value bets
paths:
/api/v1/{sport}/ev:
get:
description: 'Returns positive expected value opportunities for a sport: for each event, the sportsbooks offering a moneyline price that beats our fair price. The fair is Pinnacle''s de-vigged line; the other books do not move it, they only block a side when they disagree with it by more than 1.5 points. EV is computed at the fair minus a 1-point safety margin, the same math as the public markets page.
fairProbability is the conservative fair: the fair minus 1 point. fairPrice, evPct, edgePp and kellyFraction are all computed at it, so for a sportsbook evPct = (fairProbability x decimal odds - 1) x 100. The fair before that margin is fairUnadjusted on each opportunity and fair.home / fair.away / fair.draw on each event.
Each sportsbook price is scored against a fair that leaves that book''s own feed out, so a book never votes on its own price. Sportsbook prices are scored only when Pinnacle prices the game; exchange prices (Novig, and Kalshi and Polymarket with venues=true) can also be scored against the agreement of at least three independent books. booksInConsensus on an opportunity counts the independent sources behind the fair that price was scored against (1 means Pinnacle alone); on an event it counts the sources behind the event''s fair.
tradeable is true when the opportunity clears the markets page trade bar (sportsbooks: EV of at least 2%; prediction markets: at least 4%, a bid, a spread of 4 cents or less and at least $50 at the ask); reason says why not. For a prediction market, evPct = (fairProbability - ask - fee) / (ask + fee) x 100.
No opportunity is listed while the odds snapshot behind the answer is over 90 seconds old, or for a game that has started. Within that, a sportsbook price must be under 3 minutes old and an exchange quote under 2 minutes, each by its own timestamp; quoteAgeMs is its age when the answer was served. meta.freshness and meta.board say how old the data is; with no data at all, meta.timestamp is 1970-01-01T00:00:00.000Z and meta.freshness.stale is true.
Moneyline only and pregame only; meta.market and meta.pregame_only state this on every response.
Prices are American odds (meta.odds_format).'
operationId: getEV
parameters:
- in: path
name: sport
required: true
schema:
type: string
x-extensible-enum:
- cs2
- dota2
- lol
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- valorant
- wnba
- description: Minimum EV percentage to include. Default 0 (every positive-EV price). Clamped to meta.max_ev; anything above that ceiling is treated as a stale-line artifact and dropped.
in: query
name: min_ev
schema:
type: string
- description: Restrict opportunities to one sportsbook key (or kalshi / polymarket with venues=true).
in: query
name: book
schema:
type: string
- description: true also lists Kalshi and Polymarket buys, with their trading fee included in the EV. The first request for a sport starts their prices; they appear within about 15 seconds and stay on while you keep asking.
in: query
name: venues
schema:
type: string
x-extensible-enum:
- 'true'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EVResponse'
description: OK
summary: 'Returns positive expected value opportunities for a sport: for each event, the…'
tags:
- EV / value bets
x-owls-access: MVP and above
x-owls-sdk-method: getEV
components:
schemas:
EVFair:
description: 'How an event''s fair was formed, and the fair per side before the 1-point margin.
Each side is de-vigged on its own, conservatively, so the sides can sum to slightly
less than 1.'
properties:
anchor:
description: 'Which Pinnacle line anchored the fair: the realtime feed or the /odds entry; null when Pinnacle did not.'
type:
- string
- 'null'
x-extensible-enum:
- odds
- realtime
away:
description: Fair probability of an away win before the margin; null when there is none.
format: double
type:
- number
- 'null'
draw:
description: Fair probability of a draw before the margin (three-way markets); null otherwise.
format: double
type:
- number
- 'null'
home:
description: Fair probability of a home win before the margin; null when there is none.
format: double
type:
- number
- 'null'
method:
description: '`pinnacle`: Pinnacle''s de-vigged line. `consensus`: no Pinnacle line, so the median
of at least three independent books; only venues are scored against it, never a
sportsbook. Null when there is no fair (`reason` says why).'
type:
- string
- 'null'
x-extensible-enum:
- consensus
- pinnacle
reason:
description: Why there is no fair, in plain text; null when there is one.
type:
- string
- 'null'
sources:
description: Independent price sources behind the event's fair.
format: double
type: number
type: object
x-owls-required:
- method
- anchor
- sources
- reason
- home
- away
- draw
EVBoard:
description: The board an EV response was read from, and how old it is.
properties:
ageMs:
description: Age of the board when this response was sent, in milliseconds; null when there is no board.
format: double
type:
- number
- 'null'
builtAt:
description: When the board was built (ISO 8601); null when there is no board.
type:
- string
- 'null'
stale:
description: 'True when there is no board or it is too old: no EV is served from it.'
type: boolean
venueQuotes:
description: Whether the board holds Kalshi or Polymarket quotes.
type: boolean
venues:
description: Whether this request asked for Kalshi and Polymarket (`venues=true`).
type: boolean
type: object
x-owls-required:
- builtAt
- ageMs
- stale
- venues
- venueQuotes
EVOpportunity:
description: 'One +EV opportunity: a sportsbook price, or a venue''s ask (an exchange such as Novig,
and with `venues: true` the prediction markets Kalshi and Polymarket), that beats the
fair.
The fair is Pinnacle''s de-vigged line: the other books do not move it, they only
veto a side they disagree with (when Pinnacle has no line, a venue can be scored
against a consensus of books instead; see `EVFair.method`). `fairProbability` is the
CONSERVATIVE fair, the fair minus 1 percentage point, and `fairPrice`, `evPct`,
`edgePp` and `kellyFraction` are all computed at it. The fair before that margin is
`fairUnadjusted`.'
properties:
book:
description: 'Sportsbook or venue key. `kalshi` and `polymarket` are listed only with `venues: true`.'
type: string
bookImplied:
description: Implied probability of `bookPrice` (a sportsbook's includes its vig; a venue's is its ask).
format: double
type: number
bookPrice:
description: 'American odds of the price: a sportsbook''s price, or a venue''s ask.'
format: double
type: number
booksInConsensus:
description: 'Independent price sources behind the fair this price was scored against. A
sportsbook''s own feed never counts toward its own fair, so 1 means Pinnacle alone.'
format: double
type: number
edgePp:
description: (fairProbability - bookImplied) * 100, in percentage points.
format: double
type: number
evPct:
description: 'Expected value %, at `fairProbability`. Sportsbook: `(fairProbability * decimalOdds - 1) * 100`.
Venue, its fee included: `(fairProbability - ask - fee) / (ask + fee) * 100`.'
format: double
type: number
fairPrice:
description: American odds of `fairProbability` (the break-even price).
format: double
type: number
fairProbability:
description: 'The conservative fair probability of this outcome: the fair minus 1 percentage point. `fairPrice`, `evPct`, `edgePp` and `kellyFraction` are computed at it.'
format: double
type: number
fairUnadjusted:
description: 'The fair probability before the 1-point margin: `fairProbability` is this minus 0.01.'
format: double
type: number
fee:
description: The venue's trading fee per contract, in dollars; 0 for a sportsbook.
format: double
type: number
kellyFraction:
description: Full-Kelly bankroll fraction at `fairProbability`.
format: double
type: number
kind:
description: '`book` for a sportsbook, `venue` for an exchange or prediction market (Novig, Kalshi, Polymarket).'
type: string
x-extensible-enum:
- book
- venue
link:
description: The market's page at the venue; null for a sportsbook.
type:
- string
- 'null'
market:
type: string
x-extensible-enum:
- h2h
quoteAgeMs:
description: Age of the price when this answer was served, in milliseconds, by its own timestamp; null when unknown.
format: double
type:
- number
- 'null'
reason:
description: Why it is not tradeable, in plain text (such as `EV under 2%`); null when it is.
type:
- string
- 'null'
roi:
description: '`evPct / 100`, not rounded: EV per dollar staked (sportsbook) or per dollar paid, fee included (venue).'
format: double
type: number
route:
description: 'Kalshi and Polymarket: the contract to buy, `yes`, or `no:<CODE>` (NO on the opponent''s market). Null otherwise.'
type:
- string
- 'null'
side:
type: string
x-extensible-enum:
- away
- draw
- home
size:
description: Dollars available at the ask; null when unknown (Polymarket, sportsbooks).
format: double
type:
- number
- 'null'
team:
type: string
tradeable:
description: 'Whether the opportunity clears the markets page trade bar. Sportsbook: EV of at
least 2%. Venue: EV of at least 4%, a bid, a spread of 4 cents or less and at least
$50 at the ask.'
type: boolean
type: object
x-owls-required:
- book
- market
- side
- team
- bookPrice
- bookImplied
- fairProbability
- fairPrice
- evPct
- edgePp
- kellyFraction
- booksInConsensus
EVResponse:
description: 'Response for `GET /api/v1/{sport}/ev` (MVP+). Pre-game value bets only.
No opportunity is listed while the odds snapshot behind the answer is over 90
seconds old, or for a game that has started. Within that, a sportsbook price must be
under 3 minutes old and an exchange quote (Novig by default, Kalshi and Polymarket
with `venues: true`) under 2 minutes, each by its own timestamp.
The optional fields (`kind`, `fairUnadjusted`, `roi`, `fee`, `tradeable`, `reason`,
`route`, `size`, `link` and `quoteAgeMs` on an opportunity, `canonicalEventId` and
`fair` on an event, `board` in `meta`) come with `fair_method: "fair_v1"`.'
properties:
data:
items:
$ref: '#/components/schemas/EVEvent'
type: array
meta:
properties:
board:
$ref: '#/components/schemas/EVBoard'
description: 'The board the response was read from. Sent with `fair_method: "fair_v1"`.'
book:
type: string
events:
format: double
type: number
fair_method:
description: 'How the fair is computed: `fair_v1` (Pinnacle''s de-vigged line, the other books only veto, a 1-point margin). `consensus_devig_median` is the method it replaced.'
type: string
freshness:
description: Age of the odds snapshot behind the answer. `ageSeconds` is always a number; `stale` is true when the snapshot is over 90 seconds old or there is no data.
properties:
ageSeconds:
format: double
type: number
stale:
type: boolean
type: object
x-owls-required:
- ageSeconds
- stale
market:
type: string
x-extensible-enum:
- h2h
max_ev:
format: double
type: number
min_ev:
format: double
type: number
odds_format:
type: string
x-extensible-enum:
- american
opportunities:
format: double
type: number
pregame_only:
type: boolean
sport:
type: string
timestamp:
description: When the odds snapshot behind the answer was written (ISO 8601); `1970-01-01T00:00:00.000Z` when there is no data at all.
type: string
type: object
x-owls-required:
- sport
- market
- odds_format
- min_ev
- max_ev
- fair_method
- pregame_only
- events
- opportunities
- timestamp
- freshness
success:
type: boolean
type: object
x-owls-required:
- success
- data
- meta
EVEvent:
description: A game with its fair and the +EV opportunities found across books.
properties:
awayTeam:
type: string
booksInConsensus:
description: Independent price sources behind the event's fair.
format: double
type: number
canonicalEventId:
description: 'Our stable id of the game, `{sport}:{away}@{home}-{date}`: the `eventId` the odds board and the history endpoints use. Null when unknown.'
type:
- string
- 'null'
commenceTime:
type: string
eventId:
description: The game's `id` on the odds board. The history endpoints take `canonicalEventId` instead.
type: string
fair:
$ref: '#/components/schemas/EVFair'
description: How the fair was formed, and the fair per side before the margin.
fairProbability:
description: The conservative fair per side (the fair minus 1 percentage point); null for a side with no fair. The fair before the margin is in `fair`.
properties:
away:
format: double
type:
- number
- 'null'
draw:
format: double
type:
- number
- 'null'
home:
format: double
type:
- number
- 'null'
type: object
x-owls-required:
- home
- away
- draw
homeTeam:
type: string
market:
type: string
x-extensible-enum:
- h2h
opportunities:
description: Best EV first.
items:
$ref: '#/components/schemas/EVOpportunity'
type: array
sport:
type: string
type: object
x-owls-required:
- eventId
- sport
- homeTeam
- awayTeam
- commenceTime
- market
- fairProbability
- booksInConsensus
- opportunities
securitySchemes:
bearerAuth:
description: Your Owls Insight API key.
scheme: bearer
type: http
x-owls-v2-books:
- book: 4casters
sports:
- cfl
- esports
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: 4casters-v2-update
- book: 888sport
sports:
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: null
- book: ballybet
sports:
- aussie-rules
- boxing
- cricket
- cycling
- darts
- formula1
- golf
- handball
- mlb
- mma
- motorsport
- nba
- ncaab
- ncaaf
- nfl
- nhl
- rugby-league
- rugby-union
- snooker
- soccer
- specials
- surfing
- table-tennis
- tennis
- wnba
wsEvent: ballybet-v2-update
- book: bet105
sports:
- alpine-skiing
- archery
- athletics
- aussie-rules
- badminton
- bandy
- baseball
- basketball
- basketball-3x3
- biathlon
- bowls
- boxing
- cfl
- chess
- cricket
- curling
- cycling
- darts
- esports
- fencing
- field-hockey
- floorball
- football
- formula1
- futsal
- gaelic-sports
- golf
- greyhounds
- handball
- hockey
- horse-racing
- hurling
- judo
- kabaddi
- kbo
- lacrosse
- mlb
- mma
- motorbikes
- motorsport
- nascar
- nba
- ncaab
- ncaaf
- netball
- nfl
- nhl
- npb
- olympics
- padel
- pool
- rugby-league
- rugby-union
- sailing
- ski-jumping
- snooker
- soccer
- softball
- speedway
- squash
- sumo
- supercars
- surfing
- table-tennis
- taekwondo
- tennis
- triathlon
- trotting
- ultimate
- volleyball
- water-polo
- wnba
wsEvent: bet105-v2-update
- book: bet365
sports:
- mlb
- nba
- nfl
- nhl
- soccer
wsEvent: bet365-v2-update
- book: betonline
sports:
- mlb
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
wsEvent: betonline-realtime
- book: betrivers
sports:
- aussie-rules
- boxing
- cricket
- cycling
- darts
- formula1
- golf
- handball
- mlb
- mma
- motorsport
- nba
- ncaab
- ncaaf
- nfl
- nhl
- rugby-league
- rugby-union
- snooker
- soccer
- specials
- surfing
- table-tennis
- tennis
- wnba
wsEvent: betrivers-v2-update
- book: betus
sports:
- alpine-skiing
- archery
- athletics
- aussie-rules
- badminton
- bandy
- baseball
- basketball
- basketball-3x3
- biathlon
- bowls
- boxing
- cfl
- chess
- cricket
- curling
- cycling
- darts
- esports
- fencing
- field-hockey
- floorball
- football
- formula1
- futsal
- gaelic-sports
- golf
- greyhounds
- handball
- hockey
- horse-racing
- hurling
- judo
- kabaddi
- kbo
- lacrosse
- mlb
- mma
- motorbikes
- motorsport
- nascar
- nba
- ncaab
- ncaaf
- netball
- nfl
- nhl
- npb
- olympics
- padel
- pool
- rugby-league
- rugby-union
- sailing
- ski-jumping
- snooker
- soccer
- softball
- speedway
- squash
- sumo
- supercars
- surfing
- table-tennis
- taekwondo
- tennis
- triathlon
- trotting
- ultimate
- volleyball
- water-polo
- wnba
wsEvent: betus-v2-update
- book: bookmaker
sports:
- alternative-sports
- aussie-rules
- baseball
- basketball
- boxing
- cricket
- darts
- e-gaming
- entertainment
- esports
- football
- futsal
- futures
- golf
- ice-hockey
- mma
- motorsport
- politics
- rugby
- soccer
- surfing
- table-tennis
- tennis
wsEvent: null
- book: bovada
sports:
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
wsEvent: null
- book: draftkings
sports:
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- wnba
wsEvent: draftkings-v2-update
- book: fanaticsmarkets
sports:
- boxing
- cs2
- dota2
- golf
- lol
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- valorant
- wnba
wsEvent: fanaticsmarkets-v2-update
- book: fanduel
sports:
- mlb
- mma
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: fanduel-v2-update
- book: hardrock
sports:
- AMERICAN_FOOTBALL
- AUSSIE_RULES
- BASEBALL
- BASKETBALL
- BOXING
- CRICKET
- DARTS
- HANDBALL
- ICE_HOCKEY
- MMA
- RUGBY
- SNOOKER
- SOCCER
- TABLE_TENNIS
- TENNIS
- VOLLEYBALL
wsEvent: null
- book: kalshi
sports:
- cs2
- dota2
- lol
- mlb
- mma
- nba
- ncaaf
- nfl
- nhl
- overwatch
- pubg
- rainbow6
- rocketleague
- soccer
- tennis
- valorant
- wnba
wsEvent: kalshi-v2-update
- book: lowvig
sports:
- boxing
- cricket
- darts
- golf
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- table-tennis
- tennis
- wnba
wsEvent: lowvig-v2-update
- book: mybookie
sports:
- mlb
- nba
wsEvent: mybookie-v2-update
- book: novig
sports:
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
wsEvent: null
- book: pinnacle
sports:
- esports
- handball
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- wnba
wsEvent: pinnacle-v2-update
- book: polymarket
sports:
- cs2
- dota2
- lol
- mlb
- mma
- nba
- ncaaf
- nfl
- nhl
- overwatch
- pubg
- rainbow6
- rocketleague
- soccer
- tennis
- valorant
- wnba
wsEvent: polymarket-v2-update
- book: propbuilder
sports:
- mlb
- nba
- ncaaf
- nfl
- nhl
- wnba
wsEvent: propbuilder-v2-update
- book: stake
sports:
- baseball
- basketball
- cs2
- ice-hockey
- mma
- soccer
- table-tennis
- tennis
wsEvent: null
- book: thescore
sports:
- mlb
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
wsEvent: null
- book: thunderpick
sports:
- american-football
- baseball
- basketball
- cs2
- dota2
- lol
- soccer
- tennis
- valorant
wsEvent: thunderpick-v2-update
- book: tippmixpro
sports:
- boxing
- cs2
- dota2
- lol
- mlb
- mma
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- tennis
- valorant
wsEvent: tippmixpro-v2-update
- book: underdog
sports:
- cs2
- kbo
- lol
- mlb
- mma
- nba
- ncaaf
- nfl
- nhl
- npb
- pga
- soccer
- tennis
- valorant
- wnba
wsEvent: null
- book: versus
sports:
- afl
- badminton
- basketball
- boxing
- cricket
- darts
- esports
- golf
- handball
- mlb
- mma
- nfl
- nhl
- padel
- soccer
- table-tennis
- tennis
- volleyball
wsEvent: versus-v2-update