Stats

API change history

API that provides statistical data about Players and Matches.

Halo 5 - Player Service Records - Custom Local

Retrieves Service Records for the Custom Local Game Mode for one or more players. A Service Record contains a player's lifetime statistics in the Game Mode. Games with the Custom Local Game Mode are played on Local Servers. For games played on Xbox Live Servers, use the "Halo 5 - Player Service Records - Custom" Endpoint. A player's Custom Local Service Record summarizes games played on or after December 22, 2017.


Changelog

December 22, 2017:

  • Added Endpoint.

Try it

Request

Request URL

Request parameters

  • string

    A comma-separated list of Gamertags. Up to 32 Gamertags may be specified.

Request headers

  • string
    Subscription key which provides access to this API. Found in your Profile.

Request body

Responses

200 OK

The response body will contain the Service Records for the requested player(s).

Representations

{
  // Set of responses. One per user queried.
  "Results": [
    {
      // The player's gamertag.
      "Id": "string",

      // The result of the query for the player. One of the following:
      //   Success = 0,
      //   NotFound = 1,
      //   ServiceFailure = 2,
      //   ServiceUnavailable = 3
      // It is possible for different requests from the batch to succeed and fail
      // independently.
      "ResultCode": "int",

      // The Service Record result for the player. Only set if ResultCode is Success.
      "Result": {

        // Custom stats data.
        "CustomStats": {

          // List of custom stats by CustomGameBaseVariant.
          "CustomGameBaseVariantStats": [
            {
              // The game base variant specific stats. Flexible stats are available via
              // the Metadata API.
              "FlexibleStats": {

                // The set of flexible stats that are derived from medal events.
                "MedalStatCounts": [
                  {
                    // The ID of the flexible stat.
                    "Id": "guid",

                    // The number of times this flexible stat was earned.
                    "Count": "int"
                  }
                ],

                // The set of flexible stats that are derived from impulse events.
                "ImpulseStatCounts": [
                  {
                    // The ID of the flexible stat.
                    "Id": "guid",

                    // The number of times this flexible stat was earned.
                    "Count": "int"
                  }
                ],

                // The set of flexible stats that are derived from medal time lapses.
                "MedalTimelapses": [
                  {
                    // The ID of the flexible stat.
                    "Id": "guid",

                    // The amount of time the flexible stat was earned for. This is
                    // expressed as an ISO 8601 Duration.
                    "Timelapse": "string"
                  }
                ],    

                // The set of flexible stats that are derived from impulse time lapses.
                "ImpulseTimelapses": [
                  {
                    // The ID of the flexible stat.
                    "Id": "guid",

                    // The amount of time the flexible stat was earned for. This is
                    // expressed as an ISO 8601 Duration.
                    "Timelapse": "string"
                  }
                ]
              },

              // The ID of the game base variant. Game base variants are available via
              // the Metadata API.
              "GameBaseVariantId": "guid",

              // Total number of kills done by the player. This includes melee kills,
              // shoulder bash kills and Spartan charge kills, all power weapons, AI
              // kills and vehicle destructions. 
              "TotalKills": "int",

              // Total number of headshots done by the player.
              "TotalHeadshots": "int",

              // Total weapon damage dealt by the player.
              "TotalWeaponDamage": "double",

              // Total number of shots fired by the player.
              "TotalShotsFired": "int",

              // Total number of shots landed by the player.
              "TotalShotsLanded": "int",

              // The weapon the player used to get the most kills.
              "WeaponWithMostKills": {

                "WeaponId": {

                  // The ID of the weapon. Weapons are available via the Metadata API.
                  "StockId": "int",

                  // Any attachments the weapon had.
                  "Attachments": [
                    "int"
                  ]
                },

                // The number of shots fired for this weapon.
                "TotalShotsFired": "int",

                // The number of shots landed for this weapon.
                "TotalShotsLanded": "int",

                // The number of headshots for this weapon.
                "TotalHeadshots": "int",

                // The number of kills for this weapon.
                "TotalKills": "int",

                // The total damage dealt for this weapon.
                "TotalDamageDealt": "double",

                // The total possession time for this weapon. This is expressed as an ISO
                // 8601 Duration.
                "TotalPossessionTime": "string"
              },

              // Total number of melee kills by the player.
              "TotalMeleeKills": "int",

              // Total melee damage dealt by the player.
              "TotalMeleeDamage": "double",

              // Total number of assassinations by the player.
              "TotalAssassinations": "int",

              // Total number of ground pound kills by the player.
              "TotalGroundPoundKills": "int",

              // Total ground pound damage dealt by the player.
              "TotalGroundPoundDamage": "double",

              // Total number of shoulder bash kills by the player.
              "TotalShoulderBashKills": "int",

              // Total shoulder bash damage dealt by the player.
              "TotalShoulderBashDamage": "double",

              // Total grenade damage dealt by the player.
              "TotalGrenadeDamage": "double",

              // Total number of power weapon kills by the player.
              "TotalPowerWeaponKills": "int",

              // Total power weapon damage dealt by the player.
              "TotalPowerWeaponDamage": "double",

              // Total number of power weapon grabs by the player.
              "TotalPowerWeaponGrabs": "int",

              // Total power weapon possession by the player. This is expressed as an ISO
              // 8601 Duration.
              "TotalPowerWeaponPossessionTime": "string",

              // Total number of deaths by the player.
              "TotalDeaths": "int",

              // Total number of assists by the player.
              "TotalAssists": "int",

              // Total number of games the player has completed.
              "TotalGamesCompleted": "int",

              // Total number of games won by the player.
              "TotalGamesWon": "int",

              // Total number of games lost by the player.
              "TotalGamesLost": "int",

              // Total number of games tied by the player.
              "TotalGamesTied": "int",

              // Total timed played by the player.
              "TotalTimePlayed": "string",

              // Total number of grenade kills by the player.
              "TotalGrenadeKills": "int",

              // The set of Medals earned by the player.
              "MedalAwards": [
                {
                  // The ID of the Medal. Medals are available via the Metadata API.
                  "MedalId": "int",

                  // The number of times the Medal was earned.
                  "Count": "int"
                }
              ], 

              // List of enemy vehicles destroyed. Vehicles are available via the
              // Metadata API. Note: this stat measures enemy vehicles, not any vehicle
              // destruction.
              "DestroyedEnemyVehicles": [
                {
                  // The enemy this entry references
                  "Enemy": {

                    // The Base ID for the enemy.
                    "BaseId": "int",

                    // The attachments (variants) for the enemy.
                    "Attachments": [
                      "int"
                    ]
                  },

                  // Total number of kills on the enemy by the player
                  "TotalKills": "int"
                }
              ],

              // List of enemies killed, per enemy type. Enemies are available via the
              // Metadata API.
              "EnemyKills": [
                {
                  // The enemy this entry references
                  "Enemy": {

                    // The Base ID for the enemy.
                    "BaseId": "int",

                    // The attachments (variants) for the enemy.
                    "Attachments": [
                      "int"
                    ]
                  },

                  // Total number of kills on the enemy by the player
                  "TotalKills": "int"
                }
              ],

              // The set of weapons (weapons and vehicles included) used by the player.
              "WeaponStats": [
                {
                  "WeaponId": {

                    // The ID of the weapon. Weapons are available via the Metadata API.
                    "StockId": "int",

                    // Any attachments the weapon had.
                    "Attachments": [ 
                      "int" 
                    ]
                  },

                  // The number of shots fired for this weapon.
                  "TotalShotsFired": "int",

                  // The number of shots landed for this weapon.
                  "TotalShotsLanded": "int",

                  // The number of headshots for this weapon.
                  "TotalHeadshots": "int",

                  // The number of kills for this weapon.
                  "TotalKills": "int",

                  // The total damage dealt for this weapon.
                  "TotalDamageDealt": "double",

                  // The total possession time for this weapon. This is expressed as an
                  // ISO 8601 Duration.
                  "TotalPossessionTime": "string"
                }
              ],

              // The set of Impulses (invisible Medals) earned by the player.
              "Impulses": [
                {
                  // The ID of the Impulse. Impulses are available via the Metadata API.
                  "Id": "int",

                  // The number of times the Impulse was earned.
                  "Count": "int"
                }
              ],

              // Total number of Spartan kills by the player.
              "TotalSpartanKills": "int"
            }
          ],

          // A list of up to 3 top game base variants played by the user Top means
          // Wins/Completed matches. If there is a tie, the one with more completions is
          // higher. If there's still a tie, the GUIDs are sorted and selected
          "TopGameBaseVariants": [
            {
              // Rank between 1-3
              "GameBaseVariantRank": "int",

              // Number of games played in game base variant
              "NumberOfMatchesCompleted": "int",

              // Id of the game base variant
              "GameBaseVariantId": "guid",

              // Number of matches won on game base variant
              "NumberOfMatchesWon": "int"
            }
          ],

          // Total number of kills done by the player. This includes melee kills,
          // shoulder bash kills and Spartan charge kills, all power weapons, AI kills
          // and vehicle destructions. 
          "TotalKills": "int",

          // Total number of headshots done by the player.
          "TotalHeadshots": "int",

          // Total weapon damage dealt by the player.
          "TotalWeaponDamage": "double",

          // Total number of shots fired by the player.
          "TotalShotsFired": "int",

          // Total number of shots landed by the player.
          "TotalShotsLanded": "int",

          // The weapon the player used to get the most kills.
          "WeaponWithMostKills": {

            "WeaponId": {

              // The ID of the weapon. Weapons are available via the Metadata API.
              "StockId": "int",

              // Any attachments the weapon had.
              "Attachments": [
                "int"
              ]
            },

            // The number of shots fired for this weapon.
            "TotalShotsFired": "int",

            // The number of shots landed for this weapon.
            "TotalShotsLanded": "int",

            // The number of headshots for this weapon.
            "TotalHeadshots": "int",

            // The number of kills for this weapon.
            "TotalKills": "int",

            // The total damage dealt for this weapon.
            "TotalDamageDealt": "double",

            // The total possession time for this weapon. This is expressed as an ISO
            // 8601 Duration.
            "TotalPossessionTime": "string"
          },

          // Total number of melee kills by the player.
          "TotalMeleeKills": "int",

          // Total melee damage dealt by the player.
          "TotalMeleeDamage": "double",

          // Total number of assassinations by the player.
          "TotalAssassinations": "int",

          // Total number of ground pound kills by the player.
          "TotalGroundPoundKills": "int",

          // Total ground pound damage dealt by the player.
          "TotalGroundPoundDamage": "double",

          // Total number of shoulder bash kills by the player.
          "TotalShoulderBashKills": "int",

          // Total shoulder bash damage dealt by the player.
          "TotalShoulderBashDamage": "double",

          // Total grenade damage dealt by the player.
          "TotalGrenadeDamage": "double",

          // Total number of power weapon kills by the player.
          "TotalPowerWeaponKills": "int",

          // Total power weapon damage dealt by the player.
          "TotalPowerWeaponDamage": "double",

          // Total number of power weapon grabs by the player.
          "TotalPowerWeaponGrabs": "int",

          // Total power weapon possession by the player. This is expressed as an ISO
          // 8601 Duration.
          "TotalPowerWeaponPossessionTime": "string",

          // Total number of deaths by the player.
          "TotalDeaths": "int",

          // Total number of assists by the player.
          "TotalAssists": "int",

          // Not used.
          "TotalGamesCompleted": "int",

          // Not used.
          "TotalGamesWon": "int",

          // Not used.
          "TotalGamesLost": "int",

          // Not used.
          "TotalGamesTied": "int",

          // Total timed played by the player.
          "TotalTimePlayed": "string",

          // Total number of grenade kills by the player.
          "TotalGrenadeKills": "int",

          // The set of Medals earned by the player.
          "MedalAwards": [
            {
              // The ID of the Medal. Medals are available via the Metadata API.
              "MedalId": "int",

              // The number of times the Medal was earned.
              "Count": "int"
            }
          ], 

          // List of enemy vehicles destroyed. Vehicles are available via the Metadata
          // API. Note: this stat measures enemy vehicles, not any vehicle destruction.
          "DestroyedEnemyVehicles": [
            {
              // The enemy this entry references
              "Enemy": {

                // The Base ID for the enemy.
                "BaseId": "int",

                // The attachments (variants) for the enemy.
                "Attachments": [
                  "int"
                ]
              },

              // Total number of kills on the enemy by the player
              "TotalKills": "int"
            }
          ],

          // List of enemies killed, per enemy type. Enemies are available via the
          // Metadata API.
          "EnemyKills": [
            {
              // The enemy this entry references
              "Enemy": {

                // The Base ID for the enemy.
                "BaseId": "int",

                // The attachments (variants) for the enemy.
                "Attachments": [
                  "int"
                ]
              },

              // Total number of kills on the enemy by the player
              "TotalKills": "int"
            }
          ],

          // The set of weapons (weapons and vehicles included) used by the player.
          "WeaponStats": [
            {
              "WeaponId": {

                // The ID of the weapon. Weapons are available via the Metadata API.
                "StockId": "int",

                // Any attachments the weapon had.
                "Attachments": [ 
                  "int" 
                ]
              },

              // The number of shots fired for this weapon.
              "TotalShotsFired": "int",

              // The number of shots landed for this weapon.
              "TotalShotsLanded": "int",

              // The number of headshots for this weapon.
              "TotalHeadshots": "int",

              // The number of kills for this weapon.
              "TotalKills": "int",

              // The total damage dealt for this weapon.
              "TotalDamageDealt": "double",

              // The total possession time for this weapon. This is expressed as an ISO
              // 8601 Duration.
              "TotalPossessionTime": "string"
            }
          ],

          // The set of Impulses (invisible Medals) earned by the player.
          "Impulses": [
            {
              // The ID of the Impulse. Impulses are available via the Metadata API.
              "Id": "int",

              // The number of times the Impulse was earned.
              "Count": "int"
            }
          ],

          // Total number of Spartan kills by the player.
          "TotalSpartanKills": "int"
        },

        // Information about the player for whom this data was returned.
        "PlayerId": {

          // The gamertag of the player queried.
          "GamerTag": "string",

          // Internal use only. This will always be null.
          "Xuid": null
        },

        // The player's Spartan Rank. Zero for custom.
        "SpartanRank": "int",

        // The player's XP. Zero for custom.
        "Xp": "int"
      }
    }
  ],

  // Internal use only. A set of related resource links.
  "Links": null
}

404 Not Found

One or more Gamertags don't pass validation rules.

Representations

500 Internal Server Error

Internal Server Error

Representations

503 Service Unavailable

Service Unavailable

Representations

Code samples

@ECHO OFF

curl -v -X GET "https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}"
-H "Ocp-Apim-Subscription-Key: {subscription key}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");

            var uri = "https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}&" + queryString;

            var response = await client.GetAsync(uri);
        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}");


            URI uri = builder.build();
            HttpGet request = new HttpGet(uri);
            request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}&" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
            },
            type: "GET",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"GET"];
    // Request headers
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Ocp-Apim-Subscription-Key' => '{subscription key}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_GET);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('www.haloapi.com')
    conn.request("GET", "/stats/h5/servicerecords/customlocal?players={players}&%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('www.haloapi.com')
    conn.request("GET", "/stats/h5/servicerecords/customlocal?players={players}&%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://www.haloapi.com/stats/h5/servicerecords/customlocal?players={players}')

request = Net::HTTP::Get.new(uri.request_uri)
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body