Endpoint Playground
Returns, for every Dota 2 hero or for one `hero_id`, what Aghanim's Scepter and Aghanim's Shard do: whether each upgrade exists, its description, the skill it changes and whether it adds a new skill. `include_lore=true` adds each hero's lore text (about 155 KB for all heroes), so it is off by default. An unknown hero id returns not found. Take `hero_id` from opendota-heroes.
29 Oct 2026: 1 heroes; 5 fields had a value in every checked item.
Sample value profiles: name: “npc_dota_hero_antimage”.
curl 'https://api.crawlora.net/api/v1/opendota/hero-descriptions' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| hero_id | integer | No | Positive hero id from opendota-heroes; omit it for all heroes | |
| include_lore | boolean | No | true adds each hero's lore text; defaults to false |
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.opendota.com/api/constants/aghs_desc",
"fetched_at": "2026-10-29T10:00:00Z",
"hero_id": 1,
"include_lore": true,
"count": 1,
"heroes": [
{
"hero_id": 1,
"name": "npc_dota_hero_antimage",
"key": "antimage",
"scepter": {
"available": true,
"description": "After casting Blink, your next Mana Break within 5s burns an additional 20% max mana and prevents the target from regenerating or gaining mana for a short durat ...",
"skill_name": "Blink",
"new_skill": false
},
"shard": {
"available": true,
"description": "Creates a blinked fragment of Anti-Mage next to the enemy caster upon reflecting their unit-targeted spell while active. ...",
"skill_name": "Counterspell",
"new_skill": false
},
"lore": "The monks of Turstarkuri watched the rugged valleys below their mountain monastery as wave after wave of invaders swept through the lower kingdoms. Ascetic and ..."
}
]
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.