# NonSubscriptionTransaction

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

> **Info**

The `store` field was added in 2.4.7.



Purpose [#purpose]

Provides details about one-time purchases in [`CustomerInfo`](/docs/flutter/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;DateTime&#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 (2.4.7+).&#x22;,
  },
}"
/>

Store values (2.4.7+) [#store-values-247]

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

Usage [#usage]

Inspect non-subscription purchases:

```dart
final customerInfo = await Superwall.shared.getCustomerInfo();

for (final purchase in customerInfo.nonSubscriptions) {
  print('Product: ${purchase.productId}');
  print('Store: ${purchase.store}');
  print('Consumable: ${purchase.isConsumable}');
  print('Revoked: ${purchase.isRevoked}');
}
```

Related [#related]

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