<!--
{
  "availability" : [
    "iOS: 3.0.0 - 18.0.0",
    "iPadOS: 3.0.0 - 18.0.0",
    "macCatalyst: 13.1.0 - 18.0.0",
    "macOS: 10.7.0 - 15.0.0",
    "tvOS: 9.0.0 - 18.0.0",
    "visionOS: 1.0.0 - 2.0.0",
    "watchOS: 6.2.0 - 11.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "StoreKit",
  "identifier" : "/documentation/StoreKit/SKPaymentQueue/restoreCompletedTransactions()",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "StoreKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SKPaymentQueue(im)restoreCompletedTransactions"
  },
  "title" : "restoreCompletedTransactions()"
}
-->

# restoreCompletedTransactions()

Asks the payment queue to restore previously completed purchases.

```
func restoreCompletedTransactions()
```

## Discussion

Use this method to restore finished transactions—that is, transactions for which you have already called [`finishTransaction(_:)`](/documentation/StoreKit/SKPaymentQueue/finishTransaction(_:)). You call this method in one of the following situations:

- To install purchases on additional devices
- To restore purchases for an application that the user deleted and reinstalled

When you create a new product to be sold in your store, you choose whether that product can be restored or not. See the [In-App Purchase Programming Guide](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html#//apple_ref/doc/uid/TP40008267) for more information.

The payment queue delivers a new transaction for each previously completed transaction that can be restored. Each transaction includes a copy of the original transaction.

After the transactions are delivered, the payment queue calls the observer’s [`paymentQueueRestoreCompletedTransactionsFinished(_:)`](/documentation/StoreKit/SKPaymentTransactionObserver/paymentQueueRestoreCompletedTransactionsFinished(_:)) method. If an error occurred while restoring transactions, the observer will be notified through its [`paymentQueue(_:restoreCompletedTransactionsFailedWithError:)`](/documentation/StoreKit/SKPaymentTransactionObserver/paymentQueue(_:restoreCompletedTransactionsFailedWithError:)) method.

This method has no effect in the following situations:

- All transactions are unfinished.
- The user did not purchase anything that is restorable.
- You tried to restore items that are not restorable, such as a non-renewing subscription or a consumable product.
- Your app’s build version does not meet the guidelines for the `CFBundleVersion` key.

> Important:
> If you are using the <doc://com.apple.storekit/documentation/StoreKit/in-app-purchase> API and managing transactions using the ``doc://com.apple.storekit/documentation/StoreKit/Transaction`` API, use ``doc://com.apple.storekit/documentation/StoreKit/Transaction/currentEntitlements`` to determine which in-app purchases the customer is currently entitled to. The ``doc://com.apple.storekit/documentation/StoreKit/SKPaymentQueue/restoreCompletedTransactions()`` function doesn’t affect transactions in the ``doc://com.apple.storekit/documentation/StoreKit/Transaction`` API. In rare cases when a user suspects the app isn’t showing all the transactions, call ``doc://com.apple.storekit/documentation/StoreKit/AppStore/sync()`` in response to an explicit user action, like tapping a button.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)