OpenDota API endpoint
Returns a team's complete upstream match history with league, opponent, score and winner data. The source does not paginate this list; large histories can contain over a thousand rows. Use opendota_match for parsed player statistics.
/opendota/team-matchesReturns the complete OpenDota match history for one team, including league, opponent, score, and winner fields.
Header: Crawlora x-api-key required; no OpenDota API key is needed upstream.
Query parameters:
team_id: required positive OpenDota team ID from opendota-teams or a match response.Notable response behavior:
8255888 returned 1,266 rows (about 495 KB); the endpoint returns the full list and caches it for up to 15 minutes.radiant describes the requested team's side. team_win is derived only when OpenDota supplies radiant_win; otherwise it remains omitted.start_time is UTC in RFC 3339 format. league_id can be zero when a match has no associated league.The array is abbreviated; count reports the full team history.
The response returned 1,268 items. Field counts and profiles examine the first 500 checked items.
| Field | Filled in, of 500 checked | Values in the sample |
|---|---|---|
| match_id | 500 | |
| start_time | 500 | 2025-02-26 to 2026-10-27 |
| duration_seconds | 500 | 872 to 5,500, median 2,394 |
| league_id | 500 | |
| league_name | 500 | “PARI UNIVERSE by FISSURE” and 28 other values |
| radiant | 500 | true in 261 of 500 |
| radiant_score | 500 | 2 to 54, median 25 |
| dire_score | 500 | 2 to 63, median 24 |
| radiant_win | 500 | true in 262 of 500 |
| team_win | 500 | true in 287 of 500 |
| opposing_team_id | 500 | |
| opposing_team_name | 500 | “LEGION” and 50 other values |
| opposing_team_logo_url | 495 | cdn.steamusercontent.com and 1 other host |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| team_id | integer | Yes | Positive OpenDota team ID from opendota_teams or a match response | 8255888 |
curl -X GET "https://api.crawlora.net/api/v1/opendota/team-matches?team_id=8255888" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.opendota.com/api/teams/8255888/matches",
"fetched_at": "2026-10-27T12:00:00Z",
"team_id": 8255888,
"count": 1266,
"matches": [
{
"match_id": 9063495955,
"start_time": "2026-10-26T20:56:07Z",
"duration_seconds": 2052,
"league_id": 20395,
"league_name": "PARI UNIVERSE by FISSURE",
"radiant": true,
"radiant_score": 32,
"dire_score": 9,
"radiant_win": true,
"team_win": true,
"opposing_team_id": 10291652
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | opendota.TeamMatchesResponse | No | ||||
| data.count | integer | No | 1266 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.matches | array | No | ||||
| data.matches[].dire_score | integer | No | 9 | |||
| data.matches[].duration_seconds | integer | No | 2052 | |||
| data.matches[].league_id | integer | No | 20395 | |||
| data.matches[].league_name | string | No | PARI UNIVERSE by FISSURE | |||
| data.matches[].match_id | integer | No | 9063495955 | |||
| data.matches[].opposing_team_id | integer | No | 10291652 | |||
| data.matches[].opposing_team_logo_url | string | No | https://cdn.opendota.com/team-logo.png | |||
| data.matches[].opposing_team_name | string | No | LEGION | |||
| data.matches[].radiant | boolean | No | true | |||
| data.matches[].radiant_score | integer | No | 32 | |||
| data.matches[].radiant_win | boolean | No | true | |||
| data.matches[].start_time | string | No | 2026-10-26T20:56:07Z | |||
| data.matches[].team_win | boolean | No | true | |||
| data.source_url | string | No | ||||
| data.team_id | integer | No | 8255888 | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/opendota/team-matches?team_id=8255888" \
-H "x-api-key: $CRAWLORA_API_KEY"