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-source-api-v2-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 Source API (v2) API
version: 0.78.0
x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: Source API (v2)
paths:
/api/v2/{book}/{sport}:
get:
description: 'Returns a sportsbook''s native markets for a sport exactly as the source publishes them: no mapping, no team normalization, no merging. Each entry in data is one raw market blob keyed by the source''s own market id. marketIds narrows data to the listed market ids and prefixes (main,props-* or props-9524; case does not matter). Only those entries are returned, dated in meta.ageSeconds and hashed into the ETag, so a caller of one family keeps its 304s while another family moves. meta.marketIds echoes the filter and meta.marketsFilteredOut counts the entries left out. When the stored board exists but nothing matches, data is empty with meta.cached true and the status and age of the board''s entries a default request returns, so it is not mistaken for an outage; if none of those is left (for example only DraftKings props-* is stored), meta.status is no-data. An entry that is neither an id (letters, digits, - or _) nor a prefix ending in * is a 400. bet365, hardrock, mybookie, stake, thunderpick and underdog ignore marketIds and always return their whole board. DraftKings nba, nfl, nhl, mlb, ncaab and ncaaf hold main (the league page: game lines), live (the live feed snapshot, when it fits) and one props- entry per player-prop subcategory: DraftKings'' response for that subcategory as received (parsed and re-serialized, not mapped), with its events, markets and selections. props-* entries refresh about every 3 to 5 minutes and are REST only (no draftkings-v2-update message). They are left out unless marketIds asks for them; meta.defaultExcluded then gives their count and the marketIds value that includes them. They are judged fresh against their own 480 second threshold, so they do not turn meta.status stale; meta.marketAges gives each returned entry''s age in seconds. When one subcategory''s request fails, its previous entry is kept for a cycle; if it reaches its 10 minute lifetime first, a request that includes it reads meta.status partial until the entry is cleared, at the latest on the next cycle. meta.status is ok, stale, partial or no-data. It flips to stale once ageSeconds passes the book''s own freshness threshold, which is set to that book''s refresh cadence. Send If-None-Match with the ETag response header, quoted exactly as received (a leading W/ is fine), to receive 304 when nothing changed. The body etag is the same value without quotes, so a bare etag never matches. A 304 on /api/v2 does not count toward your monthly quota; it still counts toward your per-minute limit and appears in your usage log. A key that has used up its monthly quota gets 429 even when the request would have been a 304. meta.cached is false only when there is no stored board to serve (no-data, and partial-miss on the books that report it). It is not a freshness signal: read meta.ageSeconds and meta.status for that. For a multi-league sport without league, most books return 400 with a hint to the /leagues index. Books flagged mergeWhenUnspecified instead return a merged board with league null, a leagues index attributing every market to its competition, and meta.merged true; if the merge had to truncate, meta.status is partial and meta.truncated says what was omitted. A few books key data by event rather than by market, so one entry holds a whole game. Each book''s sport set, single-league sports and league rules are in the v2Books entries of this manifest. The SDKs expose one method per book: getV2 in TypeScript and get__v2 in Python. The stake board is the exception to the meta shape above: it serves meta { source, cached, status, timestamp, ageSeconds, hash, now } on every response, with data as an array of fixtures. On no-data and partial-miss, timestamp, ageSeconds and hash are null because there is no board to date, and now is the response clock; never read freshness from a null timestamp.'
operationId: getV2
parameters:
- in: path
name: book
required: true
schema:
type: string
x-extensible-enum:
- 4casters
- 888sport
- ballybet
- bet105
- bet365
- betonline
- betrivers
- betus
- bookmaker
- bovada
- draftkings
- fanaticsmarkets
- fanduel
- kalshi
- lowvig
- mybookie
- novig
- pinnacle
- polymarket
- propbuilder
- stake
- thescore
- thunderpick
- tippmixpro
- underdog
- versus
- in: path
name: sport
required: true
schema:
type: string
- description: League key to serve. Required for multi-league sports.
in: query
name: league
schema:
type: string
- description: Comma-separated market ids and/or prefixes ending in *, e.g. main or props-*, to return only those entries of data; * returns every entry. Without it, or with it empty, a book returns its default set (DraftKings US sports leave out props-*).
in: query
name: marketIds
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/V2BookResponse'
description: OK
summary: Returns a sportsbook's native markets for a sport exactly as the source…
tags:
- Source API (v2)
x-owls-access: All paying tiers
/api/v2/{book}/{sport}/leagues:
get:
description: 'Returns the league index for a sport at one book: each league key with its name and market count, for use as the league parameter on the markets endpoint.
Single-league sports still answer, with one entry.
marketCount counts the entries a request without marketIds returns. Books that leave some entries out by default (DraftKings US sports: props-*) also give marketCountExcludedByDefault, the entries reachable only with marketIds.
The SDKs expose one method per book: getV2Leagues in TypeScript and get__v2_leagues in Python.'
operationId: getV2Leagues
parameters:
- in: path
name: book
required: true
schema:
type: string
x-extensible-enum:
- 4casters
- 888sport
- ballybet
- bet105
- bet365
- betonline
- betrivers
- betus
- bookmaker
- bovada
- draftkings
- fanaticsmarkets
- fanduel
- kalshi
- lowvig
- novig
- pinnacle
- polymarket
- propbuilder
- thescore
- tippmixpro
- versus
- in: path
name: sport
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/V2LeaguesResponse'
description: OK
summary: 'Returns the league index for a sport at one book: each league key with its name…'
tags:
- Source API (v2)
x-owls-access: All paying tiers
components:
schemas:
V2LeagueIndexEntry:
properties:
leagueKey:
type: string
leagueName:
type: string
marketCount:
format: double
type: number
updatedAt:
format: double
type: number
type: object
V2LeagueSlice:
description: 'One league''s share of a merged response: the `data` keys it contributed.'
properties:
leagueKey:
type: string
leagueName:
type: string
marketCount:
format: double
type: number
marketIds:
items:
type: string
type: array
type: object
V2BookResponse:
description: Any v2 book's raw board. `data` is keyed by the book's market or event id and holds the book's own JSON. `league` is null on a merged response, which then lists `leagues`.
properties:
data:
$ref: '#/components/schemas/RawJson'
etag:
type: string
league:
type:
- string
- 'null'
leagues:
items:
$ref: '#/components/schemas/V2LeagueSlice'
type: array
marketCount:
format: double
type: number
meta:
$ref: '#/components/schemas/V2Meta'
sport:
type: string
success:
type: boolean
type: object
V2LeaguesResponse:
properties:
leagueCount:
format: double
type: number
leagues:
items:
$ref: '#/components/schemas/V2LeagueIndexEntry'
type: array
meta:
$ref: '#/components/schemas/V2Meta'
sport:
type: string
success:
type: boolean
type: object
RawJson:
description: The book's own JSON, served verbatim. Decode without strict typing.
V2Meta:
properties:
ageSeconds:
format: double
type: number
cacheTimestamp:
type: string
cached:
type: boolean
duplicateMarketIdsDropped:
format: double
type: number
leagueCount:
format: double
type: number
leaguesOmitted:
format: double
type: number
marketsOmitted:
format: double
type: number
merged:
type: boolean
source:
type: string
status:
type: string
x-extensible-enum:
- no-data
- ok
- partial
- stale
timestamp:
type: string
truncated:
type: boolean
type: object
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