# Catalog schema

> Find the fields you can use to define listings in your catalog, including localized content, pricing, and webshop display metadata.

The catalog schema defines the structure of a catalog listing in your IAP catalog. Each listing describes its core identity, localized display content, pricing, and optional store metadata.

Not all fields apply to every listing. If you sell through a webshop, you can extend a listing with additional display options. Refer to the [webshop extension fields](./dashboard-catalog/add-catalog-item.md#webshop-fields).

## Listing schema

Refer to the following fields that are available to you when you create a catalog listing:

**catalogListingId** (string, required): A unique identifier for this listing, distinct from the `uSKU`. Allows unique listings for the same in-game item.**uSKU** (string, required): The product's unique identifier (SKU). 1–141 characters, limited to letters, numbers, and the `.`, `_`, and `-` characters.**type** (string, required): Product type. One of `Consumable`, `NonConsumable`, or `Subscription`.**imageUrl** (string): Absolute HTTPS URL of the listing's standard image asset.**productDetails** (object\[], required): Localized content for the listing, with one entry per supported language. Must contain at least one entry.**language** (string, required): BCP 47 language tag for this entry (e.g. `en-US`, `es-ES`).**title** (string, required): Localized listing title. Up to 50 characters.**subtitle** (string): Localized listing subtitle. Up to 50 characters.**description** (string): Localized listing description shown to the player. Up to 250 characters.**badge** (object): Promotional badge displayed on the listing.**text** (string, required): Badge label text (e.g. `+125`, `25% OFF`).**imageUrl** (string): Absolute HTTPS URL of the badge image asset.**pricing** (object\[], required): Pricing entries for each supported currency. Must contain at least one entry, and must include an entry in `USD`.**currencyCode** (string, required): ISO 4217 currency code (for example, `USD`, `EUR`).**amount** (integer, required): The amount charged for the product, in micros (1,000,000 micros = 1 unit of currency). For example, `9990000` is 9.99. Must be greater than 0.**webshopPrice** (integer): The price shown on the webshop, in micros. Set this to give the product a web-specific price.**storeIdOverrides** (object\[]): Store-specific product IDs that override the `uSKU` for native stores.**store** (string, required): The store this override applies to. One of `apple` or `google`.**value** (string, required): The store-specific product identifier.

## Example catalog

The following catalog listing carries both base catalog fields and webshop extension fields. Prices are expressed in micros, where 1,000,000 is one unit of the currency.

```json
[
  {
    "catalogListingId": "gems_medium_default",
    "uSKU": "com.example.gems.medium",
    "type": "Consumable",
    "imageUrl": "https://cdn.example.com/gems-medium.png",
    "productDetails": [
      {
        "language": "en",
        "title": "Medium Gem Pack",
        "description": "A handy stash of gems to spend in game.",
        "subtitle": "500 gems",
        "badge": { "text": "Best value", "imageUrl": "https://cdn.example.com/gem-icon.png" }
      }
    ],
    "pricing": [
      { "currencyCode": "USD", "amount": 9990000, "webshopPrice": 7990000 }
    ],
    "categories": ["gems"],
    "hdImages": [
      { "url": "https://cdn.example.com/gems-medium-hd.png", "altText": "A pile of gems" }
    ],
    "promotion": { "type": "Sale", "endsAt": "2026-07-01T00:00:00Z" },
    "sortIndex": 10
  }
]
```

## Additional resources

* Refer to [Create an IAP catalog](./catalogs.md) to understand the best method for you to create a catalog.
* [Manage your catalog in the Dashboard](./dashboard-catalog/_index.md).
