DotA 2 Web API PHP wrapper

2.2.1 2016-06-30 09:33 UTC

This package is auto-updated.

Last update: 2020-08-03 10:37:19 UTC



Build Status Coverage Status License Latest Stable Version Dependencies Code Climate


  1. What is it? This is PHP code for processing DotA 2 API-requests.

  2. What can it do? It can get match-list for some criteria, get match-info for single match, get steam-profile info for users. AND save all this data in MySQL database. For more information see - "How to use it".

  3. What I need to work with it? First of all you need web-server with PHP 5.3+ ( PDO and cURL should be enabled) and MySQL 5. Then look at install section.


  1. Install via Composer:
    "require": {
        "kronusme/dota2-api": "2.2.1"
  1. Connect to your mysql-server with any tool (phpmyadmin, heidisql etc) and execute code from the file db_latest.sql.

  2. Initialize Dota2-Api like this:

require_once 'vendor/autoload.php';

use Dota2Api\Api;

Api::init('YOUR_API_KEY', array('localhost', 'root', 'password', 'db_name', 'table_prefix_'));


Type URL
GetMatchHistory https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/v001/
GetMatchDetails https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/v001/
GetPlayerSummaries https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/
GetLeagueListing https://api.steampowered.com/IDOTA2Match_570/GetLeagueListing/v0001/
GetLiveLeagueGames https://api.steampowered.com/IDOTA2Match_570/GetLiveLeagueGames/v0001/
GetTeamInfoByTeamID https://api.steampowered.com/IDOTA2Match_570/GetTeamInfoByTeamID/v001/
GetHeroes https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v0001/
GetTournamentPrizePool https://api.steampowered.com/IEconDOTA2_570/GetTournamentPrizePool/v1/
GetGameItems https://api.steampowered.com/IEconDOTA2_570/GetGameItems/v0001/
EconomySchema https://api.steampowered.com/IEconItems_570/GetSchema/v0001/
GetMatchHistoryBySequenceNum https://api.steampowered.com/IDOTA2Match_570/GetMatchHistoryBySequenceNum/v0001/

How to use it


Before parsing and saving leagues matches to your DB, make sure that you've saved leagues to the DB (using leaguesMapperWeb! If you try to save some "public" matches, you should REMOVE foreign key for field leagueid in the table matches!

Load some match-info

$mm = new Dota2Api\Mappers\MatchMapperWeb(121995119);
$match = $mm->load();

$match - it's an object with all match data including slots info, ability-upgrades (if provided) and pick, bans (if cm-mode).

Save match-info in the database

$mm = new Dota2Api\Mappers\MatchMapperWeb(121995119);
$match = $mm->load();
$saver = new Dota2Api\Mappers\MatchMapperDb();

matchMapperDb will check if match with $match->get('match_id') exists in the db and select method for save (insert or update).

Work with match-object

$mm = new Dota2Api\Mappers\MatchMapperWeb(121995119);
$match = $mm->load();
echo $match->get('match_id');
echo $match->get('start_time');
echo $match->get('game_mode');
$slots = $match->getAllSlots();
foreach($slots as $slot) {
    echo $slot->get('last_hits');

I want get last 25 matches with some player

$matchesMapperWeb = new Dota2Api\Mappers\MatchesMapperWeb();
$matchesShortInfo = $matchesMapperWeb->load();
foreach ($matchesShortInfo as $key=>$matchShortInfo) {
    $matchMapper = new Dota2Api\Mappers\MatchMapperWeb($key);
    $match = $matchMapper->load();
    if ($match) {
      $mm = new Dota2Api\Mappers\MatchMapperDb();

Get player info

$playersMapperWeb = new Dota2Api\Mappers\PlayersMapperWeb();
$playersInfo = $playersMapperWeb->addId('76561198067833250')->addId('76561198058587506')->load();
foreach($playersInfo as $playerInfo) {
    echo $playerInfo->get('realname');
    echo '<img src="'.$playerInfo->get('avatarfull').'" alt="'.$playerInfo->get('personaname').'" />';
    echo '<a href="'.$playerInfo->get('profileurl').'">'.$playerInfo->get('personaname').'\'s steam profile</a>';

Player's id you can get via Player::convertId('xxxxx') method (xxxxx - its DotA ID).

Get team info

$teamsMapperWeb = new Dota2Api\Mappers\TeamsMapperWeb();
$teams = $teamsMapperWeb->setTeamId(2)->setTeamsRequested(2)->load();
foreach($teams as $team) {
    echo $team->get('name');
    echo $team->get('rating');
    echo $team->get('country_code');

Get current heroes list

$heroesMapper = new Dota2Api\Mappers\HeroesMapper();
$heroes = $heroesMapper->load();

$heroes - array with numeric indexes (heroes ids)

Get current items list

$itemsMapperWeb = new Dota2Api\Mappers\ItemsMapperWeb();
$itemsInfo = $itemsMapperWeb->load();
foreach($itemsInfo as $item) {
    echo $item->get('id');
    echo $item->get('name');
    echo $item->get('cost');
    echo $item->get('secret_shop');
    echo $item->get('side_shop');
    echo $item->get('recipe');
    echo $item->get('localized_name');

Save received from web items list to db

$itemsMapperWeb = new Dota2Api\Mappers\ItemsMapperWeb();
$items = $itemsMapperWeb->load();
$itemsMapperDb = new itemsMapperDb();

Get current items list from db

$itemsMapperDb = new Dota2Api\Mappers\ItemsMapperDb();
$itemsInfo = $itemsMapperDb->load();
foreach($itemsInfo as $item) {
    echo $item->get('id');
    echo $item->get('name');
    echo $item->get('cost');
    echo $item->get('secret_shop');
    echo $item->get('side_shop');
    echo $item->get('recipe');
    echo $item->get('localized_name');

Get leagues list

$leaguesMapperWeb = new Dota2Api\Mappers\LeaguesMapperWeb();
$leagues = $leaguesMapperWeb->load();
foreach($leagues as $league) {
    echo $league->get('description');
    if ($league->get('tournament_url')) {
        echo $league->get('tournament_url');

$leagues - array with numeric indexes (leagues ids)

Get leagues prize pool

$leaguePrizePoolMapperWeb = new Dota2Api\Mappers\LeaguePrizePoolMapperWeb();
$prizePoolInfo = $leaguePrizePoolMapperWeb->load();
echo $prizePoolInfo['prize_pool'];
echo $prizePoolInfo['league_id'];
echo $prizePoolInfo['status']; // may be undefined
$prizePoolMapperDb = new Dota2Api\Mappers\LeaguePrizePoolMapperDb();
$pp = $prizePoolMapperDb->setLeagueId(600)->load();
foreach($pp as $date=>$prize_pool) {
    echo $date.' - $ '.number_format($prize_pool, 2);

Get live leagues matches

$leagueMapper = new Dota2Api\Mappers\LeagueMapper(22); // set league id (can be get via leagues_mapper)
$games = $leagueMapper->load();

$games - array of live_match objects

Get matches from local db

$matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb();
$matchesInfo = $matchesMapperDb->load();

Delete match(es) from local db

$matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb();
$matchesMapperDb->delete(array(151341579, 151401247));

$mm = new Dota2Api\Mappers\MatchMapperDb();

Get info about abilities, heroes, items, games mods, lobby types etc

$abilities = new Dota2Api\Data\Abilities();
$abilities->getDataById(5172); // return array for ability with id 5172 (BeastMaster Inner Beast)
// same, because there are no thumbs for abilities
$abilities->getImgUrlById(5172, false);

$heroes = new Dota2Api\Data\Heroes();
$heroes->getDataById(97); // get info about Magnus
$heroes->getImgUrlById(97, false); // large image
$heroes->getImgUrlById(97); // thumb

$items = new Dota2Api\Data\Items();
$items->getDataById(149); // get info about Crystalis
$items->getImgUrlById(149, false); // large image
$items->getImgUrlById(149); // thumb

$mods = new Dota2Api\Data\Mods();
$mods->getFieldById(1, 'name'); // returns 'All Pick'

$lobbies = new Dota2Api\Data\Lobbies();
$lobbies->getFieldById(2, 'name'); // returns 'Tournament'

$regions = new Dota2Api\Data\Regions();
$regions->getFieldById(132, 'name'); // returns 'Europe West'

Get map with barracks and towers

$matchMapperWeb = new Dota2Api\Mappers\MatchMapperWeb(123456789);
$match = $matchMapperWeb->load();
$map = new Dota2Api\Utils\Map($match->get('tower_status_radiant'), $match->get('tower_status_dire'), $match->get('barracks_status_radiant'), $match->get('barracks_status_dire'));
$canvas = $map->getImage();
header('Content-Type: image/jpg');

Get info about players from db

$playersMapperDb = new Dota2Api\Mappers\PlayersMapperDb();
$players_info = $playersMapperDb->addId('76561198020176880')->addId('76561197998200662')->load();

or for just getting one player, you can also use

$playerMapperDb = new Dota2Api\Mappers\PlayerMapperDb();

Save info about players into db

//fetch players from API
$playersMapperWeb = new Dota2Api\Mappers\PlayersMapperWeb();
$players = $playersMapperWeb->addId('76561198020176880')->addId('76561197998200662')->load();

//save players into db
$playerMapperDb = new Dota2Api\Mappers\PlayerMapperDb();
foreach($players as $p) {

Work with UGC Objects

$matchMapperWeb = new Dota2Api\Mappers\MatchMapperWeb(37633163);
$game = $matchMapperWeb->load();
$ugcMapperWeb = new Dota2Api\Mappers\UgcMapperWeb($game->get('radiant_logo'));
$logoData = $ugcMapperWeb->load();
echo $logoData->url;


  1. Valve for DotA 2 and Web API.

  2. MuppetMaster42, for http://dev.dota2.com/showthread.php?t=58317.

  3. Players, who don't hide their own statistic.

  4. dev.dota2 community.