---
title: "Transfer Google Play purchase"
method: POST
path: "/google-play/purchases/transfers"
---

# Transfer Google Play purchase

`POST /google-play/purchases/transfers`

Use this endpoint to transfer an existing **active** subscription from one user to another. This allows re-assigning access to a subscription.  <br><br> **Scope:** Only `productType=subscription` is supported. One-time product transfers are not supported and return `400`. <br><br>The transfer process is asynchronous. Upon successful registration, the API will return a `202` `Accepted` status with a unique `synchronizationId` in the response body. <br><br> You can then use the following methods to check the status of the transfer process:  <br><br> - **Polling:** Use the [`/purchases/synchronizations/{synchronizationId}`](https://developers.cleeng.com/reference/check-google-play-purchase-synchronization-status) endpoint to periodically retrieve the status. This endpoint provides a concise response with the essential status information. <br><br> - **Webhooks:** Subscribe to the [`inappPurchaseSyncResult`](https://developers.cleeng.com/docs/webhooks-in-app-purchase-topics#inapppurchasesyncresult) webhook to receive real-time updates on the status. The webhook payload (`WebhookSynchronizationStatus`) includes detailed information about the transfer, including the `synchronizationId`, purchase details (`purchaseToken`, `packageName`, `cleengCustomerId`), `accessGranted`, `offerId`, and `result`. <br><br> You can choose to use either the polling mechanism, the webhook, or both, depending on your needs.<br><br>**Note:** Only active purchases can be transferred. <br><br> **Transfer-only semantics:** This operation performs ownership transfer only - it does NOT run a synchronization with Google Play. The processor finalizes the synchronization record with `PURCHASE_OWNERSHIP_TRANSFERRED` (or `PURCHASE_OWNERSHIP_UNCHANGED` when the ownership is already aligned), and emits an `inappPurchaseSyncResult` event. <br><br>Please note that **this endpoint can be authorized with a publisher (X-Publisher-Token) or JWT (Bearer) token**. Depending on how you integrate with Cleeng (directly or through middleware), use either a <<glossary:JWT>> or X-Publisher-Token header authorization. <br> <br> <span style="color:green">**Please use JWT (Bearer) token to try out the endpoint in the API console in this documentation**.</span>

## Headers

- `Authorization` string
- `X-Publisher-Token` string
- `Correlation-Id` string
- `X-App-Version` string
- `X-Device-Id` string
- `X-Device-Type` string
- `X-User-Action` string

## Request body

- object
  - `targetCustomerId` integer, required — Cleeng's unique identifier for the customer who will become the new owner of the purchase after the transfer.
  - `purchaseToken` string, required — Google Play's unique purchase token for the purchase to be transferred. This token is used to identify the purchase in Cleeng's system.
  - `productType` string, required — The type of Google Play product being transferred. Only `subscription` is supported; one-time product transfers are not supported (`400` is returned for any other value).
  - `packageName` string, required — Android application package name (e.g., `com.example.app`). Used to identify the correct configuration profile for this publisher.
  - `ipAddress` string — IP address of the customer who requested the transfer. This information will be stored in the user's profile as the IP address of their latest activity. Accepted: IPv4 <br><br> The parameter is required in backend intergrations (with middleware) to ensure the correct customer IP address (address of their latest activity) is stored.

## Response `202`

202

## Other responses

- `400` — 400
- `409` — 409
- `422` — 422
- `500` — 500

---

[API](https://skmtc.net/cleeng/apis/mediastore-api.md) · [All operations](https://skmtc.net/cleeng/apis/mediastore-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/cleeng/mediastore-api/versions/00cbfe7998a4/schema)
