# CustomerInfo

Contains the latest subscription and entitlement information about the customer.

Purpose [#purpose]

Represents the complete customer information including all subscription transactions, non-subscription transactions, entitlements, and user identification.

Signature [#signature]

```dart
class CustomerInfo {
  final List<SubscriptionTransaction> subscriptions;
  final List<NonSubscriptionTransaction> nonSubscriptions;
  final List<Entitlement> entitlements;
  final String userId;
}
```

Properties [#properties]

<TypeTable
  type="{
  subscriptions: {
    type: &#x22;List<SubscriptionTransaction>&#x22;,
    description: &#x22;All subscription transactions the user has made.&#x22;,
    required: true,
  },
  nonSubscriptions: {
    type: &#x22;List<NonSubscriptionTransaction>&#x22;,
    description: &#x22;All non-subscription transactions (consumables and non-consumables) the user has made.&#x22;,
    required: true,
  },
  entitlements: {
    type: &#x22;List<Entitlement>&#x22;,
    description: &#x22;All entitlements available to the user.&#x22;,
    required: true,
  },
  userId: {
    type: &#x22;String&#x22;,
    description: &#x22;The ID of the user.&#x22;,
    required: true,
  },
}"
/>

Usage [#usage]

Getting customer info:

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

// Access user ID
print('User ID: ${customerInfo.userId}');

// Check entitlements
final activeEntitlements = customerInfo.entitlements
    .where((e) => e.isActive)
    .toList();

// Access subscriptions
for (final subscription in customerInfo.subscriptions) {
  if (subscription.isActive) {
    print('Active subscription: ${subscription.productId}');
  }
}
```

Checking for specific entitlements:

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

final hasPremium = customerInfo.entitlements.any(
  (entitlement) => 
    entitlement.id == 'premium' && 
    entitlement.isActive,
);

if (hasPremium) {
  // User has premium access
  showPremiumContent();
}
```

Filtering active subscriptions:

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

final activeSubscriptions = customerInfo.subscriptions
    .where((sub) => sub.isActive && !sub.isRevoked)
    .toList();

print('User has ${activeSubscriptions.length} active subscriptions');
```

Related [#related]

* [`getCustomerInfo()`](/docs/flutter/sdk-reference/getCustomerInfo) - Method to retrieve customer info
* [`SubscriptionTransaction`](/docs/flutter/sdk-reference/SubscriptionTransaction) - Subscription transaction details
* [`NonSubscriptionTransaction`](/docs/flutter/sdk-reference/NonSubscriptionTransaction) - Non-subscription transaction details
* [`Entitlements`](/docs/flutter/sdk-reference/Entitlements) - Entitlement information