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

# Validate IOS Receipt

> _NOTE: This is a Legacy Economy API, and is in bugfix-only mode. All new Economy features are being developed only for version 2._ Validates with the Apple store that the receipt for an iOS in-app purchase is valid and that it matches the purchased catalog item

## Error codes

This operation may return the following PlayFab errors:

| Error | Code |
| --- | --- |
| InvalidBundleID | 1098 |
| InvalidCurrencyCode | 1179 |
| InvalidEnvironmentForReceipt | 1300 |
| InvalidProductForSubscription | 1338 |
| InvalidReceipt | 1021 |
| InvalidVirtualCurrency | 1051 |
| NoMatchingCatalogItemForReceipt | 1178 |
| ProductDisabledForTitle | 1609 |
| ReceiptAlreadyUsed | 1022 |
| ReceiptContainsMultipleInAppItems | 1097 |
| ReceiptDoesNotContainInAppItems | 1096 |
| SubscriptionAlreadyTaken | 1340 |




## OpenAPI

````yaml /services/playfab/api-references/rest/client/client.openapi.json post /Client/ValidateIOSReceipt
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/ValidateIOSReceipt:
    post:
      tags:
        - Platform Specific Methods
      summary: Validate IOS Receipt
      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._ Validates with
        the Apple store that the receipt for an iOS in-app purchase is valid and
        that it matches the purchased catalog item


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | InvalidBundleID | 1098 |

        | InvalidCurrencyCode | 1179 |

        | InvalidEnvironmentForReceipt | 1300 |

        | InvalidProductForSubscription | 1338 |

        | InvalidReceipt | 1021 |

        | InvalidVirtualCurrency | 1051 |

        | NoMatchingCatalogItemForReceipt | 1178 |

        | ProductDisabledForTitle | 1609 |

        | ReceiptAlreadyUsed | 1022 |

        | ReceiptContainsMultipleInAppItems | 1097 |

        | ReceiptDoesNotContainInAppItems | 1096 |

        | SubscriptionAlreadyTaken | 1340 |
      operationId: ValidateIOSReceipt
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateIOSReceiptRequest'
        description: >-
          The CurrencyCode and PurchasePrice must match the price which was set
          up for the item in the Apple store. In addition, The ItemId of the
          inventory in the PlayFab Catalog must match the Product ID as it was
          set up in the Apple store. This enables the PlayFab service to
          securely validate that the purchase is for the correct item, in order
          to prevent uses from passing valid receipts as being for more
          expensive items (passing a receipt for a 99-cent purchase as being for
          a $19.99 purchase, for example).
      responses:
        '200':
          $ref: '#/components/responses/ValidateIOSReceiptResult'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - SessionTicket: []
components:
  schemas:
    ValidateIOSReceiptRequest:
      description: >-
        The CurrencyCode and PurchasePrice must match the price which was set up
        for the item in the Apple store. In addition, The ItemId of the
        inventory in the PlayFab Catalog must match the Product ID as it was set
        up in the Apple store. This enables the PlayFab service to securely
        validate that the purchase is for the correct item, in order to prevent
        uses from passing valid receipts as being for more expensive items
        (passing a receipt for a 99-cent purchase as being for a $19.99
        purchase, for example).
      type: object
      properties:
        CatalogVersion:
          description: >-
            Catalog version of the fulfilled items. If null, defaults to the
            primary catalog.
          type: string
        CurrencyCode:
          description: Currency used to pay for the purchase (ISO 4217 currency code).
          type: string
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        JwsReceiptData:
          description: >-
            Base64 encoded receipt data, passed back by the App Store as a
            result of a successful purchase.
          type: string
        PurchasePrice:
          description: Amount of the stated currency paid, in centesimal units.
          type: number
          x-actualtype: int32
        ReceiptData:
          description: >-
            Base64 encoded receipt data, passed back by the App Store as a
            result of a successful purchase.
          type: string
      required:
        - PurchasePrice
      example:
        ReceiptData: >-
          MTExMTExMTExMTENCjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg0KMzMzMzMzMzMzMzMzMzMzMzMNCjQ0NDQ0NDQ0NDQ0NDQNCjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NQ0KNjY2NjY2NjY2NjY2Ng0KNzc3Nzc3Nzc3Nzc3NzcNCjg4DQo5OTk5OTk5OTk5OTkNCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjINCjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw0KNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0DQo1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1DQo2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Ng0KNzc3Nzc3Nzc3NzcNCjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4DQo5DQpBcHBsZSBJbmMuIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IChub3QgcmVhbGx5IC0gZmFrZSBQbGF5RmFiIGV4YW1wbGUsIGJ1dCBjb25ncmF0cyBvbiB0aGlua2luZyB0byBkZWNvZGUgdGhpcyEpDQowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQoxMTExMTExMTExMQ0KMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDQozMzMzMzMzMzMzMzMzMzMzMw0KNDQ0NDQ0NDQ0NDQ0NA0KNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1DQo2NjY2NjY2NjY2NjY2DQo3Nzc3Nzc3Nzc3Nzc3Nw0KODgNCjk5OTk5OTk5OTk5OQ0KMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQoxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg0KMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzDQo0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQNCjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUNCjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2DQo3Nzc3Nzc3Nzc3Nw0KODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgNCjkNCkFwcGxlIEluYy4gV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKG5vdCByZWFsbHkgLSBmYWtlIFBsYXlGYWIgZXhhbXBsZSwgYnV0IGNvbmdyYXRzIG9uIHRoaW5raW5nIHRvIGRlY29kZSB0aGlzISkNCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCjExMTExMTExMTExDQoyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjINCjMzMzMzMzMzMzMzMzMzMzMzDQo0NDQ0NDQ0NDQ0NDQ0DQo1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUNCjY2NjY2NjY2NjY2NjYNCjc3Nzc3Nzc3Nzc3Nzc3DQo4OA0KOTk5OTk5OTk5OTk5DQowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQoyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyDQozMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMNCjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NA0KNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NQ0KNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYNCjc3Nzc3Nzc3Nzc3DQo4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OA0KOQ0KQXBwbGUgSW5jLiBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9ucyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAobm90IHJlYWxseSAtIGZha2UgUGxheUZhYiBleGFtcGxlLCBidXQgY29uZ3JhdHMgb24gdGhpbmtpbmcgdG8gZGVjb2RlIHRoaXMhKQ0KMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KMTExMTExMTExMTENCjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg0KMzMzMzMzMzMzMzMzMzMzMzMNCjQ0NDQ0NDQ0NDQ0NDQNCjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NQ0KNjY2NjY2NjY2NjY2Ng0KNzc3Nzc3Nzc3Nzc3NzcNCjg4DQo5OTk5OTk5OTk5OTkNCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjINCjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw0KNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0DQo1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1DQo2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Ng0KNzc3Nzc3Nzc3NzcNCjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4DQo5DQpBcHBsZSBJbmMuIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IChub3QgcmVhbGx5IC0gZmFrZSBQbGF5RmFiIGV4YW1wbGUsIGJ1dCBjb25ncmF0cyBvbiB0aGlua2luZyB0byBkZWNvZGUgdGhpcyEpDQowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
        CurrencyCode: GBP
        PurchasePrice: 199
    ValidateIOSReceiptResult:
      description: >-
        Once verified, the catalog item matching the iTunes item name will be
        added to the user's inventory. This result should be used for immediate
        updates to the local client game state as opposed to the
        GetUserInventory API which can have an up to half second delay.
      type: object
      properties:
        Fulfillments:
          description: >-
            Fulfilled inventory items and recorded purchases in fulfillment of
            the validated receipt transactions.
          type: array
          items:
            $ref: '#/components/schemas/PurchaseReceiptFulfillment'
          x-isclass: true
      example:
        Fulfillments:
          - RecordedTransactionCurrency: GBP
            RecordedTransactionTotal: 199
            FulfilledItems:
              - ItemId: shield_level_5
                ItemInstanceId: A1437F80BE99D3E8
                ItemClass: shields
                PurchaseDate: '2019-03-07T00:00:00'
                Expiration: '2020-10-01T00:00:00'
                RemainingUses: 10
                CatalogVersion: '5'
    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
    PurchaseReceiptFulfillment:
      type: object
      properties:
        FulfilledItems:
          description: Items granted to the player in fulfillment of the validated receipt.
          type: array
          items:
            $ref: '#/components/schemas/ItemInstance'
          x-isclass: true
        RecordedPriceSource:
          description: >-
            Source of the payment price information for the recorded purchase
            transaction. A value of 'Request' indicates that the price specified
            in the request was used, whereas a value of 'Catalog' indicates that
            the real-money price of the catalog item matching the product ID in
            the validated receipt transaction and the currency specified in the
            request (defaulting to USD) was used.
          type: string
        RecordedTransactionCurrency:
          description: Currency used to purchase the items (ISO 4217 currency code).
          type: string
        RecordedTransactionTotal:
          description: >-
            Amount of the stated currency paid for the items, in centesimal
            units
          type: number
          x-actualtype: uint32
    ItemInstance:
      description: >-
        A unique instance of an item in a user's inventory. Note, to retrieve
        additional information for an item such as Tags, Description that are
        the same across all instances of the item, a call to GetCatalogItems is
        required. The ItemID of can be matched to a catalog entry, which
        contains the additional information. Also note that Custom Data is only
        set when the User's specific instance has updated the CustomData via a
        call to UpdateUserInventoryItemCustomData. Other fields such as
        UnitPrice and UnitCurrency are only set when the item was granted via a
        purchase.
      type: object
      properties:
        Annotation:
          description: >-
            Game specific comment associated with this instance when it was
            added to the user inventory.
          type: string
        BundleContents:
          description: >-
            Array of unique items that were awarded when this catalog item was
            purchased.
          type: array
          items:
            type: string
        BundleParent:
          description: >-
            Unique identifier for the parent inventory item, as defined in the
            catalog, for object which were added from a bundle or container.
          type: string
        CatalogVersion:
          description: >-
            Catalog version for the inventory item, when this instance was
            created.
          type: string
        CustomData:
          description: >-
            A set of custom key-value pairs on the instance of the inventory
            item, which is not to be confused with the catalog item's custom
            data.
          type: object
        DisplayName:
          description: CatalogItem.DisplayName at the time this item was purchased.
          type: string
        Expiration:
          description: Timestamp for when this instance will expire.
          type: string
        ItemClass:
          description: Class name for the inventory item, as defined in the catalog.
          type: string
        ItemId:
          description: Unique identifier for the inventory item, as defined in the catalog.
          type: string
        ItemInstanceId:
          description: Unique item identifier for this specific instance of the item.
          type: string
        PurchaseDate:
          description: Timestamp for when this instance was purchased.
          type: string
        RemainingUses:
          description: Total number of remaining uses, if this is a consumable item.
          type: number
          x-actualtype: int32
        UnitCurrency:
          description: >-
            Currency type for the cost of the catalog item. Not available when
            granting items.
          type: string
        UnitPrice:
          description: >-
            Cost of the catalog item in the given currency. Not available when
            granting items.
          type: number
          x-actualtype: uint32
        UsesIncrementedBy:
          description: >-
            The number of uses that were added or removed to this item in this
            call.
          type: number
          x-actualtype: int32
      required:
        - UnitPrice
      example:
        ItemId: shield_level_5
        ItemInstanceId: '133713371337'
        ItemClass: shields
        PurchaseDate: '2017-03-07T00:00:00'
        Expiration: '2018-10-01T00:00:00'
        RemainingUses: 10
        Annotation: No Annotation
        CatalogVersion: '5'
        BundleParent: crate block 1
      x-sortKey: ItemInstanceId
  responses:
    ValidateIOSReceiptResult:
      description: >-
        Once verified, the catalog item matching the iTunes item name will be
        added to the user's inventory. This result should be used for immediate
        updates to the local client game state as opposed to the
        GetUserInventory API which can have an up to half second delay.
      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/ValidateIOSReceiptResult'
            example:
              code: 200
              status: OK
              data:
                Fulfillments:
                  - RecordedTransactionCurrency: GBP
                    RecordedTransactionTotal: 199
                    FulfilledItems:
                      - ItemId: shield_level_5
                        ItemInstanceId: A1437F80BE99D3E8
                        ItemClass: shields
                        PurchaseDate: '2019-03-07T00:00:00'
                        Expiration: '2020-10-01T00:00:00'
                        RemainingUses: 10
                        CatalogVersion: '5'
    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

- [Validate IOS Receipt](/services/playfab/api-references/rest/client/platform-specific-methods/validate-ios-receipt.md)
- [Validate Windows Store Receipt](/services/playfab/api-references/rest/client/platform-specific-methods/validate-windows-store-receipt.md)
- [Validate Amazon IAP Receipt](/services/playfab/api-references/rest/client/platform-specific-methods/validate-amazon-iap-receipt.md)
- [Restore IOS Purchases](/services/playfab/api-references/rest/client/platform-specific-methods/restore-ios-purchases.md)
- [Validate Google Play Purchase](/services/playfab/api-references/rest/client/platform-specific-methods/validate-google-play-purchase.md)
