diff --git a/lib/src/resources/subscription.dart b/lib/src/resources/subscription.dart
index 76c6a73..4678a3f 100644
--- a/lib/src/resources/subscription.dart
+++ b/lib/src/resources/subscription.dart
@@ -9,10 +9,12 @@ import '../client.dart';
 import '_resource.dart';
 
 class SubscriptionResource extends Resource<Subscription> {
+  static const _resourceName = 'subscriptions';
+
   SubscriptionResource(Client client) : super(client);
 
   Future<Subscription> retrieve(String id) async {
-    final response = await get('subscriptions/$id');
+    final response = await get('$_resourceName/$id');
     return Subscription.fromJson(response);
   }
 
@@ -22,7 +24,7 @@ class SubscriptionResource extends Resource<Subscription> {
   }) async {
     final expandableFields = _expandableFields(expand);
     final response = await get(
-      'subscriptions/$id',
+      '$_resourceName/$id',
       queryParameters: {
         'expand': expandableFields.map((e) => e.field).toList(),
       },
@@ -58,17 +60,55 @@ class SubscriptionResource extends Resource<Subscription> {
 
   Future<DataList<Subscription>> list(
       [ListSubscriptionsRequest? request]) async {
-    final map = await get('subscriptions', queryParameters: request?.toJson());
+    final map = await get(_resourceName, queryParameters: request?.toJson());
     return DataList<Subscription>.fromJson(
         map, (value) => Subscription.fromJson(value as Map<String, dynamic>));
   }
 
+  Future<DataList<SubscriptionExpanded>> listExpanded({
+    required Set<SubscriptionExpandableField> expand,
+    ListSubscriptionsRequest? request,
+  }) async {
+    final expandableFields = _expandableFields(expand);
+
+    final response = await get(
+      _resourceName,
+      queryParameters: {
+        ...?request?.toJson(),
+        'expand': expandableFields.map((e) => 'data.${e.field}').toList(),
+      },
+    );
+
+    return DataList<SubscriptionExpanded>.fromJson(
+      response,
+      (value) => _parseSubscriptionExpanded(
+        value as Map<String, dynamic>,
+        expand,
+      ),
+    );
+  }
+
+  SubscriptionExpanded _parseSubscriptionExpanded(
+    Map<String, dynamic> json,
+    Set<SubscriptionExpandableField> expand,
+  ) {
+    List<Discount>? discounts;
+    if (expand.contains(SubscriptionExpandableField.discounts)) {
+      discounts = _DiscountsExpandableField().extract(json);
+    }
+
+    return SubscriptionExpanded(
+      subscription: Subscription.fromJson(json),
+      discounts: discounts,
+    );
+  }
+
   Future<DataList<Subscription>> search({
     /// https://docs.stripe.com/search#query-fields-for-subscriptions
     required String queryString,
   }) async {
     final Map<String, dynamic> map = await get(
-      'subscriptions/search',
+      '$_resourceName/search',
       queryParameters: {'query': queryString},
     );
 
@@ -87,7 +127,7 @@ class SubscriptionResource extends Resource<Subscription> {
     required SubscriptionUpdate update,
   }) async {
     final response = await post(
-      'subscriptions/$id',
+      '$_resourceName/$id',
       data: update.toJson(),
     );
 
@@ -101,7 +141,7 @@ class SubscriptionResource extends Resource<Subscription> {
     bool? prorate,
   }) async {
     final response = await delete(
-      'subscriptions/$id',
+      '$_resourceName/$id',
       data: {
         if (invoiceNow != null) 'invoice_now': invoiceNow,
         if (prorate != null) 'prorate': invoiceNow,