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#

  1. Find the current owner: open the customer in the dashboard or call GET /v1/subscribers/{app_user_id} for the suspected owner.
  2. Ask the customer to sign in with the account that bought; entitlements appear without a restore.
  3. Pick the right transfer_behavior: transfer, transfer_if_no_active, keep or share.
  4. 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.

Source#

Checked: 2026-10-03

Edit this page on GitHub ↗ View as Markdown Last updated