Code
7
SDK error · code 7
What it means
receiptAlreadyInUseError (code 7) means the purchase already belongs to another app user, and your project's restore setting does not allow moving it. The server answered backend code 7102. Ask the customer to sign in with the account that bought, or change the project's transfer behavior to transfer if purchases should follow the person who restores.
Code
7
iOS (Swift)
ErrorCode.receipt
Android (Kotlin)
PurchasesErrorCode.Receipt
Causes
| Backend code | Meaning |
|---|---|
| 7102 | Cannot transfer purchase: another subscriber owns the receipt and the project's restore behavior does not allow a transfer. |
Fix
Open the customer in the dashboard, or call GET /v1/subscribers/{app_user_id} for the suspected owner, and check which app user ID holds the subscription.
Tell the customer which account bought the product and ask them to log in with it. Then entitlements appear without a restore.
Set the project's transfer_behavior: transfer moves purchases to whoever restores, transfer_if_no_active moves them only when the owner has no active subscription, keep always refuses, and share merges both users. See how to restore purchases.
Call logIn with your own stable user ID so a person's purchases stay on one customer across devices.
In your app
// Swift
do {
let result = try await Purchases.shared.purchase(package: package)
} catch let error as ErrorCode where error == .receiptAlreadyInUseError {
// handle receipt already in use
}
// Kotlin
if (error.code == PurchasesErrorCode.ReceiptAlreadyInUseError) { /* ... */ } On RevenueDot: On POST /v1/receipts, RevenueDot answers HTTP 400 with code 7102 when another known user owns the purchase and the project's transfer_behavior is keep, or transfer_if_no_active while the owner still has an active subscription. The default transfer moves the purchase and sends a TRANSFER webhook. An anonymous owner is always merged into the user who restores. Sandbox purchases can use sandbox_transfer_behavior instead.
FAQ
Backend code 7102 means the purchase cannot be transferred because another subscriber owns it. The SDK reports it as receiptAlreadyInUseError (code 7). The project's transfer behavior decides whether a restore can move the purchase.
Ask the customer to sign in with the account that bought, or change the project's transfer behavior to transfer so a restore moves the purchase to the current user. Then restore again.
No. The current SDKs raise receiptAlreadyInUseError (code 7) for backend code 7102. receiptInUseByOtherSubscriberError (code 13) exists in the enum but no mapping in the native SDKs sends the backend's answer there.
In React Native, compare error.code with PURCHASES_ERROR_CODE.RECEIPT_ALREADY_IN_USE_ERROR. In Flutter, convert the PlatformException with PurchasesErrorHelper.getErrorCode(e) and compare the result with PurchasesErrorCode.receiptAlreadyInUseError.
Get started
RevenueDot answers the same SDK calls with the same error codes. Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue.
Already have an account? Sign in · Prefer your own servers? Self-host free