Get a key

Players

Search by nickname, load a profile by id or slug, then pull recent map logs. Faces and team logos live under links — same shape as props and media.

Search

GET/v6/esports/{sport}/players/search
ParamTypeRequiredDescription
sportpathYesSport slug.
qstringYesNickname. Alias: search
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/players/search?q=zywoo"

Or list/filter: GET /v6/esports/cs2/players?search=zywoo — each row has links.player_image.

200 · list/search
{
  "source": "kashrock",
  "sport": "cs2",
  "players": [
    {
      "player_id": 18452,
      "nickname": "ZywOo",
      "slug": "zywoo",
      "team_id": 667,
      "links": {
        "player_image": "https://img.bo3.gg/uploads/player/18452/image/example.webp"
      }
    }
  ],
  "total_players": 1
}

Profile

GET/v6/esports/{sport}/players/{player_id}

player_id can be numeric (18452) or slug (zywoo).

cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/players/zywoo"
200 · profile
{
  "source": "kashrock",
  "sport": "cs2",
  "player": {
    "id": 18452,
    "nickname": "ZywOo",
    "slug": "zywoo",
    "team": "Team Vitality",
    "links": {
      "player_image": "https://img.bo3.gg/uploads/player/18452/image/example.webp",
      "team_logo": "https://img.bo3.gg/uploads/team/667/image/example.webp"
    }
  }
}

Stats

GET/v6/esports/{sport}/players/{player_id}/stats

Canonical KPR and related foundation stats for the player.

cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/players/zywoo/stats"

Gamelogs

GET/v6/esports/{sport}/players/{player_slug}/gamelogs

Per-map logs, newest first. Page through them with a cursor and narrow them with dates.

ParamTypeRequiredDescription
player_slugpathYesNickname or slug.
limitint—Maps per page. Default 500, capped to your plan maximum. A larger value is capped, never rejected.
cursorstring—The next_cursor from the previous page. Leave it out for the newest maps.
fromdate—Oldest map date to include, as YYYY-MM-DD in UTC. Cannot reach past your plan window.
todate—Newest map date to include, as YYYY-MM-DD in UTC. The whole day is included.
includestring—Set to rounds to add per-round timelines on pages larger than 500 maps.
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/players/zywoo/gamelogs?limit=100"

Rows include combat plus sport-native model fields when present (gold, GPM, DPM, hero, items). Missing fields stay missing. Mobile Legends and Deadlock use the same path as CS2.

Plan limits

  • Sandbox: up to 100 maps per page, from the last 30 days.
  • Hobby: up to 500 maps per page, from the last 90 days.
  • Builder: up to 2,000 maps per page, full history.
  • Pro: up to 5,000 maps per page, full history.

Paging

The response includes next_cursor while more maps remain, and null on the last page. Pass it back as cursor with the same filters to get the next page. Order stays stable while you page, and total is the number of maps inside your plan window and date filters.

cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/players/zywoo/gamelogs?limit=100&cursor={next_cursor}"

Per-round timelines come back on pages of 500 maps or fewer. Larger pages leave them out so big pages stay fast; add include=rounds to get them. The response field rounds_included tells you which you received.