# setSubscriptionStatus()

Manually sets the user's subscription status when using a custom PurchaseController.

> **Warning**

This method should only be used with a custom [`PurchaseController`](/docs/flutter/sdk-reference/PurchaseController). The default purchase controller manages subscription status automatically.



Purpose [#purpose]

Manually updates the user's subscription status when implementing custom purchase logic.

Signature [#signature]

```dart
Future<void> setSubscriptionStatus(SubscriptionStatus status)
```

Parameters [#parameters]

<TypeTable
  type="{
  status: {
    type: &#x22;SubscriptionStatus&#x22;,
    description: &#x22;The subscription status to set (active, inactive, unknown).&#x22;,
    required: true,
  },
}"
/>

Returns / State [#returns--state]

Returns a `Future<void>` that completes when the subscription status is updated.

Usage [#usage]

After custom purchase:

```dart
class MyPurchaseController extends PurchaseController {
  @override
  Future<PurchaseResult> purchaseFromAppStore(String productId) async {
    try {
      // Custom purchase logic
      final result = await MyPaymentService.purchase(productId);
      
      if (result.success) {
        // Update subscription status after successful purchase
        await Superwall.shared.setSubscriptionStatus(
          SubscriptionStatus.active,
        );
        return PurchaseResult.purchased;
      }
      
      return PurchaseResult.failed;
    } catch (e) {
      return PurchaseResult.failed;
    }
  }
}
```

Subscription expiry handling:

```dart
Future<void> _checkSubscriptionExpiry() async {
  final expiryDate = await MyPaymentService.getSubscriptionExpiry();
  
  if (expiryDate.isBefore(DateTime.now())) {
    // Subscription has expired
    await Superwall.shared.setSubscriptionStatus(
      SubscriptionStatus.inactive,
    );
    
    // Show renewal prompt
    _showRenewalPrompt();
  }
}
```

Manual status sync:

```dart
Future<void> _syncSubscriptionStatus() async {
  try {
    final serverStatus = await MyAPI.getUserSubscriptionStatus();
    
    final superwallStatus = serverStatus.isActive
        ? SubscriptionStatus.active
        : SubscriptionStatus.inactive;
    
    await Superwall.shared.setSubscriptionStatus(superwallStatus);
    
  } catch (e) {
    print('Failed to sync subscription status: $e');
  }
}
```