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

# Execute Transfer Operations

> Transfer a list of inventory items. A maximum list of 50 operations can be performed by a single request. When the response code is 202, one or more operations did not complete within the timeframe of the request. You can identify the pending operations by looking for OperationStatus = 'InProgress'. You can check on the operation status at anytime within 1 day of the request by passing the TransactionToken to the GetInventoryOperationStatus API.

Allowed entity token types: title, master_player_account, title_player_account

## Error codes

This operation may return the following PlayFab errors:

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




## OpenAPI

````yaml /services/playfab/api-references/rest/economy/economy.openapi.json post /Inventory/ExecuteTransferOperations
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/ExecuteTransferOperations:
    post:
      tags:
        - Inventory
      summary: Execute Transfer Operations
      description: >
        Transfer a list of inventory items. A maximum list of 50 operations can
        be performed by a single request. When the response code is 202, one or
        more operations did not complete within the timeframe of the request.
        You can identify the pending operations by looking for OperationStatus =
        'InProgress'. You can check on the operation status at anytime within 1
        day of the request by passing the TransactionToken to the
        GetInventoryOperationStatus API.


        Allowed entity token types: title, master_player_account,
        title_player_account


        ## Error codes


        This operation may return the following PlayFab errors:


        | Error | Code |

        | --- | --- |

        | DatabaseThroughputExceeded | 1113 |

        | InsufficientFunds | 1059 |

        | ItemNotFound | 1047 |

        | PreconditionFailed | 1610 |
      operationId: ExecuteTransferOperations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExecuteTransferOperationsRequest'
        description: >-
          Transfer the specified list of inventory items of an entity's
          container Id to another entity's container Id.
      responses:
        '200':
          $ref: '#/components/responses/ExecuteTransferOperationsResponse'
        '400':
          $ref: '#/components/responses/ApiErrorWrapper'
      security:
        - EntityToken: []
components:
  schemas:
    ExecuteTransferOperationsRequest:
      description: >-
        Transfer the specified list of inventory items of an entity's container
        Id to another entity's container Id.
      type: object
      properties:
        CustomTags:
          description: >-
            The optional custom tags associated with the request (e.g. build
            number, external trace identifiers, etc.).
          type: object
        GivingCollectionId:
          description: >-
            The inventory collection id the request is transferring from.
            (Default="default")
          type: string
        GivingEntity:
          allOf:
            - $ref: '#/components/schemas/EntityKey'
          description: >-
            The entity the request is transferring from. Set to the caller by
            default.
        GivingETag:
          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 the request.
          type: string
        Operations:
          description: >-
            The transfer operations to run transactionally. The operations will
            be executed in-order sequentially and will succeed or fail as a
            batch. Up to 50 operations can be added.
          type: array
          items:
            $ref: '#/components/schemas/TransferInventoryItemsOperation'
          x-isclass: true
        ReceivingCollectionId:
          description: >-
            The inventory collection id the request is transferring to.
            (Default="default")
          type: string
        ReceivingEntity:
          allOf:
            - $ref: '#/components/schemas/EntityKey'
          description: >-
            The entity the request is transferring to. Set to the caller by
            default.
      example:
        Operations:
          - GivingItem:
              Id: 11111111-1111-1111-1111-111111111111
              StackId: default
            ReceivingItem:
              Id: 11111111-1111-1111-1111-111111111111
              StackId: default
            Amount: 1
        GivingEntity:
          Id: someId1
          Type: title_player_account
          TypeString: title_player_account
        ReceivingEntity:
          Id: someId2
          Type: title_player_account
          TypeString: title_player_account
        GivingCollectionId: default
        ReceivingCollectionId: backpack
    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
    TransferInventoryItemsOperation:
      type: object
      properties:
        Amount:
          description: The amount to transfer.
          type: number
          x-actualtype: int32
        DeleteEmptyStacks:
          description: >-
            Indicates whether stacks reduced to an amount of 0 during the
            operation should be deleted from the inventory. (Default = false)
          type: boolean
        GivingItem:
          allOf:
            - $ref: '#/components/schemas/InventoryItemReference'
          description: The inventory item the operation is transferring from.
        NewStackValues:
          allOf:
            - $ref: '#/components/schemas/InitialValues'
          description: The values to apply to a stack newly created by this operation.
        ReceivingItem:
          allOf:
            - $ref: '#/components/schemas/InventoryItemReference'
          description: The inventory item the operation is transferring to.
      required:
        - DeleteEmptyStacks
    ExecuteTransferOperationsResponse:
      type: object
      properties:
        GivingETag:
          description: >-
            ETags are used for concurrency checking when updating resources
            (before transferring from). This value will be empty if the
            operation has not completed yet. More information about using ETags
            can be found here:
            https://learn.microsoft.com/en-us/gaming/playfab/features/economy-v2/catalog/etags
          type: string
        GivingTransactionIds:
          description: >-
            The ids of transactions that occurred as a result of the request's
            giving action.
          type: array
          items:
            type: string
        IdempotencyId:
          description: The Idempotency ID for this request.
          type: string
        OperationStatus:
          description: >-
            The transfer operation status. Possible values are 'InProgress' or
            'Completed'. If the operation has completed, the response code will
            be 200. Otherwise, it will be 202.
          type: string
        OperationToken:
          description: >-
            The token that can be used to get the status of the transfer
            operation. This will only have a value if OperationStatus is
            'InProgress'.
          type: string
        ReceivingETag:
          description: >-
            ETags are used for concurrency checking when updating resources
            (before transferring to). This value will be empty if the operation
            has not completed yet.
          type: string
        ReceivingTransactionIds:
          description: >-
            The ids of transactions that occurred as a result of the request's
            receiving action.
          type: array
          items:
            type: string
    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
    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
    AlternateId:
      type: object
      properties:
        Type:
          description: Type of the alternate ID.
          type: string
        Value:
          description: Value of the alternate ID.
          type: string
  responses:
    ExecuteTransferOperationsResponse:
      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/ExecuteTransferOperationsResponse'
    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

- [Execute Transfer Operations](/services/playfab/api-references/rest/economy/inventory/execute-transfer-operations.md)
- [PFInventoryExecuteTransferOperationsRequest](/services/playfab/api-references/c/pfinventorytypes/structs/pfinventoryexecutetransferoperationsrequest.md)
- [PFInventoryExecuteTransferOperationsResponse](/services/playfab/api-references/c/pfinventorytypes/structs/pfinventoryexecutetransferoperationsresponse.md)
- [PFInventoryExecuteTransferOperationsAsync](/services/playfab/api-references/c/pfinventory/functions/pfinventoryexecutetransferoperationsasync.md)
- [PFInventoryExecuteTransferOperationsGetResult](/services/playfab/api-references/c/pfinventory/functions/pfinventoryexecutetransferoperationsgetresult.md)
