# NonSubscriptionTransaction

Represents a non-subscription transaction (consumables and non-consumables).

> **Info**

Introduced in 4.10.0. The `store` property was added in 4.11.0.



Purpose [#purpose]

Provides details about one-time purchases in [`CustomerInfo`](/docs/ios/sdk-reference/customerInfo), including which store fulfilled the purchase.

Properties [#properties]

<TypeTable
  type="{
  transactionId: {
    type: &#x22;String&#x22;,
    description: &#x22;Unique identifier for the transaction.&#x22;,
    required: true,
  },
  productId: {
    type: &#x22;String&#x22;,
    description: &#x22;Product identifier for the purchase.&#x22;,
    required: true,
  },
  purchaseDate: {
    type: &#x22;Date&#x22;,
    description: &#x22;When the charge occurred.&#x22;,
    required: true,
  },
  isConsumable: {
    type: &#x22;Bool&#x22;,
    description: &#x22;`true` for consumables, `false` for non-consumables.&#x22;,
    required: true,
  },
  isRevoked: {
    type: &#x22;Bool&#x22;,
    description: &#x22;`true` if the transaction has been revoked.&#x22;,
    required: true,
  },
  store: {
    type: &#x22;ProductStore&#x22;,
    description: &#x22;Store that fulfilled the purchase (4.11.0+).&#x22;,
    required: true,
  },
}"
/>

Store values [#store-values]

`appStore`, `stripe`, `paddle`, `playStore`, `superwall`, `custom`, `other`.

Usage [#usage]

Inspect non-subscription purchases:

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

for purchase in customerInfo.nonSubscriptions {
  print("Product: \(purchase.productId)")
  print("Store: \(purchase.store)")
  print("Consumable: \(purchase.isConsumable)")
  print("Revoked: \(purchase.isRevoked)")
}
```

Related [#related]

* [`CustomerInfo`](/docs/ios/sdk-reference/customerInfo) - Source of transaction data
* [`SubscriptionTransaction`](/docs/ios/sdk-reference/SubscriptionTransaction) - Subscription transactions
* [`getCustomerInfo()`](/docs/ios/sdk-reference/getCustomerInfo) - Fetch customer info asynchronously