Get Catalog Items
NOTE: This is a Legacy Economy API, and is in bugfix-only mode. All new Economy features are being developed only for version 2. Retrieves the specified version of the title’s catalog of virtual goods, including all defined properties
Error codes
This operation may return the following PlayFab errors:
| Error | Code |
|---|---|
| ProductDisabledForTitle | 1609 |
POST
/
Admin
/
GetCatalogItems
Get Catalog Items
curl --request POST \
--url https://{titleId}.playfabapi.com/Admin/GetCatalogItems \
--header 'Content-Type: application/json' \
--header 'X-SecretKey: <api-key>' \
--data '
{
"CatalogVersion": "1"
}
'import requests
url = "https://{titleId}.playfabapi.com/Admin/GetCatalogItems"
payload = { "CatalogVersion": "1" }
headers = {
"X-SecretKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-SecretKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({CatalogVersion: '1'})
};
fetch('https://{titleId}.playfabapi.com/Admin/GetCatalogItems', 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/Admin/GetCatalogItems",
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([
'CatalogVersion' => '1'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-SecretKey: <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/Admin/GetCatalogItems"
payload := strings.NewReader("{\n \"CatalogVersion\": \"1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-SecretKey", "<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/Admin/GetCatalogItems")
.header("X-SecretKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"CatalogVersion\": \"1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{titleId}.playfabapi.com/Admin/GetCatalogItems")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-SecretKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"CatalogVersion\": \"1\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"status": "OK",
"data": {
"Catalog": [
{
"ItemId": "shield_level_5",
"ItemClass": "shields",
"CatalogVersion": "5",
"DisplayName": "Level 5 Shield",
"Description": "Strong defense against projectile attacks",
"VirtualCurrencyPrices": {
"RM": 199,
"GV": 25
},
"RealCurrencyPrices": {
"GBP": 149,
"EUR": 169
}
},
{
"ItemId": "energy_boost_1",
"ItemClass": "boosts",
"CatalogVersion": "5",
"DisplayName": "Energy Drink Six-Pack",
"Description": "Get a quick burst of energy whenever you need it",
"VirtualCurrencyPrices": {
"RM": 199,
"GV": 25
}
},
{
"ItemId": "required_item_for_grant_a_1",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 1",
"Description": "Item 1 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_2",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 2",
"Description": "Item 2 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_3",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 3",
"Description": "Item 3 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_4",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 4",
"Description": "Item 4 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "granted_item_a",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Granted Item A",
"Description": "Bonus item granted for free once the full set of 4 Grant Set items are collected"
},
{
"ItemId": "consumable_item_1",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 1",
"Description": "Item demonstrating usage-based consumables",
"VirtualCurrencyPrices": {
"GV": 500
},
"Consumable": {
"UsageCount": 3
}
},
{
"ItemId": "consumable_item_2",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 2",
"Description": "Item demonstrating time-based consumables",
"VirtualCurrencyPrices": {
"GV": 750
},
"Consumable": {
"UsagePeriod": 3600,
"UsagePeriodGroup": "usage_group_1"
}
},
{
"ItemId": "sub_bundle_item_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 1",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "sub_bundle_item_2",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 2",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "item_bundle_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Item bundle 1",
"Description": "Item which, when added to the user inventory, also adds other bundled items",
"VirtualCurrencyPrices": {
"RM": 599
},
"Bundle": {
"BundledItems": [
"sub_bundle_item_1",
"sub_bundle_item_2"
],
"BundledResultTables": [
"random_result_1"
],
"BundledVirtualCurrencies": {
"GV": 1000
}
}
},
{
"ItemId": "key_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Key Item 1",
"Description": "Key used to unlock Container 1",
"VirtualCurrencyPrices": {
"RM": 199
}
},
{
"ItemId": "sub_container_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 1",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "sub_container_item_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 2",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "item_container_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 1",
"Description": "Item which, when opened with Key Item 1, also adds the items it holds to the user inventory",
"VirtualCurrencyPrices": {
"RM": 499
},
"Consumable": {
"UsageCount": 1
},
"Container": {
"KeyItemId": "key_item_1",
"ItemContents": [
"sub_container_item_1",
"sub_container_item_2"
],
"ResultTableContents": [
"random_result_1"
],
"VirtualCurrencyContents": {
"GV": 1000
}
}
},
{
"ItemId": "item_container_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 2",
"Description": "Item which, when opened (no key needed), adds the items it holds to the user inventory",
"VirtualCurrencyPrices": {
"RM": 99
},
"Consumable": {
"UsageCount": 1
},
"Container": {
"VirtualCurrencyContents": {
"GV": 1000
}
}
},
{
"ItemId": "starterpack_1",
"ItemClass": "starterpacks",
"CatalogVersion": "5",
"DisplayName": "Super Starter Pack",
"Description": "Everything you need to get started fast track at the right price"
}
]
}
}{
"code": 123,
"errorCode": 123,
"status": "<string>",
"error": "<string>",
"errorMessage": "<string>",
"errorDetails": {}
}Authorizations
This API requires a title secret key, available to title admins, from PlayFab Game Manager.
Body
application/json
Which catalog is being requested. If null, uses the default catalog.
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
Example:
{
"Catalog": [
{
"ItemId": "shield_level_5",
"ItemClass": "shields",
"CatalogVersion": "5",
"DisplayName": "Level 5 Shield",
"Description": "Strong defense against projectile attacks",
"VirtualCurrencyPrices": { "RM": 199, "GV": 25 },
"RealCurrencyPrices": { "GBP": 149, "EUR": 169 }
},
{
"ItemId": "energy_boost_1",
"ItemClass": "boosts",
"CatalogVersion": "5",
"DisplayName": "Energy Drink Six-Pack",
"Description": "Get a quick burst of energy whenever you need it",
"VirtualCurrencyPrices": { "RM": 199, "GV": 25 }
},
{
"ItemId": "required_item_for_grant_a_1",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 1",
"Description": "Item 1 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": { "RM": 249, "GV": 1500 }
},
{
"ItemId": "required_item_for_grant_a_2",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 2",
"Description": "Item 2 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": { "RM": 249, "GV": 1500 }
},
{
"ItemId": "required_item_for_grant_a_3",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 3",
"Description": "Item 3 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": { "RM": 249, "GV": 1500 }
},
{
"ItemId": "required_item_for_grant_a_4",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 4",
"Description": "Item 4 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": { "RM": 249, "GV": 1500 }
},
{
"ItemId": "granted_item_a",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Granted Item A",
"Description": "Bonus item granted for free once the full set of 4 Grant Set items are collected"
},
{
"ItemId": "consumable_item_1",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 1",
"Description": "Item demonstrating usage-based consumables",
"VirtualCurrencyPrices": { "GV": 500 },
"Consumable": { "UsageCount": 3 }
},
{
"ItemId": "consumable_item_2",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 2",
"Description": "Item demonstrating time-based consumables",
"VirtualCurrencyPrices": { "GV": 750 },
"Consumable": {
"UsagePeriod": 3600,
"UsagePeriodGroup": "usage_group_1"
}
},
{
"ItemId": "sub_bundle_item_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 1",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "sub_bundle_item_2",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 2",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "item_bundle_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Item bundle 1",
"Description": "Item which, when added to the user inventory, also adds other bundled items",
"VirtualCurrencyPrices": { "RM": 599 },
"Bundle": {
"BundledItems": ["sub_bundle_item_1", "sub_bundle_item_2"],
"BundledResultTables": ["random_result_1"],
"BundledVirtualCurrencies": { "GV": 1000 }
}
},
{
"ItemId": "key_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Key Item 1",
"Description": "Key used to unlock Container 1",
"VirtualCurrencyPrices": { "RM": 199 }
},
{
"ItemId": "sub_container_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 1",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "sub_container_item_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 2",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "item_container_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 1",
"Description": "Item which, when opened with Key Item 1, also adds the items it holds to the user inventory",
"VirtualCurrencyPrices": { "RM": 499 },
"Consumable": { "UsageCount": 1 },
"Container": {
"KeyItemId": "key_item_1",
"ItemContents": [
"sub_container_item_1",
"sub_container_item_2"
],
"ResultTableContents": ["random_result_1"],
"VirtualCurrencyContents": { "GV": 1000 }
}
},
{
"ItemId": "item_container_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 2",
"Description": "Item which, when opened (no key needed), adds the items it holds to the user inventory",
"VirtualCurrencyPrices": { "RM": 99 },
"Consumable": { "UsageCount": 1 },
"Container": { "VirtualCurrencyContents": { "GV": 1000 } }
},
{
"ItemId": "starterpack_1",
"ItemClass": "starterpacks",
"CatalogVersion": "5",
"DisplayName": "Super Starter Pack",
"Description": "Everything you need to get started fast track at the right price"
}
]
}
Last modified on October 1, 2026
Was this page helpful?
⌘I
Get Catalog Items
curl --request POST \
--url https://{titleId}.playfabapi.com/Admin/GetCatalogItems \
--header 'Content-Type: application/json' \
--header 'X-SecretKey: <api-key>' \
--data '
{
"CatalogVersion": "1"
}
'import requests
url = "https://{titleId}.playfabapi.com/Admin/GetCatalogItems"
payload = { "CatalogVersion": "1" }
headers = {
"X-SecretKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-SecretKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({CatalogVersion: '1'})
};
fetch('https://{titleId}.playfabapi.com/Admin/GetCatalogItems', 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/Admin/GetCatalogItems",
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([
'CatalogVersion' => '1'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-SecretKey: <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/Admin/GetCatalogItems"
payload := strings.NewReader("{\n \"CatalogVersion\": \"1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-SecretKey", "<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/Admin/GetCatalogItems")
.header("X-SecretKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"CatalogVersion\": \"1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{titleId}.playfabapi.com/Admin/GetCatalogItems")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-SecretKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"CatalogVersion\": \"1\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"status": "OK",
"data": {
"Catalog": [
{
"ItemId": "shield_level_5",
"ItemClass": "shields",
"CatalogVersion": "5",
"DisplayName": "Level 5 Shield",
"Description": "Strong defense against projectile attacks",
"VirtualCurrencyPrices": {
"RM": 199,
"GV": 25
},
"RealCurrencyPrices": {
"GBP": 149,
"EUR": 169
}
},
{
"ItemId": "energy_boost_1",
"ItemClass": "boosts",
"CatalogVersion": "5",
"DisplayName": "Energy Drink Six-Pack",
"Description": "Get a quick burst of energy whenever you need it",
"VirtualCurrencyPrices": {
"RM": 199,
"GV": 25
}
},
{
"ItemId": "required_item_for_grant_a_1",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 1",
"Description": "Item 1 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_2",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 2",
"Description": "Item 2 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_3",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 3",
"Description": "Item 3 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "required_item_for_grant_a_4",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Grant Set Item 4",
"Description": "Item 4 from the set of items needed to get Granted Item A for free",
"VirtualCurrencyPrices": {
"RM": 249,
"GV": 1500
}
},
{
"ItemId": "granted_item_a",
"ItemClass": "sets",
"CatalogVersion": "5",
"DisplayName": "Granted Item A",
"Description": "Bonus item granted for free once the full set of 4 Grant Set items are collected"
},
{
"ItemId": "consumable_item_1",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 1",
"Description": "Item demonstrating usage-based consumables",
"VirtualCurrencyPrices": {
"GV": 500
},
"Consumable": {
"UsageCount": 3
}
},
{
"ItemId": "consumable_item_2",
"ItemClass": "Consumables",
"CatalogVersion": "5",
"DisplayName": "Consumable Item 2",
"Description": "Item demonstrating time-based consumables",
"VirtualCurrencyPrices": {
"GV": 750
},
"Consumable": {
"UsagePeriod": 3600,
"UsagePeriodGroup": "usage_group_1"
}
},
{
"ItemId": "sub_bundle_item_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 1",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "sub_bundle_item_2",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Bundled Item 2",
"Description": "Item which is added to the user inventory as part of a bundle"
},
{
"ItemId": "item_bundle_1",
"ItemClass": "Bundles",
"CatalogVersion": "5",
"DisplayName": "Item bundle 1",
"Description": "Item which, when added to the user inventory, also adds other bundled items",
"VirtualCurrencyPrices": {
"RM": 599
},
"Bundle": {
"BundledItems": [
"sub_bundle_item_1",
"sub_bundle_item_2"
],
"BundledResultTables": [
"random_result_1"
],
"BundledVirtualCurrencies": {
"GV": 1000
}
}
},
{
"ItemId": "key_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Key Item 1",
"Description": "Key used to unlock Container 1",
"VirtualCurrencyPrices": {
"RM": 199
}
},
{
"ItemId": "sub_container_item_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 1",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "sub_container_item_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Container Item 2",
"Description": "Item which is added to the user inventory as part of opening a container"
},
{
"ItemId": "item_container_1",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 1",
"Description": "Item which, when opened with Key Item 1, also adds the items it holds to the user inventory",
"VirtualCurrencyPrices": {
"RM": 499
},
"Consumable": {
"UsageCount": 1
},
"Container": {
"KeyItemId": "key_item_1",
"ItemContents": [
"sub_container_item_1",
"sub_container_item_2"
],
"ResultTableContents": [
"random_result_1"
],
"VirtualCurrencyContents": {
"GV": 1000
}
}
},
{
"ItemId": "item_container_2",
"ItemClass": "Containers",
"CatalogVersion": "5",
"DisplayName": "Item Container 2",
"Description": "Item which, when opened (no key needed), adds the items it holds to the user inventory",
"VirtualCurrencyPrices": {
"RM": 99
},
"Consumable": {
"UsageCount": 1
},
"Container": {
"VirtualCurrencyContents": {
"GV": 1000
}
}
},
{
"ItemId": "starterpack_1",
"ItemClass": "starterpacks",
"CatalogVersion": "5",
"DisplayName": "Super Starter Pack",
"Description": "Everything you need to get started fast track at the right price"
}
]
}
}{
"code": 123,
"errorCode": 123,
"status": "<string>",
"error": "<string>",
"errorMessage": "<string>",
"errorDetails": {}
}