What does receiptAlreadyInUseError (code 7) mean in the purchases SDK?
The purchases SDK raises receiptAlreadyInUseError (code 7) when the backend refuses to move a purchase that already belongs to another app user.
Quick facts#
| Error | ErrorCode.receiptAlreadyInUseError (iOS), PurchasesErrorCode.ReceiptAlreadyInUseError (Android), code 7 |
| Where | Purchases SDK (iOS, Android and the hybrid SDKs built on them) |
| What the vendor says | There is already another active subscriber using the same receipt. |
Cause#
- The backend answered 7102 (cannot transfer purchase), and both SDKs map it to this error.
- A customer restored or re-posted a store purchase while signed in as a different app user than the one who bought it.
- The project's restore behavior forbids moving the purchase. A shared device, or a new app user ID after logging out, leaves the old account as the owner.
Fix#
- Find the current owner: open the customer in the dashboard or call
GET /v1/subscribers/{app_user_id}for the suspected owner. - Ask the customer to sign in with the account that bought; entitlements appear without a restore.
- Pick the right
transfer_behavior:transfer,transfer_if_no_active,keeporshare. - Use one app user ID per person with
logIn, so purchases stay on one customer across devices.
Example#
Swift
// The purchases SDK throws `ErrorCode` values; match the one you handle and let the rest fall through.
func handle(_ error: Error) {
guard let code = error as? ErrorCode else {
print("Not a purchases SDK error: \(error)")
return
}
switch code {
case .receiptAlreadyInUseError:
// Same request, same answer: tell the customer which account bought, never whose account it is.
print("This purchase is linked to another account")
default:
print("Other purchases error: \(code.description)")
}
}Compile-checked: npm run check:snippets type-checks this snippet with swiftc together with the ErrorCode.swift file of the RevenueDot purchases-ios fork (checked 2026-10-03).
How the RevenueDot SDK reports it#
RevenueDot answers HTTP 400 with code 7102 when the project's transfer_behavior is keep, or transfer_if_no_active and the owner is still active. See how to restore purchases and the server error codes. Deep dive: revenuedot.app/errors/receipt-already-in-use-error.
Related#
- What does productAlreadyPurchasedError (code 6) mean in the purchases SDK?
- What does invalidReceiptError (code 8) mean in the purchases SDK?
- What does Play Billing ITEM_ALREADY_OWNED (7) mean?
- What RevenueDot's API errors mean (server codes)
Source#
- RevenueDot purchases-ios: ErrorCode.swift (the iOS ErrorCode enum)
- RevenueDot purchases-android: PurchasesErrorCode.kt (the Android enum)
- RevenueDot purchases-ios: BackendErrorCode.swift (backend code mapping)
- RevenueDot purchases-android: common/errors.kt (backend code mapping)
Checked: 2026-10-03