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 Schedule and results API
version: 0.78.0
x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: Schedule and results
paths:
/api/v1/schedule:
get:
description: 'Returns every game on the schedule for a calendar day in your time zone, across NFL, college football, MLB, NBA, WNBA, NHL, tennis, soccer and UFC: start time, status, score and clock, both sides, and Kalshi win prices.
status is one of scheduled, in_progress, delayed, final, postponed, cancelled, time_tbd, unconfirmed. unconfirmed means the scheduled start passed long ago and no live data confirms the game started or ended, or live data for a game in progress stopped updating for more than 10 minutes.
eventId is the matching /odds eventId when the game was found there, otherwise null.
winPrice is the Kalshi price to buy that side (0 to 1), so the two sides can add to a little over 1. It is null once the market closes, and null when the market is too thin to price (the asks add up past 1.15, or 1.20 with a draw).
meta.status is no-data (nothing built for the range), stale (built more than 3 minutes ago, the schedule not refreshed for 5 minutes, or live scores more than 90 seconds old while a game has started and not finished), partial (the range reaches outside buildWindow, which runs from three UTC days back to nine UTC days ahead, a day in range was not built, or the schedule list behind the build was cut short), or ok, checked in that order.'
operationId: getDaySchedule
parameters:
- description: Calendar day as YYYY-MM-DD in the tz zone. Defaults to the current date in that zone.
in: query
name: date
schema:
type: string
- description: IANA time zone that defines the day, for example America/Los_Angeles. Defaults to America/New_York. An unknown zone returns 400.
in: query
name: tz
schema:
type: string
- description: Number of days from date, 1 to 10. Defaults to 1.
in: query
name: days
schema:
type: string
- description: 'Comma separated: nfl, ncaaf, mlb, nba, wnba, nhl, tennis, soccer, ufc. Defaults to all. An unknown sport returns 400 with the supported list.'
in: query
name: sport
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DayScheduleResponse'
description: OK
summary: Returns every game on the schedule for a calendar day in your time zone, across…
tags:
- Schedule and results
x-owls-access: All paying tiers
x-owls-sdk-method: getDaySchedule
/api/v1/{sport}/results:
get:
description: 'Returns completed games for a sport with their final scores.
503 when the results source is unavailable; retry shortly.'
operationId: getResults
parameters:
- in: path
name: sport
required: true
schema:
type: string
x-extensible-enum:
- cricket
- darts
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- table_tennis
- tennis
- wnba
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsResponse'
description: OK
summary: Returns completed games for a sport with their final scores
tags:
- Schedule and results
x-owls-access: All paying tiers
x-owls-sdk-method: getResults
/api/v1/{sport}/schedule:
get:
description: 'Returns upcoming games for a sport: matchups, start times and competition, before they go live.
503 when the schedule source is unavailable; retry shortly.'
operationId: getSchedule
parameters:
- in: path
name: sport
required: true
schema:
type: string
x-extensible-enum:
- cricket
- darts
- mlb
- nba
- ncaab
- ncaaf
- nfl
- nhl
- soccer
- table_tennis
- tennis
- wnba
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduleResponse'
description: OK
summary: 'Returns upcoming games for a sport: matchups, start times and competition…'
tags:
- Schedule and results
x-owls-access: All paying tiers
x-owls-sdk-method: getSchedule
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
DayScheduleStatus:
description: "A game's state on the day schedule. Open: a new value must not break a reader.\n- `unconfirmed`: the scheduled start passed long ago and no live data confirms the\n game started or ended, or live data for a game in progress stopped updating for\n more than 10 minutes.\n- `time_tbd`: the start time is not set yet."
type: string
x-extensible-enum:
- cancelled
- delayed
- final
- in_progress
- postponed
- scheduled
- time_tbd
- unconfirmed
DayScheduleBuildWindow:
description: 'The days the schedule is built for: three UTC days back to nine ahead.'
properties:
from:
type: string
to:
type: string
type: object
x-owls-required:
- from
- to
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
DayScheduleWindow:
description: A UTC instant range `[start, end)`.
properties:
end:
type: string
start:
type: string
type: object
x-owls-required:
- start
- end
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
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
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
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
HomeAway:
properties:
away:
format: double
type:
- number
- 'null'
home:
format: double
type:
- number
- 'null'
type: object
x-owls-required:
- home
- away
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
DayScheduleResponse:
description: 'Response from GET /api/v1/schedule. `games` are in start order (larger volume first
among games starting together).'
properties:
count:
format: double
type: number
date:
description: The day asked for (or today in `tz`), YYYY-MM-DD.
type: string
days:
format: double
type: number
games:
items:
$ref: '#/components/schemas/DayScheduleGame'
type: array
meta:
$ref: '#/components/schemas/DayScheduleMeta'
sports:
description: The sports asked for (all nine by default).
items:
type: string
x-extensible-enum:
- mlb
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
- ufc
- wnba
type: array
success:
type: boolean
tz:
type: string
type: object
x-owls-required:
- success
- date
- days
- tz
- sports
- count
- games
- meta
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
DayScheduleMeta:
description: "Freshness of a day-schedule answer. `status`, first match wins:\n- `no-data`: nothing built for the range.\n- `stale`: built more than 3 minutes ago, the schedule not refreshed for 5\n minutes, or live scores more than 90 seconds old while a game has started and\n not finished.\n- `partial`: the range reaches outside `buildWindow`, a day in range was not\n built, or the list behind the build was cut short.\n- `ok`."
properties:
ageSeconds:
description: Seconds since `cacheTimestamp`.
format: double
type:
- number
- 'null'
buildWindow:
anyOf:
- $ref: '#/components/schemas/DayScheduleBuildWindow'
- type: 'null'
cacheTimestamp:
description: Build time of the least recently built day in range; null when none is known.
type:
- string
- 'null'
liveAgeSeconds:
description: Seconds since live data (scores, clocks) was last read in full.
format: double
type:
- number
- 'null'
source:
description: Where the schedule comes from, currently "kalshi".
type: string
status:
type: string
x-extensible-enum:
- no-data
- ok
- partial
- stale
timestamp:
type: string
window:
$ref: '#/components/schemas/DayScheduleWindow'
description: 'The UTC range served: local midnight of `date` to local midnight `days` later.'
type: object
x-owls-required:
- source
- status
- cacheTimestamp
- ageSeconds
- liveAgeSeconds
- buildWindow
- window
- timestamp
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
DayScheduleCompetitor:
description: 'One side of a game. Team sports list away then home; tennis and UFC list the
first then the second competitor, with `side` null.'
properties:
code:
type: string
name:
type: string
score:
description: Null before the game has a score.
format: double
type:
- number
- 'null'
sets:
description: 'Tennis only: games won in each set, in set order.'
items:
format: double
type: number
type: array
short:
type: string
side:
type:
- string
- 'null'
x-extensible-enum:
- away
- home
winPrice:
description: 'Kalshi price to buy this side to win, 0 to 1, so the two sides can add to a
little over 1. Null once the market closes, and null when the market is too thin
to price.'
format: double
type:
- number
- 'null'
winner:
description: Set once the game is final; null before then, and on a level final score.
type:
- boolean
- 'null'
type: object
x-owls-required:
- side
- name
- short
- code
- score
- winner
- winPrice
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
ResultsResponse:
description: Response from GET /{sport}/results (completed games).
properties:
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
DayScheduleStartCheckResult:
description: How an independent source's start time compares with the schedule's.
type: string
x-extensible-enum:
- agree
- differs
- missing
DayScheduleGame:
description: One game on the day schedule.
properties:
competition:
description: Tennis tournament or UFC event name; null elsewhere.
type:
- string
- 'null'
competitors:
description: Always two entries; see {@link DayScheduleCompetitor} for the order.
items:
$ref: '#/components/schemas/DayScheduleCompetitor'
type: array
drawPrice:
description: 'Soccer only: Kalshi price for the draw.'
format: double
type:
- number
- 'null'
eventId:
description: The game's eventId on /api/v1/{sport}/odds when it was found there, else null.
type:
- string
- 'null'
id:
description: Stable for the life of the game, even when it is rescheduled.
type: string
kalshiEventTicker:
type:
- string
- 'null'
league:
type: string
liveUpdatedAt:
description: When this game's live data (status, score, clock) was last read; null before it has any.
type:
- string
- 'null'
round:
description: Tennis round, playoff "Game N", or UFC weight class; null when none.
type:
- string
- 'null'
sport:
type: string
x-extensible-enum:
- mlb
- nba
- ncaaf
- nfl
- nhl
- soccer
- tennis
- ufc
- wnba
startCheck:
$ref: '#/components/schemas/DayScheduleStartCheck'
startTime:
description: Scheduled start, ISO 8601 UTC.
type: string
status:
$ref: '#/components/schemas/DayScheduleStatus'
statusDetail:
description: 'Clock or result detail: "Q2 8:12", "Top 5th", "45''", "Final/OT", "KO/TKO R1 3:58".'
type:
- string
- 'null'
updatedAt:
type: string
volume:
description: Kalshi volume across the game's winner markets, in contracts. Games starting together are ordered by it.
format: double
type: number
type: object
x-owls-required:
- id
- sport
- league
- competition
- round
- startTime
- status
- statusDetail
- competitors
- drawPrice
- kalshiEventTicker
- startCheck
- eventId
- liveUpdatedAt
- volume
- updatedAt
DayScheduleStartCheck:
description: The game's start time compared with independent sources.
properties:
differsByMinutes:
description: The larger of the two gaps below, in minutes; null when neither differs.
format: double
type:
- number
- 'null'
flashscore:
$ref: '#/components/schemas/DayScheduleStartCheckResult'
description: Against an independent scores feed.
flashscoreMinutes:
description: Minutes between this start and the scores feed's start, when they differ.
format: double
type:
- number
- 'null'
sportsbooks:
$ref: '#/components/schemas/DayScheduleStartCheckResult'
description: Against the sportsbooks on /odds.
sportsbooksMinutes:
description: Minutes between this start and the sportsbooks' start, when they differ.
format: double
type:
- number
- 'null'
type: object
x-owls-required:
- sportsbooks
- flashscore
- differsByMinutes
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
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
ScheduleResponse:
description: Response from GET /{sport}/schedule (upcoming games).
properties:
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
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
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://artifacts.apis.io/owlsinsight-com/openapi/owlsinsight-com-schedule-and-results-api-openapi.yml