Use this endpoint to transfer an existing active purchase from one user to another. This allows re-assigning access to a subscription or in-app purchase.
The transfer process is asynchronous. Upon successful registration, the API will return a 202 Accepted status with a unique synchronizationId in the response body.
Note: Only active purchases can be transferred.
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 JWT or X-Publisher-Token header authorization.
Please use JWT (Bearer) token to try out the endpoint in the API console in this documentation.
You can then use the following methods to check the status of the transfer process:
- Polling: Use the
/purchases/synchronizations/{synchronizationId}endpoint to periodically retrieve the status. This endpoint provides a concise response with the essential status information. - Webhooks: Subscribe to the
inappPurchaseSyncResultwebhook to receive real-time updates on the status. The webhook payload (WebhookSynchronizationStatus) includes detailed information about the transfer, including thesynchronizationId, transaction details (transactionId,cleengCustomerId,originalTransactionId),accessGranted,offerId, andresult.
You can choose to use either the polling mechanism, the webhook, or both, depending on your needs.
Errors
| HTTP Status Code | Error Code | Message |
|---|---|---|
| 400 | REQ0001 | Invalid body |
| 400 | REQ0004 | Invalid headers |
| 409 | SK2C0103 | The resource is temporarily locked due to a concurrent request. |
| 409 | SK2C0104 | The resource is temporarily locked due to a concurrent request. |
| 422 | SK2C0005 | The migration is in progress. |
| 422 | SK2C0100 | Unable to find customer |
| 500 | SK2C0004 | StoreKit2 integration not activated |
| 500 | SXXXX (X - number) | Internal Server Error |
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
