OpenDota API endpoint
Returns Dota 2 abilities from OpenDota's constants table as compact summaries (key, display name, behavior, target team and type, damage type, dispellable, BKB pierce, cooldown, mana cost, innate flag, description), sorted by key. Internal helper entries without a display name are skipped. `q` searches the key and display name.
/opendota/abilitiesHeader: x-api-key required.
Parameters:
q: optional case-insensitive search on the ability key or display name.limit: optional number of abilities, 1 to 500; defaults to 50.Notable response behavior:
15 12 9 6). total counts every match before limit.q to narrow it. Use opendota-hero-abilities to list one hero's abilities, talents and facets.| Field | Filled in, of 8 checked | Values in the sample |
|---|---|---|
| key | 8 | |
| name | 8 | “Blink” and 5 other values |
| behavior | 3 | median 1 entry |
| cooldown | 3 | “10.5 9 7.5 6” and 2 other values |
| mana_cost | 3 | “65 60 55 50” and 2 other values |
| innate | 8 | true in 0 of 8 |
| description | 3 | “Short distance teleportation that allows Anti-Mage to move…” and 2 other values |
| damage_type | 1 | “Physical” |
| bkb_pierce | 1 | “Yes” |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| q | string | No | Case-insensitive search on the ability key or display name, for example blink | ||
| limit | integer | No | 50 | Number of abilities to return, 1 to 500; defaults to 50 Minimum: 1. Maximum: 500. |
curl -X GET "https://api.crawlora.net/api/v1/opendota/abilities?q=coffee&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.opendota.com/api/abilities",
"fetched_at": "2026-10-28T10:00:00Z",
"total": 1,
"count": 1,
"abilities": [
{
"key": "antimage_blink",
"name": "Blink",
"behavior": [
"Point Target"
],
"cooldown": "15 12 9 6",
"mana_cost": "60 50 40 30",
"innate": false,
"description": "Teleport to a target point."
}
]
}
}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.AbilitiesResponse | No | ||||
| data.abilities | array | No | ||||
| data.abilities[].behavior | array | No | ||||
| data.abilities[].bkb_pierce | string | No | Yes | |||
| data.abilities[].cooldown | string | No | 15 12 9 6 | |||
| data.abilities[].damage_type | string | No | Magical | |||
| data.abilities[].description | string | No | ||||
| data.abilities[].dispellable | string | No | No | |||
| data.abilities[].innate | boolean | No | false | |||
| data.abilities[].key | string | No | antimage_blink | |||
| data.abilities[].mana_cost | string | No | 60 70 80 90 | |||
| data.abilities[].name | string | No | Blink | |||
| data.abilities[].target_team | string | No | Enemy | |||
| data.abilities[].target_type | string | No | Hero | |||
| data.count | integer | No | 50 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 2804 | |||
| 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/abilities?q=coffee&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"