---
title: "What does receiptAlreadyInUseError (code 7) mean in the purchases SDK?"
description: "receiptAlreadyInUseError (code 7) means the purchase belongs to another app user and the project's transfer setting forbids moving it. Backend code 7102."
url: https://revenuedot.app/docs/errors/sdk-receipt-already-in-use-error
---

# 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](https://revenuedot.app/docs/help/restore-purchases.md) and [the server error codes](https://revenuedot.app/docs/api/errors.md). Deep dive: [revenuedot.app/errors/receipt-already-in-use-error](https://revenuedot.app/errors/receipt-already-in-use-error).

## Related

- [What does productAlreadyPurchasedError (code 6) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-product-already-purchased-error.md)
- [What does invalidReceiptError (code 8) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-invalid-receipt-error.md)
- [What does Play Billing ITEM_ALREADY_OWNED (7) mean?](https://revenuedot.app/docs/errors/play-billing-item-already-owned.md)
- [What RevenueDot's API errors mean (server codes)](https://revenuedot.app/docs/api/errors.md)

## Source

- [RevenueDot purchases-ios: ErrorCode.swift (the iOS ErrorCode enum)](https://github.com/revenuedot/purchases-ios/blob/revenuedot/main-patches/Sources/Generated/ErrorCode.swift)
- [RevenueDot purchases-android: PurchasesErrorCode.kt (the Android enum)](https://github.com/revenuedot/purchases-android/blob/revenuedot/main-patches/purchases/src/main/kotlin/generated/com/revenuecat/purchases/PurchasesErrorCode.kt)
- [RevenueDot purchases-ios: BackendErrorCode.swift (backend code mapping)](https://github.com/revenuedot/purchases-ios/blob/revenuedot/main-patches/Sources/Error%20Handling/BackendErrorCode.swift)
- [RevenueDot purchases-android: common/errors.kt (backend code mapping)](https://github.com/revenuedot/purchases-android/blob/revenuedot/main-patches/purchases/src/main/kotlin/com/revenuecat/purchases/common/errors.kt)

Checked: 2026-10-03
