Gift Card Catalog API: What a Catalogue Endpoint Should Return

A gift card catalog API should return, for every product, enough data to sell it without a human in the loop: a stable product ID, brand, redemption region, currency, denomination rules, current trade price, availability, delivery type and any input the order needs. If a field is missing, someone on your team will end up filling it by hand, and hand-filled catalogues drift quickly.

How often to pull the catalogue and how to handle price drift is covered in our catalogue sync guide. This article is about the shape of the response itself: what to expect, what to ask for, and which gaps turn into production incidents.

One product, one row, one stable ID

The unit of a catalogue is not a brand; it is a sellable product. “Steam Wallet” is a brand. “Steam Wallet, 50 USD, redeemable in the United States” is a product. A good catalogue endpoint returns one entry per product with an identifier that never changes, even when the name, image or price does.

Stable IDs matter because everything downstream references them: your storefront listings, your order records, your reconciliation reports. A provider that re-issues IDs on every catalogue refresh forces you to match products by name, and name matching breaks the first time someone fixes a typo.

The fields that matter

A typical entry looks something like this. Field names vary by provider; the content is what to check.

{
  "product_id": "prd_8f21c",
  "brand": "Example Games",
  "name": "Example Games Wallet 50 USD (US)",
  "region": "US",
  "currency": "USD",
  "denomination": { "type": "fixed", "value": "50.00" },
  "price": { "amount": "...", "currency": "USD" },
  "available": true,
  "delivery_type": "code",
  "required_inputs": [],
  "max_quantity_per_order": 100,
  "redemption_url": "https://redeem.example.com",
  "updated_at": "2026-10-01T09:00:00Z"
}
FieldWhy you need itWhat goes wrong without it
Stable product IDOrder and report referencesName matching, broken history
RegionWhere the card redeemsWrong-region sales and refunds
Face currency and valueWhat the customer receivesMislabelled listings
Denomination typeFixed amount or open rangeOrders for values that do not exist
Trade price and currencyWhat you pay per unitQuoting from guesswork
AvailabilityCan it be bought right nowCheckout failures on dead products
Delivery typeCode, link or direct top-upWrong fulfilment flow
Required inputsPlayer ID, server, emailOrders rejected at submission
Per-order limitsMax quantity per requestBulk runs failing mid-batch
Updated timestampFreshness of this entryNo way to detect stale data

Region is a first-class field, not part of the name

Most gift cards are locked to a redemption country, for the reasons laid out in why gift cards are region-locked, though some products are multi-region, so check per product. A catalogue that only carries region inside a free-text name (”… (EU)”) makes you parse strings to decide who can buy what. Ask for region as a structured field, ideally an ISO country code or a documented list of region codes, so your storefront can filter by the buyer’s location without regular expressions.

The same goes for currency. The face value currency (what the card loads) and the price currency (what you are billed in) can differ, and both should be explicit.

Denominations: fixed values and open ranges

Some products come in preset amounts; others accept any value inside a range, sometimes in fixed steps. The trade-offs are covered in fixed vs open value denominations. For the API, the point is that the catalogue must say which kind each product is. A fixed product needs its value; an open product needs minimum, maximum and step. Without the step, your form will accept 37.50 for a product that only exists in whole units, and the order will fail at submission.

Delivery type and required inputs

Not every catalogue item is a code. Direct top-ups credit a game account and need a player ID, sometimes a server too; the details are in player ID validation. If the catalogue exposes delivery_type and a machine-readable list of required inputs, your checkout can render the right form per product automatically. If it does not, you end up hard-coding exceptions per brand, and every new title becomes a release.

Filtering, paging and change detection

A catalogue with hundreds of brands across many regions runs to thousands of products. Three features keep that manageable:

  • Filters by brand, region, delivery type and availability, so a regional storefront pulls only what it can sell.
  • Pagination with a stable cursor, so a long pull does not skip or repeat items while the catalogue changes underneath it.
  • Change detection, either an updated_since parameter or per-entry timestamps, so routine syncs fetch the delta rather than the whole list.

A single-product lookup by ID is the fourth, quieter requirement. It is what lets you re-check price and availability at order time without pulling everything again.

Catalogue endpoint checklist

Before you build against a catalogue API, confirm each of these:

  1. Product IDs are stable across refreshes and documented as such.
  2. Region and both currencies are structured fields.
  3. Denomination type is explicit, with range and step for open products.
  4. Availability is per product and reflects live stock, not a daily batch.
  5. Delivery type and required inputs are machine-readable.
  6. Delisted products disappear or flip to unavailable in a documented way.
  7. Paging, filters and a single-product lookup exist.
  8. Every entry carries an updated timestamp.

Giftoro exposes catalogue, pricing and instant code delivery through one integration; the gift card API overview describes what that covers, and the specification with a sandbox key is available on request.

Frequently asked questions

What is a gift card catalog API?

It is the part of a distributor’s API that lists the products you can buy: brands, regional variants, denominations, prices and availability. Your storefront reads it to build listings and to check price and stock before ordering. Ordering and code delivery usually live on separate endpoints of the same integration.

How often should I call the catalogue endpoint?

Pull the full catalogue on a schedule (many teams pull hourly) and use change detection where the API supports it. For anything with money attached, re-check the single product live at order time rather than trusting the last sync.

Why does the same brand appear many times in the catalogue?

Because each combination of region, currency and denomination is a separate product. A brand sold in five regions with six amounts each is thirty catalogue entries, each with its own ID, price and stock state. That is expected, not duplication.

Should catalogue prices be shown directly to customers?

No. The catalogue price is your trade price, not your retail price. Your storefront applies its own pricing rules on top, and should keep the trade price out of public pages and client-side code entirely.

What should happen when a product disappears from the catalogue?

Mark it unavailable and hide it from browsing, but keep its record so past orders and reports still resolve. Products sometimes return after a short absence, and a hidden entry is one flag away from being live again.

All product and company names are trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them; Giftoro is an independent distributor.