Every API here is available over the APIs.io API and to AI agents over MCP.
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 Live scores API
version: 0.78.0
x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: Live scores
paths:
/api/v1/scores/live:
get:
description: 'Returns live games across every supported sport in one call, with current score, period and status.
Score changes for games in play are also pushed on the scores-update WebSocket event, opt-in with scores in the subscription, using this endpoint''s event ids. That event carries a lean view (status, teams, score); this endpoint has the full event.
503 until the first scoreboard has been collected.
NFL, NCAAF and NBA give the period in status.period and its label in status.detail: Q1 to Q4, Halftime (period 2), or OT (period 5 for every overtime; overtimes are not numbered). NHL gives P1 to P3, Intermission between periods (around the restart, status.period can already be the next period), OT (period 4 for every overtime) or SO (period 5). Owls Insight has no game clock for these sports, so status.displayClock is null. Soccer status.detail is the half (1st Half, 2nd Half) and the match minute is status.displayClock, e.g. 67 or 45+2. A phase without a label, soccer half-time included, reads Live with status.period null, as does college basketball. MLB gives the inning in status.period and status.detail (e.g. Top 7th); in extra innings status.detail reads Top Extra Inning, Bot Extra Inning, or Extra Inning when the half is unknown, with status.period null, because extra innings are not numbered. On /scores/live, a baseball linescore period 10 is every extra inning combined.'
operationId: getScores
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ScoresResponse'
description: OK
summary: Returns live games across every supported sport in one call, with current…
tags:
- Live scores
x-owls-access: All paying tiers
x-owls-sdk-method: getScores
/api/v1/{sport}/scores/live:
get:
description: 'Returns live games for one sport with current score, period and status.
Score changes for games in play are also pushed on the scores-update WebSocket event, opt-in with scores in the subscription, using this endpoint''s event ids. That event carries a lean view (status, teams, score); this endpoint has the full event.
An empty events array with hasScheduledGames true means games are scheduled but none has started.
NFL, NCAAF and NBA give the period in status.period and its label in status.detail: Q1 to Q4, Halftime (period 2), or OT (period 5 for every overtime; overtimes are not numbered). NHL gives P1 to P3, Intermission between periods (around the restart, status.period can already be the next period), OT (period 4 for every overtime) or SO (period 5). Owls Insight has no game clock for these sports, so status.displayClock is null. Soccer status.detail is the half (1st Half, 2nd Half) and the match minute is status.displayClock, e.g. 67 or 45+2. A phase without a label, soccer half-time included, reads Live with status.period null, as does college basketball. MLB gives the inning in status.period and status.detail (e.g. Top 7th); in extra innings status.detail reads Top Extra Inning, Bot Extra Inning, or Extra Inning when the half is unknown, with status.period null, because extra innings are not numbered. On /scores/live, a baseball linescore period 10 is every extra inning combined.'
operationId: getSportScores
parameters:
- in: path
name: sport
required: true
schema:
type: string
x-extensible-enum:
- cricket
- cs2
- darts
- lol
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- table_tennis
- tennis
- valorant
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SportScoresResponse'
description: OK
summary: Returns live games for one sport with current score, period and status
tags:
- Live scores
x-owls-access: All paying tiers
x-owls-sdk-method: getScores
components:
schemas:
MatchIncident:
properties:
assistPlayerName:
type: string
minute:
format: double
type: number
playerName:
type: string
playerOut:
type: string
teamSide:
type: string
x-extensible-enum:
- away
- home
type:
type: string
x-extensible-enum:
- goal
- ownGoal
- penalty
- redCard
- substitution
- yellowCard
type: object
x-owls-required:
- minute
- type
- playerName
- teamSide
ScoreTeam:
properties:
homeAway:
type: string
x-extensible-enum:
- away
- home
linescores:
description: 'Per-period scores. Quarters, sets, maps, or — for baseball — INNINGS.
A side that never batted in a half-inning (walk-off, or the home team
leading after the top of the 9th) simply has no entry for that period,
so the two sides'' arrays can differ in length.'
items:
properties:
period:
format: double
type: number
score:
format: double
type: number
type: object
x-owls-required:
- period
- score
type: array
score:
format: double
type: number
team:
properties:
abbreviation:
type: string
displayName:
type: string
logoUrl:
type: string
type: object
x-owls-required:
- displayName
type: object
x-owls-required:
- homeAway
- team
- score
ScoreStatus:
properties:
detail:
type: string
displayClock:
type:
- string
- 'null'
period:
format: double
type:
- number
- 'null'
state:
type: string
x-extensible-enum:
- in
- post
- pre
type: object
x-owls-required:
- state
- detail
- displayClock
- period
PlayerLineup:
properties:
country:
type: string
jersey:
format: double
type: number
name:
type: string
playerId:
type: string
playerUrl:
type: string
rating:
format: double
type: number
starter:
type: boolean
type: object
x-owls-required:
- name
- starter
SportScoresResponse:
description: Response from GET /{sport}/scores/live (single sport).
properties:
cached:
type: boolean
count:
format: double
type: number
events:
items:
$ref: '#/components/schemas/ScoreEvent'
type: array
sport:
type: string
success:
type: boolean
timestamp:
type: string
type: object
x-owls-required:
- success
- sport
- count
- events
LineupsData:
properties:
away:
items:
$ref: '#/components/schemas/PlayerLineup'
type: array
home:
items:
$ref: '#/components/schemas/PlayerLineup'
type: array
type: object
x-owls-required:
- home
- away
HomeAway:
properties:
away:
format: double
type:
- number
- 'null'
home:
format: double
type:
- number
- 'null'
type: object
x-owls-required:
- home
- away
SoccerScoreDetail:
description: 'Soccer result breakdown. `home.score`/`away.score` (and `score` on the stats
endpoints) are the score of the match itself, after extra time when it was
played, and NEVER include shootout goals; the shootout is only in `penalties`.'
properties:
decidedBy:
description: How a finished match was decided. Absent while in play.
type: string
x-extensible-enum:
- extra_time
- penalties
- regulation
extraTime:
description: Score at the end of extra time. Only when extra time was played.
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
penalties:
description: Penalty shootout score. Only when a shootout was played.
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
regulation:
description: Score at the end of normal time.
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
type: object
ScoresResponse:
description: Response from GET /scores/live (all sports).
properties:
cached:
type: boolean
data:
properties:
sports:
additionalProperties:
items:
$ref: '#/components/schemas/ScoreEvent'
type: array
type: object
type: object
x-owls-required:
- sports
success:
type: boolean
type: object
x-owls-required:
- success
- data
H2HData:
properties:
awayCountry:
type: string
awayRanking:
format: double
type: number
awaySlug:
type: string
headToHead:
items:
$ref: '#/components/schemas/RecentGame'
type: array
homeCountry:
type: string
homeRanking:
format: double
type: number
homeSlug:
type: string
lastGamesAway:
items:
$ref: '#/components/schemas/RecentGame'
type: array
lastGamesHome:
items:
$ref: '#/components/schemas/RecentGame'
type: array
surfaceFilter:
type: string
type: object
x-owls-required:
- lastGamesHome
- lastGamesAway
- headToHead
RecentGame:
properties:
awayTeam:
type: string
date:
format: double
type: number
homeSide:
type: boolean
homeTeam:
type: string
matchId:
type: string
result:
type: string
x-extensible-enum:
- d
- l
- w
score:
type: string
surface:
type: string
tournament:
type: string
type: object
x-owls-required:
- matchId
- date
- tournament
- homeTeam
- awayTeam
- score
- result
- homeSide
TennisScoreDetail:
description: Tennis-specific live detail (games within sets, current game points, serving).
properties:
currentGameScore:
description: Current game points (e.g. "40" vs "A"). Absent between games.
properties:
away:
type: string
home:
type: string
type: object
x-owls-required:
- home
- away
currentSet:
description: Current set number (1-indexed).
format: double
type: number
serving:
description: Which side is serving.
type: string
x-extensible-enum:
- away
- home
sets:
description: Games won by each player in each set, e.g. [{home:6,away:4},{home:3,away:2}].
items:
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
type: array
type: object
x-owls-required:
- currentSet
- sets
LiveMatchStats:
properties:
corners:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
fouls:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
freeKicks:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
goalkeeperSaves:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
offsides:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
passes:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
possession:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
redCards:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
shotsOnTarget:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
shotsTotal:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
tackles:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
throwIns:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
yellowCards:
anyOf:
- $ref: '#/components/schemas/HomeAway'
- type: 'null'
type: object
x-owls-required:
- possession
- shotsTotal
- shotsOnTarget
- corners
- fouls
- offsides
- yellowCards
- redCards
- goalkeeperSaves
- passes
- tackles
- freeKicks
- throwIns
ScoreEvent:
properties:
away:
$ref: '#/components/schemas/ScoreTeam'
baseballDetail:
$ref: '#/components/schemas/BaseballScoreDetail'
description: Baseball-specific live detail (inning, half, hits, errors, pitcher).
genericTeamStats:
additionalProperties:
properties:
away: {}
home: {}
type: object
x-owls-required:
- home
- away
description: 'Sport-specific aggregate team stats as a key-value map. For baseball this
carries the box score (hits, errors, homeRuns, runsBattedIn, leftOnBase,
walks, strikeouts, stolenBases, atBat, battingAverage, …).'
type: object
h2h:
$ref: '#/components/schemas/H2HData'
description: Head-to-head history and recent form.
home:
$ref: '#/components/schemas/ScoreTeam'
id:
type: string
incidents:
description: Live match incidents — goals, cards, subs (soccer).
items:
$ref: '#/components/schemas/MatchIncident'
type: array
lastUpdated:
description: Last time this event's CONTENT changed (score, status, linescores, …), not the poll time.
type:
- string
- 'null'
league:
type: string
lineups:
$ref: '#/components/schemas/LineupsData'
description: Starters + bench, when the source publishes them.
matchStats:
$ref: '#/components/schemas/LiveMatchStats'
description: Live in-match statistics (soccer).
name:
type: string
soccerDetail:
$ref: '#/components/schemas/SoccerScoreDetail'
description: 'Soccer result breakdown: normal time, extra time, penalty shootout.'
sourceMatchId:
description: Upstream match id, for correlating with the stats endpoints.
type: string
sport:
type: string
startTime:
description: Null when the source did not supply a start time.
type:
- string
- 'null'
status:
$ref: '#/components/schemas/ScoreStatus'
tennisDetail:
$ref: '#/components/schemas/TennisScoreDetail'
description: Tennis-specific live detail.
type: object
x-owls-required:
- id
- sport
- name
- startTime
- status
- home
- away
BaseballScoreDetail:
description: 'Baseball-specific live detail.
`inning`/`half` are present for live games only. `hits`/`errors` complete the
R-H-E line — runs are `home.score`/`away.score`, and per-inning runs are
`home.linescores`/`away.linescores`.
Outs and runners on base are NOT available: the upstream source does not
carry them.'
properties:
errors:
description: Team errors.
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
half:
description: Half of the current inning. Live games only. Absent when the source does not say.
type: string
x-extensible-enum:
- bottom
- top
hits:
description: Team hits.
properties:
away:
format: double
type: number
home:
format: double
type: number
type: object
x-owls-required:
- home
- away
inning:
description: Current inning, 1-indexed. Live games only.
format: double
type: number
pitcher:
description: Pitcher the source currently lists for each side.
properties:
away:
type:
- string
- 'null'
home:
type:
- string
- 'null'
type: object
x-owls-required:
- home
- away
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