Update Statistics
Update statistics on an entity profile. Depending on the statistic definition, this may result in entity being ranked on various leaderboards.
Allowed entity token types: title, title_player_account, game_server
Error codes
This operation may return the following PlayFab errors:
| Error | Code |
|---|---|
| APINotEnabledForGameClientAccess | 1082 |
| EntityIsNotAMember | 1615 |
| EntityTypeMismatchWithStatDefinition | 1582 |
| InvalidEntityType | 1373 |
| InvalidEntityTypeForAggregation | 23006 |
| InvalidExternalEntityId | 1594 |
| InvalidStatisticScore | 1563 |
| MetadataLengthExceeded | 23014 |
| NotAuthorized | 1089 |
| StatisticColumnLengthMismatch | 1593 |
| StatisticNotFound | 1195 |
| StatisticUpdateNotAllowedWhileLinked | 23010 |
| TransactionAlreadyApplied | 1596 |
| UpdatingStatisticsUsingTransactionIdNotAvailableForFreeTier | 1595 |
curl --request POST \
--url https://{titleId}.playfabapi.com/Statistic/UpdateStatistics \
--header 'Content-Type: application/json' \
--header 'X-EntityToken: <api-key>' \
--data '
{
"Statistics": [
{
"Name": "RoundsWon",
"Metadata": "BestRun:34.13,Car:13452",
"Scores": [
"100",
"200"
]
},
{
"Name": "FastestTimesByMap",
"Metadata": "Car:13452",
"Scores": [
"200",
"300"
]
},
{
"Name": "TotalCarTime",
"Scores": [
"300",
"400"
]
}
],
"Entity": {
"Id": "A197412JDA",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
'import requests
url = "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics"
payload = {
"Statistics": [
{
"Name": "RoundsWon",
"Metadata": "BestRun:34.13,Car:13452",
"Scores": ["100", "200"]
},
{
"Name": "FastestTimesByMap",
"Metadata": "Car:13452",
"Scores": ["200", "300"]
},
{
"Name": "TotalCarTime",
"Scores": ["300", "400"]
}
],
"Entity": {
"Id": "A197412JDA",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
headers = {
"X-EntityToken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-EntityToken': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
Statistics: [
{Name: 'RoundsWon', Metadata: 'BestRun:34.13,Car:13452', Scores: ['100', '200']},
{Name: 'FastestTimesByMap', Metadata: 'Car:13452', Scores: ['200', '300']},
{Name: 'TotalCarTime', Scores: ['300', '400']}
],
Entity: {
Id: 'A197412JDA',
Type: 'title_player_account',
TypeString: 'title_player_account'
}
})
};
fetch('https://{titleId}.playfabapi.com/Statistic/UpdateStatistics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'Statistics' => [
[
'Name' => 'RoundsWon',
'Metadata' => 'BestRun:34.13,Car:13452',
'Scores' => [
'100',
'200'
]
],
[
'Name' => 'FastestTimesByMap',
'Metadata' => 'Car:13452',
'Scores' => [
'200',
'300'
]
],
[
'Name' => 'TotalCarTime',
'Scores' => [
'300',
'400'
]
]
],
'Entity' => [
'Id' => 'A197412JDA',
'Type' => 'title_player_account',
'TypeString' => 'title_player_account'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-EntityToken: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics"
payload := strings.NewReader("{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-EntityToken", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{titleId}.playfabapi.com/Statistic/UpdateStatistics")
.header("X-EntityToken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{titleId}.playfabapi.com/Statistic/UpdateStatistics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-EntityToken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"status": "OK",
"data": {
"ProfileVersion": 56,
"Statistics": {
"SpeedRuns": {
"Name": "SpeedRuns",
"Value": 89
}
},
"Entity": {
"Id": "184131840178",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
}{
"code": 123,
"errorCode": 123,
"status": "<string>",
"error": "<string>",
"errorMessage": "<string>",
"errorDetails": {}
}Authorizations
This API requires an Entity Session Token, available from the Entity GetEntityToken method.
Body
Collection of statistics to update, maximum 50.
Show child attributes
Show child attributes
The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.).
The optional entity to perform this action on. Defaults to the currently logged in entity.
Show child attributes
Show child attributes
Response
The Http status code. If X-ReportErrorAsSuccess header is set to true, this will report the actual http error code.
The Http status code as a string.
Show child attributes
Show child attributes
{ "ProfileVersion": 56, "Statistics": { "SpeedRuns": { "Name": "SpeedRuns", "Value": 89 } }, "Entity": { "Id": "184131840178", "Type": "title_player_account", "TypeString": "title_player_account" } }
Was this page helpful?
curl --request POST \
--url https://{titleId}.playfabapi.com/Statistic/UpdateStatistics \
--header 'Content-Type: application/json' \
--header 'X-EntityToken: <api-key>' \
--data '
{
"Statistics": [
{
"Name": "RoundsWon",
"Metadata": "BestRun:34.13,Car:13452",
"Scores": [
"100",
"200"
]
},
{
"Name": "FastestTimesByMap",
"Metadata": "Car:13452",
"Scores": [
"200",
"300"
]
},
{
"Name": "TotalCarTime",
"Scores": [
"300",
"400"
]
}
],
"Entity": {
"Id": "A197412JDA",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
'import requests
url = "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics"
payload = {
"Statistics": [
{
"Name": "RoundsWon",
"Metadata": "BestRun:34.13,Car:13452",
"Scores": ["100", "200"]
},
{
"Name": "FastestTimesByMap",
"Metadata": "Car:13452",
"Scores": ["200", "300"]
},
{
"Name": "TotalCarTime",
"Scores": ["300", "400"]
}
],
"Entity": {
"Id": "A197412JDA",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
headers = {
"X-EntityToken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-EntityToken': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
Statistics: [
{Name: 'RoundsWon', Metadata: 'BestRun:34.13,Car:13452', Scores: ['100', '200']},
{Name: 'FastestTimesByMap', Metadata: 'Car:13452', Scores: ['200', '300']},
{Name: 'TotalCarTime', Scores: ['300', '400']}
],
Entity: {
Id: 'A197412JDA',
Type: 'title_player_account',
TypeString: 'title_player_account'
}
})
};
fetch('https://{titleId}.playfabapi.com/Statistic/UpdateStatistics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'Statistics' => [
[
'Name' => 'RoundsWon',
'Metadata' => 'BestRun:34.13,Car:13452',
'Scores' => [
'100',
'200'
]
],
[
'Name' => 'FastestTimesByMap',
'Metadata' => 'Car:13452',
'Scores' => [
'200',
'300'
]
],
[
'Name' => 'TotalCarTime',
'Scores' => [
'300',
'400'
]
]
],
'Entity' => [
'Id' => 'A197412JDA',
'Type' => 'title_player_account',
'TypeString' => 'title_player_account'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-EntityToken: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{titleId}.playfabapi.com/Statistic/UpdateStatistics"
payload := strings.NewReader("{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-EntityToken", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{titleId}.playfabapi.com/Statistic/UpdateStatistics")
.header("X-EntityToken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{titleId}.playfabapi.com/Statistic/UpdateStatistics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-EntityToken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"Statistics\": [\n {\n \"Name\": \"RoundsWon\",\n \"Metadata\": \"BestRun:34.13,Car:13452\",\n \"Scores\": [\n \"100\",\n \"200\"\n ]\n },\n {\n \"Name\": \"FastestTimesByMap\",\n \"Metadata\": \"Car:13452\",\n \"Scores\": [\n \"200\",\n \"300\"\n ]\n },\n {\n \"Name\": \"TotalCarTime\",\n \"Scores\": [\n \"300\",\n \"400\"\n ]\n }\n ],\n \"Entity\": {\n \"Id\": \"A197412JDA\",\n \"Type\": \"title_player_account\",\n \"TypeString\": \"title_player_account\"\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"status": "OK",
"data": {
"ProfileVersion": 56,
"Statistics": {
"SpeedRuns": {
"Name": "SpeedRuns",
"Value": 89
}
},
"Entity": {
"Id": "184131840178",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
}{
"code": 123,
"errorCode": 123,
"status": "<string>",
"error": "<string>",
"errorMessage": "<string>",
"errorDetails": {}
}