<!--
{
  "availability" : [
    "iOS: 7.0.0 - 18.0.0",
    "iPadOS: 7.0.0 - 18.0.0",
    "macCatalyst: 13.1.0 - 18.0.0",
    "macOS: 10.9.0 - 15.0.0",
    "tvOS: -",
    "visionOS: 1.0.0 - 2.0.0",
    "watchOS: 6.2.0 - 11.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "StoreKit",
  "identifier" : "/documentation/StoreKit/SKReceiptRefreshRequest",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "StoreKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SKReceiptRefreshRequest"
  },
  "title" : "SKReceiptRefreshRequest"
}
-->

# SKReceiptRefreshRequest

A request to the App Store to get the app receipt, which represents the customer’s transactions with your app.

```
class SKReceiptRefreshRequest
```

## Overview> Note:
> The receipt isn’t necessary if you use ``doc://com.apple.storekit/documentation/StoreKit/AppTransaction`` to validate the app download, or ``doc://com.apple.storekit/documentation/StoreKit/Transaction`` to validate in-app purchases. Only use the receipt if your app uses the <doc://com.apple.storekit/documentation/StoreKit/original-api-for-in-app-purchase>, or needs the receipt to validate the app download because it can’t use ``doc://com.apple.storekit/documentation/StoreKit/AppTransaction``.

Use this API to request a new app receipt from the App Store if the receipt is invalid or missing from its expected location, <doc://com.apple.documentation/documentation/Foundation/Bundle/appStoreReceiptURL>. To request the receipt using the [`SKReceiptRefreshRequest`](/documentation/StoreKit/SKReceiptRefreshRequest) object, you initialize it, attach a [`delegate`](/documentation/StoreKit/SKRequest/delegate), and then call the request’s [`start()`](/documentation/StoreKit/SKRequest/start()) method.

> Important:
> The receipt refresh request displays a system prompt that asks users to authenticate with their App Store credentials. For a better user experience, initiate the request after an explicit user action, like tapping or clicking a button.

When the request completes successfully, your delegate receives an [`SKReceiptRefreshRequest`](/documentation/StoreKit/SKReceiptRefreshRequest) object in its [`requestDidFinish(_:)`](/documentation/StoreKit/SKRequestDelegate/requestDidFinish(_:)) method. Locate the app receipt using the <doc://com.apple.documentation/documentation/Foundation/Bundle/appStoreReceiptURL> property. For information about validating the receipt, see [Choosing a receipt validation technique](/documentation/StoreKit/choosing-a-receipt-validation-technique).

If the request fails and calls your delegate’s [`request(_:didFailWithError:)`](/documentation/StoreKit/SKRequestDelegate/request(_:didFailWithError:)) method, your app needs to release the request and not attempt to call it a second time. Requests can fail when a user doesn’t authenticate or chooses to cancel the request. Without a validated receipt, assume the user doesn’t have access to premium content.

In the sandbox environment, you can initialize a receipt with any combination of properties for testing when you call [`init(receiptProperties:)`](/documentation/StoreKit/SKReceiptRefreshRequest/init(receiptProperties:)).

### Use alternative techniques

There are times when using [`SKReceiptRefreshRequest`](/documentation/StoreKit/SKReceiptRefreshRequest) isn’t necessary, so avoid doing so, such as in the following scenarios:

- If the receipt is valid, but may be missing transactions, use [`restoreCompletedTransactions()`](/documentation/StoreKit/SKPaymentQueue/restoreCompletedTransactions()) instead. For example, the receipt may be missing a transaction if a person purchases a new subscription on another device.
- In the sandbox environment, before the tester completes their first in-app purchase. Receipts are initially absent in the sandbox environment for iOS and iPadOS apps. For more information, see <doc://com.apple.documentation/documentation/Foundation/Bundle/appStoreReceiptURL>.

## Topics

### Initializing Receipt Refresh Requests

[`init(receiptProperties:)`](/documentation/StoreKit/SKReceiptRefreshRequest/init(receiptProperties:))

Creates a receipt refresh request with optional properties.

### Receipt Properties and Keys

[`receiptProperties`](/documentation/StoreKit/SKReceiptRefreshRequest/receiptProperties)

The properties of the receipt.

[`SKReceiptPropertyIsExpired`](/documentation/StoreKit/SKReceiptPropertyIsExpired)

A key with a value that indicates whether the receipt is in an expired state.

[`SKReceiptPropertyIsRevoked`](/documentation/StoreKit/SKReceiptPropertyIsRevoked)

A key with a value that indicates whether the receipt is in a revoked state.

[`SKReceiptPropertyIsVolumePurchase`](/documentation/StoreKit/SKReceiptPropertyIsVolumePurchase)

A key with a value that indicates whether the receipt is a Volume Purchase Plan receipt.



---

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)