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

# Pay For 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._ Selects a payment option for purchase order created via StartPurchase

## Error codes

This operation may return the following PlayFab errors:

| Error | Code |
| --- | --- |
| DuplicatePurchaseTransactionId | 1489 |
| FailedByPaymentProvider | 1015 |
| InsufficientFunds | 1059 |
| InvalidPaymentProvider | 1063 |
| InvalidPurchaseTransactionStatus | 1081 |
| ProductDisabledForTitle | 1609 |
| PurchaseDoesNotExist | 1080 |
| PurchaseInitializationFailure | 1064 |




## OpenAPI

````yaml post /Client/PayForPurchase
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/PayForPurchase:
    post:
      tags:
        - Player Item Management
      summary: Pay For 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._ Selects a
        payment option for purchase order created via StartPurchase


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | DuplicatePurchaseTransactionId | 1489 |

        | FailedByPaymentProvider | 1015 |

        | InsufficientFunds | 1059 |

        | InvalidPaymentProvider | 1063 |

        | InvalidPurchaseTransactionStatus | 1081 |

        | ProductDisabledForTitle | 1609 |

        | PurchaseDoesNotExist | 1080 |

        | PurchaseInitializationFailure | 1064 |
      operationId: PayForPurchase
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayForPurchaseRequest'
        description: >-
          This is the second step in the purchasing process, initiating the
          purchase transaction with the payment provider (if applicable). For
          payment provider scenarios, the title should next present the user
          with the payment provider'sinterface for payment. Once the player has
          completed the payment with the provider, the title should call
          ConfirmPurchase tofinalize the process and add the appropriate items
          to the player inventory.
      responses:
        '200':
          $ref: '#/components/responses/PayForPurchaseResult'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - SessionTicket: []
components:
  schemas:
    PayForPurchaseRequest:
      description: >-
        This is the second step in the purchasing process, initiating the
        purchase transaction with the payment provider (if applicable). For
        payment provider scenarios, the title should next present the user with
        the payment provider'sinterface for payment. Once the player has
        completed the payment with the provider, the title should call
        ConfirmPurchase tofinalize the process and add the appropriate items to
        the player inventory.
      type: object
      properties:
        Currency:
          description: Currency to use to fund the purchase.
          type: string
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        OrderId:
          description: Purchase order identifier returned from StartPurchase.
          type: string
        ProviderName:
          description: Payment provider to use to fund the purchase.
          type: string
        ProviderTransactionId:
          description: >-
            Payment provider transaction identifier. Required for Facebook
            Payments.
          type: string
      required:
        - OrderId
        - ProviderName
        - Currency
      example:
        OrderId: '8853591446005860822'
        ProviderName: PayPal
        Currency: RM
    PayForPurchaseResult:
      description: >-
        For web-based payment providers, this operation returns the URL to which
        the user should be directed inorder to approve the purchase. Items added
        to the user inventory as a result of this operation will be marked as
        unconfirmed.
      type: object
      properties:
        CreditApplied:
          description: Local credit applied to the transaction (provider specific).
          type: number
          x-actualtype: uint32
        OrderId:
          description: Purchase order identifier.
          type: string
        ProviderData:
          description: Provider used for the transaction.
          type: string
        ProviderToken:
          description: >-
            A token generated by the provider to authenticate the request
            (provider-specific).
          type: string
        PurchaseConfirmationPageURL:
          description: URL to the purchase provider page that details the purchase.
          type: string
        PurchaseCurrency:
          description: >-
            Currency for the transaction, may be a virtual currency or real
            money.
          type: string
        PurchasePrice:
          description: Cost of the transaction.
          type: number
          x-actualtype: uint32
        Status:
          allOf:
            - $ref: '#/components/schemas/TransactionStatus'
          description: Status of the transaction.
        VCAmount:
          description: Virtual currencies granted by the transaction, if any.
          type: object
          x-actualtype: int32
        VirtualCurrency:
          description: Current virtual currency balances for the user.
          type: object
          x-actualtype: int32
      required:
        - PurchasePrice
        - CreditApplied
      example:
        OrderId: '8853591446005860822'
        Status: Init
        PurchaseCurrency: RM
        PurchasePrice: 199
    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
    TransactionStatus:
      type: string
      enum:
        - CreateCart
        - Init
        - Approved
        - Succeeded
        - FailedByProvider
        - DisputePending
        - RefundPending
        - Refunded
        - RefundFailed
        - ChargedBack
        - FailedByUber
        - FailedByPlayFab
        - Revoked
        - TradePending
        - Traded
        - Upgraded
        - StackPending
        - Stacked
        - Other
        - Failed
  responses:
    PayForPurchaseResult:
      description: >-
        For web-based payment providers, this operation returns the URL to which
        the user should be directed inorder to approve the purchase. Items added
        to the user inventory as a result of this operation will be marked as
        unconfirmed.
      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/PayForPurchaseResult'
            example:
              code: 200
              status: OK
              data:
                OrderId: '8853591446005860822'
                Status: Init
                PurchaseCurrency: RM
                PurchasePrice: 199
    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

- [Pay For Purchase](/api-reference/player-item-management/pay-for-purchase.md)
- [Stores and sales in Economy (Legacy)](/services/playfab/economy-monetization/economy/tutorials/stores-and-sales.md)
- [Using Player inventory](/services/playfab/player-progression/player-data/player-inventory.md)
- [PaymentType](/services/playfab/api-references/events/data-types/paymenttype.md)
- [PlayFab Economy documentation](/services/playfab/economy-monetization/economy/index.md)
