> ## 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.

# Purchase Inventory Items

> Purchase an item or bundle. Up to 10,000 stacks of items can be added to a single inventory collection. Stack size is uncapped.

## Error codes

This operation may return the following PlayFab errors:

| Error | Code |
| --- | --- |
| DatabaseThroughputExceeded | 1113 |
| InsufficientFunds | 1059 |
| InvalidCatalogItemConfiguration | 4015 |
| ItemNotFound | 1047 |
| PreconditionFailed | 1610 |




## OpenAPI

````yaml post /Inventory/PurchaseInventoryItems
openapi: 3.0.0
info:
  version: '260922'
  title: PlayFab Economy API
  description: >-
    API methods for managing the catalog. Inventory manages in-game assets for
    any given entity. API methods for managing the versioned catalogs.
  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: Catalog
    description: |-
      Catalog Management APIs. In general for Catalog APIs, 
                          Read APIs are limited to 100 requests in 60 seconds 
                          for Player Entities while Title Entities are limited to 10000 requests
                          in 10 seconds. For Write APIs, Player Entities are limited to 10 requests 
                          in 30 seconds and Title Entities are limited to 1000 requests in 10 seconds.
  - name: Inventory
    description: |-
      Player Inventory Management APIs. Inventory operations work on an 
                          eventually consistent system against a cache of the Catalog. It can take a few moments for 
                          changes to propagate. In general for Inventory APIs, Read APIs are limited to 100 requests 
                          in 60 seconds for Player Entities while Title Entities are limited to 10000 requests
                          in 10 seconds. For Write APIs, Player Entities are limited to 30 requests 
                          in 90 seconds and Title Entities are limited to 1000 requests in 10 seconds.
  - name: VersionedCatalog
    description: ''
paths:
  /Inventory/PurchaseInventoryItems:
    post:
      tags:
        - Inventory
      summary: Purchase Inventory Items
      description: >
        Purchase an item or bundle. Up to 10,000 stacks of items can be added to
        a single inventory collection. Stack size is uncapped.


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | DatabaseThroughputExceeded | 1113 |

        | InsufficientFunds | 1059 |

        | InvalidCatalogItemConfiguration | 4015 |

        | ItemNotFound | 1047 |

        | PreconditionFailed | 1610 |
      operationId: PurchaseInventoryItems
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseInventoryItemsRequest'
        description: Purchase a single item or bundle, paying the associated price.
      responses:
        '200':
          $ref: '#/components/responses/PurchaseInventoryItemsResponse'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - EntityToken: []
components:
  schemas:
    PurchaseInventoryItemsRequest:
      description: Purchase a single item or bundle, paying the associated price.
      type: object
      properties:
        Amount:
          description: The amount to purchase.
          type: number
          x-actualtype: int32
        CollectionId:
          description: >-
            The id of the entity's collection to perform this action on.
            (Default="default"). The number of inventory collections is
            unlimited.
          type: string
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        DeleteEmptyStacks:
          description: >-
            Indicates whether stacks reduced to an amount of 0 during the
            request should be deleted from the inventory. (Default=false)
          type: boolean
        DurationInSeconds:
          description: The duration to purchase.
          type: number
          x-actualtype: double
        Entity:
          allOf:
            - $ref: '#/components/schemas/EntityKey'
          description: The entity to perform this action on.
        ETag:
          description: >-
            ETags are used for concurrency checking when updating resources.
            More information about using ETags can be found here:
            https://learn.microsoft.com/en-us/gaming/playfab/features/economy-v2/catalog/etags
          type: string
        IdempotencyId:
          description: >-
            The Idempotency ID for this request. Idempotency IDs can be used to
            prevent operation replay in the medium term but will be garbage
            collected eventually.
          type: string
        Item:
          allOf:
            - $ref: '#/components/schemas/InventoryItemReference'
          description: The inventory item the request applies to.
        NewStackValues:
          allOf:
            - $ref: '#/components/schemas/InitialValues'
          description: The values to apply to a stack newly created by this request.
        PriceAmounts:
          description: >-
            The per-item price the item is expected to be purchased at. This
            must match a value configured in the Catalog or specified Store. 
          type: array
          items:
            $ref: '#/components/schemas/PurchasePriceAmount'
          x-isclass: true
        StoreId:
          description: The id of the Store to purchase the item from.
          type: string
      required:
        - DeleteEmptyStacks
      example:
        Item:
          Id: 11111111-1111-1111-1111-111111111111
        Amount: 1
        PriceAmounts:
          - ItemId: cccccccc-cccc-cccc-cccc-cccccccccccc
            Amount: 15
    EntityKey:
      description: >-
        Combined entity type and ID structure which uniquely identifies a single
        entity.
      type: object
      properties:
        Id:
          description: Unique ID of the entity.
          type: string
        Type:
          description: >-
            Entity type. See
            https://learn.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types
          type: string
      required:
        - Id
    InventoryItemReference:
      type: object
      properties:
        AlternateId:
          allOf:
            - $ref: '#/components/schemas/AlternateId'
          description: The inventory item alternate id the request applies to.
        Id:
          description: The inventory item id the request applies to.
          type: string
        StackId:
          description: >-
            The inventory stack id the request should redeem to.
            (Default="default")
          type: string
    InitialValues:
      type: object
      properties:
        DisplayProperties:
          description: >-
            Game specific properties for display purposes. The Display
            Properties field has a 1000 byte limit.
          type: object
    PurchasePriceAmount:
      type: object
      properties:
        Amount:
          description: The amount of the inventory item to use in the purchase .
          type: number
          x-actualtype: int32
        ItemId:
          description: The inventory item id to use in the purchase .
          type: string
        StackId:
          description: >-
            The inventory stack id the to use in the purchase. Set to "default"
            by default
          type: string
      required:
        - Amount
    PurchaseInventoryItemsResponse:
      type: object
      properties:
        ETag:
          description: >-
            ETags are used for concurrency checking when updating resources.
            More information about using ETags can be found here:
            https://learn.microsoft.com/en-us/gaming/playfab/features/economy-v2/catalog/etags
          type: string
        IdempotencyId:
          description: The idempotency id used in the request.
          type: string
        TransactionIds:
          description: The ids of transactions that occurred as a result of the request.
          type: array
          items:
            type: string
      example:
        IdempotencyId: idempotencyId
        TransactionIds:
          - transactionId1
          - transactionId2
    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
    AlternateId:
      type: object
      properties:
        Type:
          description: Type of the alternate ID.
          type: string
        Value:
          description: Value of the alternate ID.
          type: string
  responses:
    PurchaseInventoryItemsResponse:
      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/PurchaseInventoryItemsResponse'
            example:
              code: 200
              status: OK
              data:
                IdempotencyId: idempotencyId
                TransactionIds:
                  - transactionId1
                  - transactionId2
    ApiErrorWrapper:
      description: This is the outer wrapper for all responses with errors
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorWrapper'
  securitySchemes:
    EntityToken:
      type: apiKey
      in: header
      name: X-EntityToken
      description: >-
        This API requires an Entity Session Token, available from the Entity
        GetEntityToken method.

````

## Related topics

- [Purchase Inventory Items](/api-reference/inventory/purchase-inventory-items.md)
- [Inventory Stacks](/services/playfab/economy-monetization/economy-v2/inventory/stacks.md)
- [PlayFab Inventory APIs](/services/playfab/economy-monetization/economy-v2/inventory/index.md)
- [PFInventoryPurchaseInventoryItemsRequest](/services/playfab/api-references/c/pfinventorytypes/structs/pfinventorypurchaseinventoryitemsrequest.md)
- [PFInventoryPurchaseInventoryItemsAsync](/services/playfab/api-references/c/pfinventory/functions/pfinventorypurchaseinventoryitemsasync.md)
