diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index 794da9d8f96a9a8797a83302d9fab4880bc3a0bc..b4b8a26e1baebd4d9cfb1051b81d822d970d4de0 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -53,6 +53,7 @@ Example response:
     "web_url": "https://gitlab.example.com/user1",
     "billable_members_count": 1,
     "plan": "default",
+    "end_date": null,
     "trial_ends_on": null,
     "trial": false,
     "root_repository_size": 100,
@@ -70,6 +71,7 @@ Example response:
     "members_count_with_descendants": 2,
     "billable_members_count": 2,
     "plan": "default",
+    "end_date": null,
     "trial_ends_on": null,
     "trial": false,
     "root_repository_size": 100,
@@ -87,6 +89,7 @@ Example response:
     "members_count_with_descendants": 5,
     "billable_members_count": 5,
     "plan": "default",
+    "end_date": null,
     "trial_ends_on": null,
     "trial": false,
     "root_repository_size": 100,
@@ -168,6 +171,7 @@ Example response:
   "max_seats_used": 0,
   "seats_in_use": 0,
   "plan": "default",
+  "end_date": null,
   "trial_ends_on": null,
   "trial": false,
   "root_repository_size": 100,
@@ -198,6 +202,7 @@ Example response:
   "max_seats_used": 0,
   "seats_in_use": 0,
   "plan": "default",
+  "end_date": null,
   "trial_ends_on": null,
   "trial": false,
   "root_repository_size": 100
diff --git a/ee/lib/ee/api/entities/namespace.rb b/ee/lib/ee/api/entities/namespace.rb
index 962ac780d5a81d61ee16898a2216b0097ea8677e..eb72b366a389fb7920266e5a02a5aa36388a347c 100644
--- a/ee/lib/ee/api/entities/namespace.rb
+++ b/ee/lib/ee/api/entities/namespace.rb
@@ -27,6 +27,9 @@ module Namespace
           expose :max_seats_used_changed_at, documentation: { type: 'date', example: '2022-06-18' }, if: has_gitlab_subscription do |namespace, _|
             namespace.gitlab_subscription.max_seats_used_changed_at
           end
+          expose :end_date, documentation: { type: 'date', example: '2022-06-18' }, if: has_gitlab_subscription do |namespace, _|
+            namespace.gitlab_subscription.end_date
+          end
           expose :plan, documentation: { type: 'string', example: 'default' }, if: can_admin_namespace do |namespace, _|
             namespace.actual_plan_name
           end
diff --git a/ee/spec/requests/api/namespaces_spec.rb b/ee/spec/requests/api/namespaces_spec.rb
index 59447df91758326f609899f3b33b157a51df63a5..b72f3bc586ff5940ad3ab402d714541245043ddf 100644
--- a/ee/spec/requests/api/namespaces_spec.rb
+++ b/ee/spec/requests/api/namespaces_spec.rb
@@ -127,7 +127,8 @@
       before do
         group1.add_guest(user)
 
-        create(:gitlab_subscription, namespace: group1, max_seats_used: 1, max_seats_used_changed_at: 1.week.ago, seats_in_use: 1)
+        create(:gitlab_subscription, namespace: group1, max_seats_used: 1,
+               max_seats_used_changed_at: 1.week.ago, seats_in_use: 1, end_date: Date.current + 2.days)
       end
 
       # We seem to have some N+1 queries.
@@ -167,6 +168,12 @@
 
         expect(json_response.first['seats_in_use']).to eq(1)
       end
+
+      it 'includes end_date' do
+        get api("/namespaces", user)
+
+        expect(Date.parse(json_response.first['end_date'])).to eq(Date.current + 2.days)
+      end
     end
 
     context 'without gitlab subscription' do
@@ -193,6 +200,14 @@
           expect(resp.keys).not_to include('seats_in_use')
         end
       end
+
+      it 'does not include end_date' do
+        get api("/namespaces", user)
+
+        json_response.each do |resp|
+          expect(resp.keys).not_to include('end_date')
+        end
+      end
     end
   end