# Stripe One-Time Purchases

Use Stripe one-time prices for lifetime access or consumable purchases in web checkout.

Superwall supports Stripe one-time prices in web checkout. Use them when a customer should pay once instead of starting a recurring subscription, such as:

* Lifetime access to a paid tier.
* Credit packs, tokens, or other consumable quantities.
* One-off digital goods or upgrades.

Stripe one-time purchases use the same web checkout flow as subscriptions. The difference is the Stripe price type and how you attach entitlements in Superwall.

> **Note**

Stripe calls these **one-time** prices in the API and **one-off** prices in parts of the dashboard.



Create the price in Stripe [#create-the-price-in-stripe]

Create or open the product in Stripe, then add a price with **One-off** selected instead of **Recurring**. Superwall reads the Stripe price type when you import the product.

<img src="__img0" />

After the Stripe price exists, import it from [Creating Products](/docs/web-checkout/web-checkout-adding-a-stripe-product). In Superwall, one-time prices appear with a period of &#x2A;*None (Lifetime / Consumable)**.

<img src="__img1" />

Choose the access behavior [#choose-the-access-behavior]

Superwall uses entitlements to decide whether a one-time product unlocks ongoing access or behaves like a consumable purchase.

| Purchase type       | Entitlement setup                                 | Result                                                                                                                   |
| ------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Lifetime access     | Attach the entitlement the product should unlock. | The user gets active, non-expiring access to that entitlement after purchase.                                            |
| Consumable purchase | Leave the product without an entitlement.         | The purchase is recorded in `CustomerInfo.nonSubscriptions`, but it does not make the user's subscription status active. |

For example, a "Premium Lifetime" product should usually be linked to your `pro` entitlement. A "100 Credits" product usually should not be linked to an entitlement; instead, use the transaction record to credit the user's account in your own system.

> **Warning**

Do not attach an entitlement to a consumable unless buying that consumable should also unlock access permanently.



Checkout behavior [#checkout-behavior]

When a customer purchases a Stripe one-time price, Superwall creates a Stripe Checkout session in payment mode. This means:

* The customer pays once.
* No Stripe subscription is created.
* Trial fields are ignored for the one-time price.
* Revenue is tracked as a non-renewing purchase.
* The checkout session ID acts as the Stripe purchase identifier for that purchase.

The rest of the web checkout flow is unchanged. In Redeem mode, customers receive a redemption link and the SDK redeems the purchase in your app. In Redirect mode, Superwall redirects to your URL with purchase data.

Read purchase data in the SDK [#read-purchase-data-in-the-sdk]

Use `CustomerInfo.nonSubscriptions` to inspect one-time purchases. Each transaction includes the product identifier, purchase date, whether it is consumable, whether it has been revoked, and the store that fulfilled it.

For Stripe one-time purchases, the transaction's `store` value is `stripe`.

```swift
let customerInfo = Superwall.shared.customerInfo

for purchase in customerInfo.nonSubscriptions where purchase.store == .stripe {
  print("Product: \(purchase.productId)")
  print("Consumable: \(purchase.isConsumable)")
}
```

> **Note**

The redemption result still exposes Stripe purchase identifiers through the legacy `stripeSubscriptionIds` name. For one-time purchases, those identifiers can be Stripe Checkout session IDs instead of `sub_` subscription IDs.



Related [#related]

* [Creating Products](/docs/web-checkout/web-checkout-adding-a-stripe-product)
* [App2Web](/docs/web-checkout/web-checkout-direct-stripe-checkout)
* [Restoring & Managing Purchases](/docs/web-checkout/web-checkout-managing-memberships)
* [How do I retrieve Stripe customer data after web checkout?](/docs/support/web-checkout/how-to-retrieve-stripe-customer-data-after-web-checkout)