---
title: Original API for In-App Purchase
framework: StoreKit
role: collectionGroup
role_heading: API Collection
platforms: []
path: storekit/in-app_purchase/original_api_for_in-app_purchase
---

# Original API for In-App Purchase

Offer additional content and services in your app using the Original In-App Purchase API.

## Overview

The In-App Purchase APIs, including the original API and the Swift-based [In-App Purchase](../in-app-purchase.md) API, allow you to offer customers the opportunity to purchase in-app content and features. Customers can make the purchases within your app, and find your promoted products on the App Store.

The StoreKit framework connects to the App Store on your app’s behalf to prompt for, and securely process, payments. The framework then notifies your app, which delivers the purchased products. To validate purchases, you can verify receipts on your server with the App Store or on the device. For auto-renewable subscriptions, the App Store can also notify your server of key subscription events.

![]()

For more information about In-App Purchases, including configuration, testing, marketing, and more, see `In-App Purchase`.

### Configure In-App Purchases in App Store Connect

To use the In-App Purchase API, you need to configure the products in App Store Connect. As you develop your app, you can add or remove products and refine or reconfigure existing products. For more information, see `Configure In-App Purchase settings`.

You can also offer apps and In-App Purchases that run on multiple platforms as a single purchase. For more information about universal purchase, see `App Store Connect Help`.

### Understand product types

There are four In-App Purchase types you can offer:

- *Consumables* are a type that are depleted after one use. Customers can purchase them multiple times.
- *Non-consumables* are a type that customers purchase once. They don’t expire. Non-consumable In-App Purchases can offer Family Sharing.
- *Auto-renewable subscriptions* to services or content are a type that customers purchase once and that renew automatically on a recurring basis until customers decide to cancel. Auto-renewable subscriptions can offer Family Sharing.
- *Non-renewing subscriptions* to services or content provide access over a limited duration and don’t renew automatically. Customers need to purchase a new subscription after it concludes if they want to retain access.

You can sync and restore non-consumables and auto-renewable subscriptions across devices using StoreKit. When a customer purchases an auto-renewable or non-renewing subscription, your app is responsible for making it available across all the person’s devices, and for restoring past purchases.

## Topics

### Essentials

- [Setting up the transaction observer for the payment queue](../setting-up-the-transaction-observer-for-the-payment-queue.md)
- [Offering, completing, and restoring in-app purchases](../offering-completing-and-restoring-in-app-purchases.md)
- [SKPaymentQueue](../skpaymentqueue.md)
- [SKPaymentTransactionObserver](../skpaymenttransactionobserver.md)
- [SKPaymentQueueDelegate](../skpaymentqueuedelegate.md)
- [SKRequest](../skrequest.md)

### Product information

- [Loading in-app product identifiers](../loading-in-app-product-identifiers.md)
- [Fetching product information from the App Store](../fetching-product-information-from-the-app-store.md)
- [SKProductsRequest](../skproductsrequest.md)
- [SKProductsResponse](../skproductsresponse.md)
- [SKProduct](../skproduct.md)

### Storefronts

- [SKStorefront](../skstorefront.md)

### Purchases

- [Requesting a payment from the App Store](../requesting-a-payment-from-the-app-store.md)
- [Processing a transaction](../processing-a-transaction.md)
- [SKPayment](../skpayment.md)
- [SKMutablePayment](../skmutablepayment.md)
- [SKPaymentTransaction](../skpaymenttransaction.md)

### Purchase validation

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

### Content delivery

- [Unlocking purchased content](../unlocking-purchased-content.md)
- [Persisting a purchase](../persisting-a-purchase.md)
- [Finishing a transaction](../finishing-a-transaction.md)
- [SKDownload](../skdownload.md)

### Refunds

- [Handling refund notifications](../handling-refund-notifications.md)
- [Testing refund requests](../testing-refund-requests.md)

### Providing access to previously purchased products

- [Restoring purchased products](../restoring-purchased-products.md)
- [SKReceiptRefreshRequest](../skreceiptrefreshrequest.md)
- [SKRequest](../skrequest.md)
- [SKPaymentTransaction](../skpaymenttransaction.md)
- [SKTerminateForInvalidReceipt()](../skterminateforinvalidreceipt().md)

### Family Sharing

- [Supporting Family Sharing in your app](../supporting-family-sharing-in-your-app.md)
- [isFamilyShareable](../skproduct/isfamilyshareable.md)
- [paymentQueue(_:didRevokeEntitlementsForProductIdentifiers:)](../skpaymenttransactionobserver/paymentqueue(_:didrevokeentitlementsforproductidentifiers:).md)

### Subscriptions

- [Subscriptions and offers](../subscriptions-and-offers.md)

### Promotions

- [Promoting In-App Purchases](../promoting-in-app-purchases.md)
- [Testing promoted In-App Purchases](../testing-promoted-in-app-purchases.md)
- [SKProductStorePromotionController](../skproductstorepromotioncontroller.md)

### Testing In-App Purchases

- [Testing at all stages of development with Xcode and the sandbox](../testing-at-all-stages-of-development-with-xcode-and-the-sandbox.md)
- [Setting up StoreKit Testing in Xcode](../../xcode/setting-up-storekit-testing-in-xcode.md)
- [Testing In-App Purchases in Xcode](../testing-in-app-purchases-in-xcode.md)
- [Testing In-App Purchases with sandbox](../testing-in-app-purchases-with-sandbox.md)

### Errors

- [Handling errors](../handling-errors.md)
- [SKError.Code](../skerror/code.md)
- [SKError](../skerror.md)
- [SKErrorDomain](../skerrordomain.md)

## See Also

### Deprecated

- [Choosing a StoreKit API for In-App Purchases](../choosing-a-storekit-api-for-in-app-purchases.md)
