API reference
Catalog API
Read the active currencies, items and packs of your game from your backend with the server API.
On this page
The catalog is what your game rewards and sells: its currencies, its items and its packs. You manage it in the dashboard, which is in French for now (« Monnaies », « Objets », « Packs »); the API only reads it. The examples on this page continue from the setup.
Get the catalog
Returns the active currencies, items and packs of the game in one call. Use it to build a shop screen, or to check a sku and its price before you sell it. Archived and draft entries are left out.
GET
/catalogAuthentication: secret key. Idempotency: not needed. Parameters: none.
curl "https://gamecoin.apilow.com/api/v1/catalog" \
-H "Authorization: Bearer $GAMECOIN_SECRET_KEY"const catalog = await gamecoin.catalog.get();
for (const item of catalog.items) console.log(item.sku, item.type, item.price?.amount);
for (const pack of catalog.packs) console.log(pack.sku, pack.priceCents);catalog = gamecoin.catalog.get()
for item in catalog.items:
print(item.sku, item.type, item.price.amount if item.price else None)
for pack in catalog.packs:
print(pack.sku, pack.price_cents)$catalog = $gamecoin->catalog->get();
foreach ($catalog->items as $item) {
echo $item->sku, ' ', $item->type, ' ', $item->price?->amount ?? 'none', "\n";
}
foreach ($catalog->packs as $pack) {
echo $pack->sku, ' ', $pack->priceCents, "\n";
}catalog, err := client.Catalog.Get(ctx)
check(err)
for _, item := range catalog.Items {
if item.Price != nil {
fmt.Println(item.SKU, item.Type, item.Price.Amount)
} else {
fmt.Println(item.SKU, item.Type, "no price")
}
}
for _, pack := range catalog.Packs {
fmt.Println(pack.SKU, pack.PriceCents)
}var catalog = await gamecoin.Catalog.GetAsync();
foreach (var item in catalog.Items) Console.WriteLine($"{item.Sku} {item.Type} {item.Price?.Amount}");
foreach (var pack in catalog.Packs) Console.WriteLine($"{pack.Sku} {pack.PriceCents}");Response 200 OK: a Catalog.
{
"currencies": [
{ "code": "gems", "name": "Gems", "purchasable": true },
{ "code": "gold", "name": "Gold", "purchasable": false }
],
"items": [
{
"sku": "potion",
"name": "Potion",
"description": null,
"type": "consumable",
"price": { "currency": "gems", "amount": 20 },
"maxOwned": null,
"clientPurchasable": true,
"metadata": {}
},
{
"sku": "fire-sword",
"name": "Fire sword",
"description": null,
"type": "durable",
"price": { "currency": "gems", "amount": 300 },
"maxOwned": 1,
"clientPurchasable": true,
"metadata": {}
}
],
"packs": [
{
"sku": "starter",
"name": "Starter pack",
"description": null,
"priceCents": 99,
"currency": "EUR",
"grants": [{ "currency": "gems", "amount": 100, "bonus": 20 }],
"items": [{ "sku": "potion", "quantity": 1 }],
"badge": null,
"maxPerPlayer": 1,
"availability": null
},
{
"sku": "gems-500",
"name": "Bag of gems",
"description": null,
"priceCents": 499,
"currency": "EUR",
"grants": [{ "currency": "gems", "amount": 500, "bonus": 50 }],
"items": [],
"badge": null,
"maxPerPlayer": null,
"availability": null
},
{
"sku": "founder-pack",
"name": "Founder pack",
"description": "Limited to the first 500 players.",
"priceCents": 1999,
"currency": "EUR",
"grants": [{ "currency": "gems", "amount": 2000, "bonus": 500 }],
"items": [{ "sku": "fire-sword", "quantity": 1 }],
"badge": null,
"maxPerPlayer": 1,
"availability": {
"startsAt": "2026-10-01T00:00:00.000Z",
"endsAt": "2026-12-01T00:00:00.000Z",
"remaining": 312,
"founder": true
}
}
],
"prelaunch": true,
"launchAt": "2026-12-01T00:00:00.000Z"
}Errors: none of its own; see the errors common to every operation.
Notes
currencies[].purchasableis true when packs can sell the currency for real money. Such a currency has apaidpart in its balances (see Wallet); a free currency such asgoldonly ever has abonuspart.items[].priceisnullwhen the item cannot be bought with a currency. Buy an item with currency refuses such an item.items[].maxOwnedis the most units a player can own, ornullfor no limit.packs[].maxPerPlayeris the most paid orders a player can have for the pack, ornull.- A pack's
grants[].amountis credited to thepaidpart of the balance andgrants[].bonusto thebonuspart.priceCentsis in euro cents, VAT included. packs[].availabilityisnullfor an ordinary pack. Otherwise it gives the sale window (startsAtincluded,endsAtexcluded), the unitsremainingand thefounderflag: see PackAvailability. The catalog also lists packs that are scheduled, ended or sold out, so that your shop can show them (coming soon, sold out); an order for such a pack is refused withPACK_NOT_AVAILABLEorPACK_SOLD_OUT.remainingis counted in the environment of the key you use: sales in the test environment never use the stock of the live environment. A pending order holds one unit until it is paid, fails or expires, soremainingcan go up again.prelaunchandlaunchAtcome from the settings of the game in the dashboard (section « Lancement »). Whileprelaunchistrue, show purchases as pre-orders and mention the launch date.- The browser reads the same data with a publishable key: Get the catalog of the client API.