> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Set 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._ Creates the catalog configuration of all virtual goods for the specified catalog version

## Error codes

This operation may return the following PlayFab errors:

| Error | Code |
| --- | --- |
| InvalidDropTable | 1201 |
| InvalidItemId | 1093 |
| InvalidItemProperties | 1091 |
| InvalidJSONContent | 1200 |
| ProductDisabledForTitle | 1609 |




## OpenAPI

````yaml /services/playfab/api-references/rest/admin/admin.openapi.json post /Admin/SetCatalogItems
openapi: 3.0.0
info:
  version: '260922'
  title: PlayFab Admin API
  description: >-
    APIs for managing title configurations, uploaded Game Server code
    executables, and user data
  termsOfService: https://playfab.com/terms/
  contact:
    url: https://community.playfab.com/index.html
  license:
    name: Apache 2.0
    url: https://github.com/PlayFab/API_Specs/blob/master/LICENSE
servers:
  - url: https://{titleId}.playfabapi.com
    description: PlayFab title endpoint
    variables:
      titleId:
        default: your_title_id
        description: Your PlayFab title ID (hex).
security: []
tags:
  - name: Account Management
    description: Account Management APIs
  - name: Authentication
    description: Authentication APIs
  - name: Characters
    description: Characters APIs
  - name: Content
    description: Content Service APIs
  - name: Custom Server Management
    description: Custom Server Management APIs
  - name: Matchmaking
    description: Matchmaking APIs
  - name: Player Data Management
    description: Player Data Management APIs
  - name: Player Item Management
    description: Player Item Management APIs
  - name: PlayStream
    description: PlayStream Management APIs
  - name: ScheduledTask
    description: Task management APIs
  - name: Segments
    description: Segment management APIs
  - name: Server-Side Cloud Script
    description: Server-Side Cloud Script APIs
  - name: Shared Group Data
    description: Shared Group Data APIs
  - name: Title-Wide Data Management
    description: Title-Wide Data Management APIs
  - name: Xbox Store
    description: Xbox Store APIs
paths:
  /Admin/SetCatalogItems:
    post:
      tags:
        - Title-Wide Data Management
      summary: Set Catalog Items
      description: >
        _NOTE: This is a Legacy Economy API, and is in bugfix-only mode. All new
        Economy features are being developed only for version 2._ Creates the
        catalog configuration of all virtual goods for the specified catalog
        version


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | InvalidDropTable | 1201 |

        | InvalidItemId | 1093 |

        | InvalidItemProperties | 1091 |

        | InvalidJSONContent | 1200 |

        | ProductDisabledForTitle | 1609 |
      operationId: SetCatalogItems
      requestBody:
        $ref: '#/components/requestBodies/UpdateCatalogItemsRequest'
      responses:
        '200':
          $ref: '#/components/responses/UpdateCatalogItemsResult'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - SecretKey: []
components:
  requestBodies:
    UpdateCatalogItemsRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateCatalogItemsRequest'
      description: >-
        When used for SetCatalogItems, this operation is not additive. Using it
        will cause the indicated catalog version to be created from scratch. If
        there is an existing catalog with the version number in question, it
        will be deleted and replaced with only the items specified in this call.
        When used for UpdateCatalogItems, this operation is additive. Items with
        ItemId values not currently in the catalog will be added, while those
        with ItemId values matching items currently in the catalog will
        overwrite those items with the given values.
  responses:
    UpdateCatalogItemsResult:
      description: ''
      content:
        application/json:
          schema:
            type: object
            properties:
              code:
                type: integer
                description: >-
                  The Http status code. If X-ReportErrorAsSuccess header is set
                  to true, this will report the actual http error code.
              status:
                type: string
                description: The Http status code as a string.
              data:
                $ref: '#/components/schemas/UpdateCatalogItemsResult'
    ApiErrorWrapper:
      description: This is the outer wrapper for all responses with errors
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorWrapper'
  schemas:
    UpdateCatalogItemsRequest:
      description: >-
        When used for SetCatalogItems, this operation is not additive. Using it
        will cause the indicated catalog version to be created from scratch. If
        there is an existing catalog with the version number in question, it
        will be deleted and replaced with only the items specified in this call.
        When used for UpdateCatalogItems, this operation is additive. Items with
        ItemId values not currently in the catalog will be added, while those
        with ItemId values matching items currently in the catalog will
        overwrite those items with the given values.
      type: object
      properties:
        Catalog:
          description: >-
            Array of catalog items to be submitted. Note that while CatalogItem
            has a parameter for CatalogVersion, it is not required and ignored
            in this call.
          type: array
          items:
            $ref: '#/components/schemas/CatalogItem'
          x-isclass: true
        CatalogVersion:
          description: Which catalog is being updated. If null, uses the default catalog.
          type: string
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        SetAsDefaultCatalog:
          description: >-
            Should this catalog be set as the default catalog. Defaults to true.
            If there is currently no default catalog, this will always set it.
          type: boolean
      example:
        CatalogVersion: '5'
        Catalog:
          - ItemId: shield_level_5
            ItemClass: shields
            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
            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
            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
            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
            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
            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
            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
            DisplayName: Consumable Item 1
            Description: Item demonstrating usage-based consumables
            VirtualCurrencyPrices:
              GV: 500
            Consumable:
              UsageCount: 3
          - ItemId: consumable_item_2
            ItemClass: Consumables
            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
            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
            DisplayName: Bundled Item 2
            Description: Item which is added to the user inventory as part of a bundle
          - ItemId: item_bundle_1
            ItemClass: Bundles
            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
            DisplayName: Key Item 1
            Description: Key used to unlock Container 1
            VirtualCurrencyPrices:
              RM: 199
          - ItemId: sub_container_item_1
            ItemClass: Containers
            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
            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
            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
            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
            DisplayName: Super Starter Pack
            Description: Everything you need to get started fast track at the right price
    UpdateCatalogItemsResult:
      type: object
      properties: {}
    ApiErrorWrapper:
      description: The basic wrapper around every failed API response
      type: object
      properties:
        code:
          description: Numerical HTTP code
          type: integer
        status:
          description: String HTTP code
          type: string
        error:
          description: Playfab error code
          type: string
        errorCode:
          description: Numerical PlayFab error code
          type: integer
        errorMessage:
          description: Description for the PlayFab errorCode
          type: string
        errorDetails:
          description: Detailed description of individual issues with the request object
          type: object
      required:
        - code
        - errorCode
    CatalogItem:
      description: A purchasable item from the item catalog
      type: object
      properties:
        Bundle:
          allOf:
            - $ref: '#/components/schemas/CatalogItemBundleInfo'
          description: >-
            defines the bundle properties for the item - bundles are items which
            contain other items, including random drop tables and virtual
            currencies
        CanBecomeCharacter:
          description: >-
            if true, then an item instance of this type can be used to grant a
            character to a user.
          type: boolean
        CatalogVersion:
          description: catalog version for this item
          type: string
        Consumable:
          allOf:
            - $ref: '#/components/schemas/CatalogItemConsumableInfo'
          description: >-
            defines the consumable properties (number of uses, timeout) for the
            item
        Container:
          allOf:
            - $ref: '#/components/schemas/CatalogItemContainerInfo'
          description: >-
            defines the container properties for the item - what items it
            contains, including random drop tables and virtual currencies, and
            what item (if any) is required to open it via the
            UnlockContainerItem API
        CustomData:
          description: game specific custom data
          type: string
        Description:
          description: text description of item, to show in-game
          type: string
        DisplayName:
          description: text name for the item, to show in-game
          type: string
        InitialLimitedEditionCount:
          description: >-
            If the item has IsLImitedEdition set to true, and this is the first
            time this ItemId has been defined as a limited edition item, this
            value determines the total number of instances to allocate for the
            title. Once this limit has been reached, no more instances of this
            ItemId can be created, and attempts to purchase or grant it will
            return a Result of false for that ItemId. If the item has already
            been defined to have a limited edition count, or if this value is
            less than zero, it will be ignored.
          type: number
          x-actualtype: int32
        IsLimitedEdition:
          description: 'BETA: If true, then only a fixed number can ever be granted.'
          type: boolean
        IsStackable:
          description: >-
            if true, then only one item instance of this type will exist and its
            remaininguses will be incremented instead. RemainingUses will cap
            out at Int32.Max (2,147,483,647). All subsequent increases will be
            discarded
          type: boolean
        IsTradable:
          description: >-
            if true, then an item instance of this type can be traded between
            players using the trading APIs
          type: boolean
        ItemClass:
          description: class to which the item belongs
          type: string
        ItemId:
          description: unique identifier for this item
          type: string
        ItemImageUrl:
          description: >-
            URL to the item image. For Facebook purchase to display the image on
            the item purchase page, this must be set to an HTTP URL.
          type: string
        RealCurrencyPrices:
          description: override prices for this item for specific currencies
          type: object
          x-actualtype: uint32
        Tags:
          description: list of item tags
          type: array
          items:
            type: string
          x-isUnordered: true
        VirtualCurrencyPrices:
          description: >-
            price of this item in virtual currencies and "RM" (the base Real
            Money purchase price, in USD pennies)
          type: object
          x-actualtype: uint32
      required:
        - ItemId
        - CanBecomeCharacter
        - IsStackable
        - IsTradable
        - IsLimitedEdition
        - InitialLimitedEditionCount
      x-sortKey: ItemId
    CatalogItemBundleInfo:
      type: object
      properties:
        BundledItems:
          description: >-
            unique ItemId values for all items which will be added to the player
            inventory when the bundle is added
          type: array
          items:
            type: string
          x-isUnordered: true
        BundledResultTables:
          description: >-
            unique TableId values for all RandomResultTable objects which are
            part of the bundle (random tables will be resolved and add the
            relevant items to the player inventory when the bundle is added)
          type: array
          items:
            type: string
          x-isUnordered: true
        BundledVirtualCurrencies:
          description: >-
            virtual currency types and balances which will be added to the
            player inventory when the bundle is added
          type: object
          x-actualtype: uint32
    CatalogItemConsumableInfo:
      type: object
      properties:
        UsageCount:
          description: >-
            number of times this object can be used, after which it will be
            removed from the player inventory
          type: number
          x-actualtype: uint32
        UsagePeriod:
          description: >-
            duration in seconds for how long the item will remain in the player
            inventory - once elapsed, the item will be removed (recommended
            minimum value is 5 seconds, as lower values can cause the item to
            expire before operations depending on this item's details have
            completed)
          type: number
          x-actualtype: uint32
        UsagePeriodGroup:
          description: >-
            all inventory item instances in the player inventory sharing a
            non-null UsagePeriodGroup have their UsagePeriod values added
            together, and share the result - when that period has elapsed, all
            the items in the group will be removed
          type: string
    CatalogItemContainerInfo:
      description: >-
        Containers are inventory items that can hold other items defined in the
        catalog, as well as virtual currency, which is added to the player
        inventory when the container is unlocked, using the UnlockContainerItem
        API. The items can be anything defined in the catalog, as well as
        RandomResultTable objects which will be resolved when the container is
        unlocked. Containers and their keys should be defined as Consumable
        (having a limited number of uses) in their catalog defintiions, unless
        the intent is for the player to be able to re-use them infinitely.
      type: object
      properties:
        ItemContents:
          description: >-
            unique ItemId values for all items which will be added to the player
            inventory, once the container has been unlocked
          type: array
          items:
            type: string
          x-isUnordered: true
        KeyItemId:
          description: >-
            ItemId for the catalog item used to unlock the container, if any (if
            not specified, a call to UnlockContainerItem will open the
            container, adding the contents to the player inventory and currency
            balances)
          type: string
        ResultTableContents:
          description: >-
            unique TableId values for all RandomResultTable objects which are
            part of the container (once unlocked, random tables will be resolved
            and add the relevant items to the player inventory)
          type: array
          items:
            type: string
          x-isUnordered: true
        VirtualCurrencyContents:
          description: >-
            virtual currency types and balances which will be added to the
            player inventory when the container is unlocked
          type: object
          x-actualtype: uint32
  securitySchemes:
    SecretKey:
      type: apiKey
      in: header
      name: X-SecretKey
      description: >-
        This API requires a title secret key, available to title admins, from
        PlayFab Game Manager.

````

## Related topics

- [Set Catalog Items](/services/playfab/api-references/rest/admin/title-wide-data-management/set-catalog-items.md)
- [Update Catalog Items](/api-reference/title-wide-data-management/update-catalog-items.md)
- [Catalogs (Legacy Economy)](/services/playfab/economy-monetization/economy/items/catalogs.md)
- [PFCatalogCatalogItem](/services/playfab/api-references/c/pfcatalogtypes/structs/pfcatalogcatalogitem.md)
- [Set Store Items](/api-reference/title-wide-data-management/set-store-items.md)
