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

# Start Purchase

> _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 an order for a list of items from the title catalog

## Error codes

This operation may return the following PlayFab errors:

| Error | Code |
| --- | --- |
| ProductDisabledForTitle | 1609 |
| StoreNotFound | 1221 |




## OpenAPI

````yaml post /Client/StartPurchase
openapi: 3.0.0
info:
  version: '260922'
  title: PlayFab Client API
  description: >-
    APIs which provide the full range of PlayFab features available to the
    client - authentication, account and data management, inventory, friends,
    matchmaking, reporting, and platform-specific functionality
  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: Advertising
    description: Advertising APIs
  - name: Analytics
    description: Analytics APIs
  - name: Authentication
    description: Authentication APIs
  - name: Character Data
    description: Character Data APIs
  - name: Characters
    description: Characters APIs
  - name: Content
    description: Content Service APIs
  - name: Friend List Management
    description: Friend List Management APIs
  - name: Matchmaking
    description: Matchmaking APIs
  - name: Platform Specific Methods
    description: Platform Specific Methods 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: 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: Trading
    description: Trading Management APIs
paths:
  /Client/StartPurchase:
    post:
      tags:
        - Player Item Management
      summary: Start Purchase
      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 an
        order for a list of items from the title catalog


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | ProductDisabledForTitle | 1609 |

        | StoreNotFound | 1221 |
      operationId: StartPurchase
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartPurchaseRequest'
        description: >-
          This is the first step in the purchasing process. For security
          purposes, once the order (or "cart") has been created, additional
          inventory objects may no longer be added. In addition, inventory
          objects will be locked to the current prices, regardless of any
          subsequent changes at the catalog level which may occur during the
          next two steps.
      responses:
        '200':
          $ref: '#/components/responses/StartPurchaseResult'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - SessionTicket: []
components:
  schemas:
    StartPurchaseRequest:
      description: >-
        This is the first step in the purchasing process. For security purposes,
        once the order (or "cart") has been created, additional inventory
        objects may no longer be added. In addition, inventory objects will be
        locked to the current prices, regardless of any subsequent changes at
        the catalog level which may occur during the next two steps.
      type: object
      properties:
        CatalogVersion:
          description: >-
            Catalog version for the items to be purchased. Defaults to most
            recent catalog.
          type: string
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        Items:
          description: Array of items to purchase.
          type: array
          items:
            $ref: '#/components/schemas/ItemPurchaseRequest'
          x-isclass: true
        StoreId:
          description: >-
            Store through which to purchase items. If not set, prices will be
            pulled from the catalog itself.
          type: string
      required:
        - Items
      example:
        CatalogVersion: '0'
        StoreId: BonusStore
        Items:
          - ItemId: something
            Quantity: 1
            Annotation: totally buying something
    ItemPurchaseRequest:
      type: object
      properties:
        Annotation:
          description: Title-specific text concerning this purchase.
          type: string
        ItemId:
          description: Unique ItemId of the item to purchase.
          type: string
        Quantity:
          description: How many of this item to purchase. Min 1, maximum 25.
          type: number
          x-actualtype: uint32
        UpgradeFromItems:
          description: >-
            Items to be upgraded as a result of this purchase (upgraded items
            are hidden, as they are "replaced" by the new items).
          type: array
          items:
            type: string
      required:
        - ItemId
        - Quantity
      example:
        ItemId: something
        Quantity: 1
        Annotation: totally buying something
    StartPurchaseResult:
      type: object
      properties:
        Contents:
          description: Cart items to be purchased.
          type: array
          items:
            $ref: '#/components/schemas/CartItem'
          x-isclass: true
        OrderId:
          description: Purchase order identifier.
          type: string
        PaymentOptions:
          description: Available methods by which the user can pay.
          type: array
          items:
            $ref: '#/components/schemas/PaymentOption'
          x-isclass: true
        VirtualCurrencyBalances:
          description: Current virtual currency totals for the user.
          type: object
          x-actualtype: int32
      example:
        OrderId: '8853591446005860822'
        Contents:
          - ItemId: shield_level_5
            ItemClass: shields
            DisplayName: Level 5 Shield
            VirtualCurrencyPrices:
              RM: 199
              GV: 25
        PaymentOptions:
          - Currency: RM
            ProviderName: Steam
            Price: 199
          - Currency: RM
            ProviderName: Amazon
            Price: 199
          - Currency: RM
            ProviderName: Paypal
            Price: 199
          - Currency: GV
            ProviderName: TitleA90A
            Price: 25
        VirtualCurrencyBalances:
          GV: 25
    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
    CartItem:
      type: object
      properties:
        Description:
          description: Description of the catalog item.
          type: string
        DisplayName:
          description: Display name for the catalog item.
          type: string
        ItemClass:
          description: Class name to which catalog item belongs.
          type: string
        ItemId:
          description: Unique identifier for the catalog item.
          type: string
        ItemInstanceId:
          description: Unique instance identifier for this catalog item.
          type: string
        RealCurrencyPrices:
          description: Cost of the catalog item for each applicable real world currency.
          type: object
          x-actualtype: uint32
        VCAmount:
          description: >-
            Amount of each applicable virtual currency which will be received as
            a result of purchasing this catalog item.
          type: object
          x-actualtype: uint32
        VirtualCurrencyPrices:
          description: Cost of the catalog item for each applicable virtual currency.
          type: object
          x-actualtype: uint32
    PaymentOption:
      type: object
      properties:
        Currency:
          description: Specific currency to use to fund the purchase.
          type: string
        Price:
          description: Amount of the specified currency needed for the purchase.
          type: number
          x-actualtype: uint32
        ProviderName:
          description: Name of the purchase provider for this option.
          type: string
        StoreCredit:
          description: Amount of existing credit the user has with the provider.
          type: number
          x-actualtype: uint32
      required:
        - Price
        - StoreCredit
  responses:
    StartPurchaseResult:
      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/StartPurchaseResult'
            example:
              code: 200
              status: OK
              data:
                OrderId: '8853591446005860822'
                Contents:
                  - ItemId: shield_level_5
                    ItemClass: shields
                    DisplayName: Level 5 Shield
                    VirtualCurrencyPrices:
                      RM: 199
                      GV: 25
                PaymentOptions:
                  - Currency: RM
                    ProviderName: Steam
                    Price: 199
                  - Currency: RM
                    ProviderName: Amazon
                    Price: 199
                  - Currency: RM
                    ProviderName: Paypal
                    Price: 199
                  - Currency: GV
                    ProviderName: TitleA90A
                    Price: 25
                VirtualCurrencyBalances:
                  GV: 25
    ApiErrorWrapper:
      description: This is the outer wrapper for all responses with errors
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorWrapper'
  securitySchemes:
    SessionTicket:
      type: apiKey
      in: header
      name: X-Authorization
      description: >-
        This API requires a client session ticket, available from any Client
        Login function.

````

## Related topics

- [Start Purchase](/api-reference/player-item-management/start-purchase.md)
- [Pay For Purchase](/api-reference/player-item-management/pay-for-purchase.md)
- [Confirm Purchase](/api-reference/player-item-management/confirm-purchase.md)
- [Stores and sales in Economy (Legacy)](/services/playfab/economy-monetization/economy/tutorials/stores-and-sales.md)
- [player_started_purchase](/services/playfab/api-references/events/Player/player-started-purchase.md)
