---
title: SKReceiptRefreshRequest
framework: storekit
role: symbol
role_heading: Class
path: storekit/skreceiptrefreshrequest
---

# SKReceiptRefreshRequest

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

## Declaration

```swift
class SKReceiptRefreshRequest
```

## Mentioned in

Choosing a receipt validation technique Restoring purchased products Validating receipts with the App Store

## Overview

Overview note: The receipt isn’t necessary if you use AppTransaction to validate the app download, or Transaction to validate in-app purchases. Only use the receipt if your app uses the Original API for In-App Purchase, or needs the receipt to validate the app download because it can’t use 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, appStoreReceiptURL. To request the receipt using the SKReceiptRefreshRequest object, you initialize it, attach a delegate, and then call the request’s 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 object in its requestDidFinish(_:) method. Locate the app receipt using the appStoreReceiptURL property. For information about validating the receipt, see Choosing a receipt validation technique. If the request fails and calls your delegate’s 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:). Use alternative techniques There are times when using 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() 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 appStoreReceiptURL.

## Topics

### Initializing Receipt Refresh Requests

- [init(receiptProperties:)](storekit/skreceiptrefreshrequest/init(receiptproperties:).md)

### Receipt Properties and Keys

- [receiptProperties](storekit/skreceiptrefreshrequest/receiptproperties.md)
- [SKReceiptPropertyIsExpired](storekit/skreceiptpropertyisexpired.md)
- [SKReceiptPropertyIsRevoked](storekit/skreceiptpropertyisrevoked.md)
- [SKReceiptPropertyIsVolumePurchase](storekit/skreceiptpropertyisvolumepurchase.md)

## Relationships

### Inherits From

- [SKRequest](storekit/skrequest.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Purchase validation

- [Choosing a receipt validation technique](storekit/choosing-a-receipt-validation-technique.md)
- [Validating receipts with the App Store](storekit/validating-receipts-with-the-app-store.md)
- [appStoreReceiptURL](foundation/bundle/appstorereceipturl.md)
