dunkapi-com Multi Table API
The Multi-table API from dunkapi-com — 4 operation(s) for multi-table.
The Multi-table API from dunkapi-com — 4 operation(s) for multi-table.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/dunkapi-com:dunkapi-com-multi-table-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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:
title: DunkAPI Multi Table API
version: 1.0.0
description: DunkAPI basketball data. Every tool is a POST to /v1/{tool} with a JSON body of its arguments and costs the credits in x-credits. The same tools are an MCP server at https://mcp.dunkapi.com/mcp and free accounts get credits every month at https://dunkapi.com/signup
termsOfService: https://dunkapi.com/terms
contact:
name: DunkAPI support
email: support@dunkapi.com
url: https://dunkapi.com/docs
servers:
- url: https://mcp.dunkapi.com
security:
- apiKey: []
- bearer: []
tags:
- name: Multi-table
paths:
/v1/get_plays:
post:
operationId: get_plays
summary: Plays
description: 'Use for play-by-play: every event of a game, or a player''s or team''s plays across a season, with shot location (feet), zone, our expected points, the score and the home win probability after each play (2018 on). Filter to shots, makes or misses, a zone, a period or clutch time. Pass league for the WNBA (wnba) or college (ncaam, ncaaw); default NBA. Costs 10 credits.'
tags:
- Multi-table
x-credits: 10
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
game_id:
description: 'One game: every play in order.'
type: string
player_id:
description: A player's plays (with season).
type: string
team:
description: A team's plays (id or abbreviation).
type: string
season:
description: 'Season by the year it ends (default: the latest; ignored with game_id).'
type:
- number
- string
season_type:
type: string
enum:
- regular
- postseason
- play_in
- preseason
shots_only:
description: Field goal and free throw attempts only.
type: boolean
made:
description: Only made (true) or missed (false) shots.
type: boolean
zone:
description: One shot zone.
type: string
enum:
- restricted_area
- paint
- midrange
- corner_3
- above_break_3
- free_throw
period:
type: integer
minimum: 1
maximum: 10
clutch:
description: 'Last 5 minutes of the 4th quarter (college men: 2nd half) or overtime, score within 5.'
type: boolean
limit:
description: Max plays (default 200).
type: integer
minimum: 1
maximum: 1000
offset:
type: integer
minimum: 0
maximum: 9007199254740991
league:
description: 'League. Defaults to nba. One of: nba, wnba, ncaam, ncaaw.'
type: string
enum:
- nba
- wnba
- ncaam
- ncaaw
additionalProperties: false
responses:
'200':
description: The result, wrapped in data.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
plays:
type: array
items:
type: object
propertyNames:
type: string
additionalProperties: {}
count:
type: number
next_offset:
type:
- number
- 'null'
required:
- plays
- count
additionalProperties: false
required:
- data
'400':
description: Invalid arguments.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'402':
description: Not enough credits.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'429':
description: Rate limited.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
/v1/get_shot_chart:
post:
operationId: get_shot_chart
summary: Shot chart
description: 'Use for a shot profile: attempts, makes, percentage, points per shot and expected points per shot in each zone (restricted area, paint, midrange, corner three, above-the-break three, free throws) for a player, a team, a team''s opponents or one game. include_shots adds every located shot''s x/y and result for drawing a chart. Costs 10 credits.'
tags:
- Multi-table
x-credits: 10
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
player_id:
type: string
team:
description: Team id or abbreviation.
type: string
opponent:
description: 'With team: the shots its opponents took (its defence).'
type: boolean
game_id:
type: string
season:
description: 'Season by the year it ends (default: the latest).'
type:
- number
- string
season_type:
type: string
enum:
- regular
- postseason
- play_in
- preseason
include_shots:
description: Add each shot's x, y and result (up to 3,000).
type: boolean
league:
description: 'League. Defaults to nba. One of: nba, wnba.'
type: string
enum:
- nba
- wnba
additionalProperties: false
responses:
'200':
description: The result, wrapped in data.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
season:
type:
- number
- 'null'
zones:
type: array
items:
type: object
propertyNames:
type: string
additionalProperties: {}
field_goal_attempts:
type: number
share:
type: object
propertyNames:
type: string
additionalProperties:
type:
- number
- 'null'
shots:
type: array
items:
type: object
propertyNames:
type: string
additionalProperties: {}
shots_note:
type: string
note:
type: string
unlocated_attempts:
type: number
unlocated_note:
type: string
required:
- season
- zones
- field_goal_attempts
additionalProperties: false
required:
- data
'400':
description: Invalid arguments.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'402':
description: Not enough credits.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'429':
description: Rate limited.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
/v1/get_player_props:
post:
operationId: get_player_props
summary: Player props
description: 'Use for player prop lines by sportsbook: over/under on points, rebounds, assists, threes, points + rebounds + assists, blocks and steals, from May 2023 for the NBA and WNBA and the 2023-24 season for men''s college basketball (DraftKings, FanDuel, BetMGM, ESPN BET, Pinnacle and others). Pass game_id for every player''s props in one game, or player_id with from_date (and to_date) for one player across games (up to 100). A game costs 10 credits before it starts and 20 once it has (accounts opened before October 30 2026 pay 10 for every game). Returns the closing line by default (the last before the game starts) or the opening line, with each book''s over and under prices. Each row has captured_at, scheduled_start and minutes_before_scheduled_start (negative when captured after the scheduled start); a row is kept when it was captured before the sportsbooks'' listed start, which in the NBA is usually about 10 minutes after the scheduled one, so filter on minutes_before_scheduled_start > 0 for a strictly before-schedule backtest. Outside football the archive mostly holds one pre-game capture per line, so the opening and closing lines are usually the same; the opening line differs only where a second capture was taken (live capture from October 2026, and wherever else it is held). Set estimate_only to get the price without being charged. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.'
tags:
- Multi-table
x-credits: 10
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
game_id:
description: 'Game id: every player''s props for that game.'
type: string
player_id:
description: 'Player id (e.g. 3945274) from search_players. With from_date: that player''s props across games.'
type: string
from_date:
description: 'With player_id: first date, YYYY-MM-DD (the game''s date).'
type: string
to_date:
description: 'With player_id: last date (default: no end), YYYY-MM-DD (the game''s date).'
type: string
market:
description: 'One market: player_points (points), player_rebounds (rebounds), player_assists (assists), player_threes (three-pointers made), player_points_rebounds_assists (points + rebounds + assists), player_blocks (blocks), player_steals (steals)'
type: string
enum:
- player_points
- player_rebounds
- player_assists
- player_threes
- player_points_rebounds_assists
- player_blocks
- player_steals
bookmaker:
description: Bookmaker key, e.g. draftkings, fanduel, pinnacle.
type: string
snapshot_type:
description: 'closing (default): the last line before the game starts. opening: the first one captured, which is the same capture as the close wherever only one was taken.'
type: string
enum:
- opening
- closing
estimate_only:
description: Return what this call would cost, without charging or running it.
type: boolean
league:
description: 'League. Defaults to nba. One of: nba, wnba, ncaam.'
type: string
enum:
- nba
- wnba
- ncaam
additionalProperties: false
responses:
'200':
description: The result, wrapped in data.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
snapshot_type:
type: string
games:
type: number
props:
type: array
items:
type: object
properties:
game_id:
type: string
game_date:
type:
- string
- 'null'
player_name:
type: string
player_id:
type:
- string
- number
- 'null'
market:
type: string
bookmaker:
type: string
line:
type:
- number
- 'null'
over_odds:
type:
- number
- 'null'
under_odds:
type:
- number
- 'null'
captured_at:
type: string
scheduled_start:
type:
- string
- 'null'
minutes_before_scheduled_start:
type:
- number
- 'null'
source:
type: string
required:
- game_id
- game_date
- player_name
- player_id
- market
- bookmaker
- line
- over_odds
- under_odds
- captured_at
- source
additionalProperties: false
count:
type: number
credits_per_game:
type: number
next_from_date:
type:
- string
- 'null'
note:
type: string
estimate_only:
type: boolean
tool:
type: string
credits:
type: number
additionalProperties: false
required:
- data
'400':
description: Invalid arguments.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'402':
description: Not enough credits.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'429':
description: Rate limited.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
/v1/get_prop_history:
post:
operationId: get_prop_history
summary: Prop history
description: 'Use to see how a player did against his prop line over time: for one market (points, rebounds, assists, threes, points + rebounds + assists, blocks or steals), one row per game with the closing line (the median across books, or one book''s), the opening line (the same as the close wherever only one capture was taken), the prices, what the player actually recorded from our box scores and the result against the line, plus the over rate. Costs 10 credits for up to 200 games. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.'
tags:
- Multi-table
x-credits: 10
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
player_id:
type: string
description: Player id (e.g. 3945274) from search_players.
market:
type: string
enum:
- player_points
- player_rebounds
- player_assists
- player_threes
- player_points_rebounds_assists
- player_blocks
- player_steals
description: 'The market: player_points (points), player_rebounds (rebounds), player_assists (assists), player_threes (three-pointers made), player_points_rebounds_assists (points + rebounds + assists), player_blocks (blocks), player_steals (steals)'
from_date:
description: First date, YYYY-MM-DD (the game's date).
type: string
to_date:
description: Last date, YYYY-MM-DD (the game's date).
type: string
bookmaker:
description: One book's closing line instead of the median across books, e.g. draftkings.
type: string
limit:
description: Games to return, oldest first (default 50, max 200). next_from_date says where to continue.
type: integer
minimum: 1
maximum: 200
league:
description: 'League. Defaults to nba. One of: nba, wnba, ncaam.'
type: string
enum:
- nba
- wnba
- ncaam
required:
- player_id
- market
additionalProperties: false
responses:
'200':
description: The result, wrapped in data.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
player_id:
type:
- string
- number
player_name:
type:
- string
- 'null'
market:
type: string
stat:
type: string
bookmaker:
type:
- string
- 'null'
games:
type: array
items:
type: object
properties:
game_id:
type: string
game_date:
type:
- string
- 'null'
line:
type:
- number
- 'null'
open_line:
type:
- number
- 'null'
over_odds:
type:
- number
- 'null'
under_odds:
type:
- number
- 'null'
books:
type: number
actual:
type:
- number
- 'null'
result:
anyOf:
- type: string
enum:
- over
- under
- push
- type: 'null'
margin:
type:
- number
- 'null'
required:
- game_id
- game_date
- line
- open_line
- over_odds
- under_odds
- books
- actual
- result
- margin
additionalProperties: false
count:
type: number
summary:
type: object
properties:
games:
type: number
graded:
type: number
overs:
type: number
unders:
type: number
pushes:
type: number
over_rate:
type:
- number
- 'null'
avg_line:
type:
- number
- 'null'
avg_actual:
type:
- number
- 'null'
required:
- games
- graded
- overs
- unders
- pushes
- over_rate
- avg_line
- avg_actual
additionalProperties: false
truncated:
type: boolean
next_from_date:
type:
- string
- 'null'
note:
type: string
estimate_only:
type: boolean
tool:
type: string
credits:
type: number
required:
- player_id
- player_name
- market
- stat
- bookmaker
- games
- count
- summary
additionalProperties: false
required:
- data
'400':
description: Invalid arguments.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'402':
description: Not enough credits.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
'429':
description: Rate limited.
content:
application/json:
schema:
type: object
properties:
error:
type: string
required:
- error
components:
securitySchemes:
apiKey:
type: apiKey
in: header
name: x-api-key
bearer:
type: http
scheme: bearer
description: The same API key as a bearer token.
externalDocs:
description: Documentation
url: https://dunkapi.com/docs