OpenDota API endpoint
Without `patch`, lists every patch key OpenDota has notes for (from 7_06d to the current patch) in chronological order with the number of heroes and items changed. With `patch` (for example `7_38`), returns that patch's general notes, item changes and hero changes (general, talents and per-ability notes, with the hero id and name resolved).
/opendota/patch-notesHeader: x-api-key required.
Parameters:
patch: optional patch key such as 7_38 or 7_06d; omit it to list every key. Any other value returns 400.Notable response behavior:
patches (patch, version, heroes_changed, items_changed) in chronological order; the detail has general, misc, items and heroes.general, talents and abilities (ability key with its notes). The source is about 1.9 MB, so the response is cached for up to one day.| Field | Filled in, of 86 checked | Values in the sample |
|---|---|---|
| key | 86 | |
| notes | 86 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| patch | string | No | Patch key such as 7_38 or 7_06d; omit it to list every patch key | 7_38 |
curl -X GET "https://api.crawlora.net/api/v1/opendota/patch-notes" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.opendota.com/api/patch-notes",
"fetched_at": "2026-10-28T10:00:00Z",
"patch": "7_38",
"version": "7.38",
"count": 2,
"general": [
"Major Mechanics"
],
"items": [
{
"key": "blink",
"notes": [
"Cooldown reduced from 15 to 12"
]
}
],
"heroes": [
{
"key": "abaddon",
"hero_id": 102,
"name": "Abaddon",
"general": [
"Base Damage increased by 26"
],
"talents": [],
"abilities": []
}
]
}
}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.PatchNotesResponse | No | ||||
| data.count | integer | No | 116 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.general | array | No | ||||
| data.heroes | array | No | ||||
| data.heroes[].abilities | array | No | ||||
| data.heroes[].abilities[].key | string | No | abaddon_death_coil | |||
| data.heroes[].abilities[].notes | array | No | ||||
| data.heroes[].general | array | No | ||||
| data.heroes[].hero_id | integer | No | 102 | |||
| data.heroes[].key | string | No | abaddon | |||
| data.heroes[].name | string | No | Abaddon | |||
| data.heroes[].talents | array | No | ||||
| data.items | array | No | ||||
| data.items[].key | string | No | blink | |||
| data.items[].notes | array | No | ||||
| data.misc | array | No | ||||
| data.patch | string | No | 7_38 | |||
| data.patches | array | No | ||||
| data.patches[].heroes_changed | integer | No | 96 | |||
| data.patches[].items_changed | integer | No | 60 | |||
| data.patches[].patch | string | No | 7_38 | |||
| data.patches[].version | string | No | 7.38 | |||
| data.source_url | string | No | ||||
| data.version | string | No | 7.38 | |||
| 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 |
| 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/patch-notes" \
-H "x-api-key: $CRAWLORA_API_KEY"