GET/api/versions

Roster versions

Rosters and ratings by game edition. Still on NBA 2K26? Read the archived 2K26 roster instead of the current one. The current edition answers at the same URL shape, so one client can point at any season by changing :version.

NO KEY REQUIRED · 60 REQ/MIN PER IP
RESPONSE

A list of editions under data, current first, then newest archived, with meta carrying count and current (the current edition key). Each entry carries the fields below.

gameVersion
string
The edition key used in every versioned path, e.g. 2K27, 2K26.
label
string
Display name, e.g. NBA 2K26.
status
string
current for the edition the live database tracks, archived for a frozen snapshot.
playerCount
number
Players in the edition across every era.
teamTypeCounts
object
Player counts per era: { curr, class, allt }.
capturedAt / source
string · archived only
When the snapshot was taken (ISO 8601) and where it came from.
note
string · optional
Free-text provenance note set when the edition was archived.
frozenAt / frozenSource
string · current only, optional
Present when a standby snapshot of the current edition already exists in the archive. The current edition is still served live; the snapshot takes over once the season rolls over.

RESPONSES ARE CACHED 1H AND SUPPORT ETAG / 304 REVALIDATION.

THE :VERSION PATH SEGMENT

Every route below takes an edition key in the path. 2K26 and 2k26 both work (the key is normalized to uppercase). Anything that is not shaped like 2K plus two digits returns 400 INVALID_VERSION; an edition that is not archived returns 404 VERSION_NOT_FOUND with the available keys under details.availableVersions. The current edition is served from the live database, so /api/versions/2K27/players returns what /api/players returns today.

KEYED ROUTES REQUIRE X-API-KEY HEADER · 500 REQ/HR FREE
GET /API/VERSIONS/:VERSION/PLAYERS

Players in one edition, filterable and paginated. Sorted by overall descending, then name.

era
string
curr (default), class, allt, or all for every era in one call. teamType is a supported alias.
team
string
Full team name, e.g. Denver Nuggets or 1995-96 Chicago Bulls.
position
string
Position or group: PG, SG, SF, PF, C, or guard, wing, big.
minRating / maxRating
number
Bound the overall rating, 0 to 99.
search
string
Case-insensitive name substring.
limit / offset
number
Page size (1 to 100, default 50) and the number of rows to skip (0 or more). meta carries gameVersion, count, total, hasMore, offset, and limit.
GET /API/VERSIONS/:VERSION/PLAYERS/BULK

The whole matching set for one edition in a single call, sorted by overall descending, capped at 10,000 rows. Costs one request against your rate limit. meta carries gameVersion, count, total, filters, capturedAt, and source.

teamType
string
curr (default), class, or allt.
team
string
Full team name.
minRating / maxRating
number
Bound the overall rating, 0 to 99.
position
string
Position or group, same values as /players above.

CACHED 1H WITH ETAG.

GET /API/VERSIONS/:VERSION/PLAYERS/:SLUG

One player in one edition. Unknown slugs return 404 PLAYER_NOT_FOUND with a hint.

:slug
path · string
The player slug, e.g. nikola-jokic.
teamType
string · optional
curr, class, or allt. Omit it and, when the slug is on more than one roster (another era, or several classic squads), data is an array with one entry per roster and meta.variants lists each { teamType, team }. teamType narrows to one era but can still return several rosters.
GET /API/VERSIONS/:VERSION/TEAMS

Teams in one edition. Each row is teamName, teamType, playerCount, averageRating, and logo, the same shape as /api/teams.

era
string
curr (default), class, or allt. teamType is a supported alias.
PROVENANCE

Every row returned from a versioned route carries gameVersion. 2K26 is the final pre-2K27-reveal snapshot, captured 2026-08-08: 1,889 players across current, classic, and all-time rosters, with overall, positions, physicals, every attribute, and badge counts with the top three badges. Archived editions do not change. The current edition is also reachable at /api/versions/2K27/..., so one URL shape covers every season.

ARCHIVED EDITIONS ARE READ-ONLY SNAPSHOTS · THE CURRENT EDITION FOLLOWS THE LIVE SCRAPE.

# Which editions exist (no key needed)
curl 'https://api.nba2kapi.com/api/versions'

# 2K26 Denver Nuggets, top five by overall
curl 'https://api.nba2kapi.com/api/versions/2K26/players?\
team=Denver%20Nuggets&limit=5' \
  -H 'X-API-Key: YOUR_KEY'
RESPONSE200 OK
{
  "success": true,
  "data": [
    {
      "gameVersion": "2K26",
      "slug": "nikola-jokic",
      "name": "Nikola Jokic",
      "team": "Denver Nuggets",
      "teamType": "curr",
      "overall": 98,
      "positions": ["C"],
      "height": "6'11\"",
      "attributes": { "closeShot": 99, "midRangeShot": 98, … },
      "badges": { "total": 24, "hallOfFame": 6, … }
    },
    {
      "gameVersion": "2K26",
      "slug": "jamal-murray",
      "name": "Jamal Murray",
      "overall": 89,
      …
    },
    …
  ],
  "meta": {
    "gameVersion": "2K26",
    "count": 5,
    "total": 14,
    "hasMore": true,
    "offset": 0,
    "limit": 5
  }
}
nba2kapiData from 2kratings.com · Not affiliated with 2K Sports or the NBAAPI Docs →