diff --git a/app/graphql/mutations/ci/ci_cd_settings_update.rb b/app/graphql/mutations/ci/ci_cd_settings_update.rb
deleted file mode 100644
index a7d99d2a496801f8189ed46dcd9f2d2e337e608c..0000000000000000000000000000000000000000
--- a/app/graphql/mutations/ci/ci_cd_settings_update.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-module Mutations
-  module Ci
-    # TODO: Remove after 16.0, see https://gitlab.com/gitlab-org/gitlab/-/issues/361801#note_1373963840
-    class CiCdSettingsUpdate < ProjectCiCdSettingsUpdate
-      graphql_name 'CiCdSettingsUpdate'
-
-      def ready?(**args)
-        raise Gitlab::Graphql::Errors::ResourceNotAvailable, '`remove_cicd_settings_update` feature flag is enabled.' \
-          if Feature.enabled?(:remove_cicd_settings_update)
-
-        super
-      end
-    end
-  end
-end
diff --git a/app/graphql/types/mutation_type.rb b/app/graphql/types/mutation_type.rb
index 4564c0b0c0dbf4bf83382215aed95cbeb945056c..efc7bf89693e2e67d313a572649b006880d47435 100644
--- a/app/graphql/types/mutation_type.rb
+++ b/app/graphql/types/mutation_type.rb
@@ -142,11 +142,6 @@ class MutationType < BaseObject
     mount_mutation Mutations::Ci::PipelineSchedule::Play
     mount_mutation Mutations::Ci::PipelineSchedule::Create
     mount_mutation Mutations::Ci::PipelineSchedule::Update
-    mount_mutation Mutations::Ci::CiCdSettingsUpdate, deprecated: {
-      reason: :renamed,
-      replacement: 'ProjectCiCdSettingsUpdate',
-      milestone: '15.0'
-    }
     mount_mutation Mutations::Ci::ProjectCiCdSettingsUpdate
     mount_mutation Mutations::Ci::Job::ArtifactsDestroy
     mount_mutation Mutations::Ci::Job::Play
diff --git a/config/feature_flags/development/remove_cicd_settings_update.yml b/config/feature_flags/development/remove_cicd_settings_update.yml
deleted file mode 100644
index d26355e60849d7e4a6b6d04f972bcb22d029f091..0000000000000000000000000000000000000000
--- a/config/feature_flags/development/remove_cicd_settings_update.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: remove_cicd_settings_update
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119061
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/409379
-milestone: '16.0'
-type: development
-group: group::runner
-default_enabled: false
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 23d914eee128801d7a05c257050569d70b8a6948..21563d79ec9b03be871e27919d0fb42e58b8f5ca 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -1491,35 +1491,6 @@ Input type: `CiAiGenerateConfigInput`
 | <a id="mutationciaigenerateconfigerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
 | <a id="mutationciaigenerateconfigusermessage"></a>`userMessage` | [`AiMessageType`](#aimessagetype) | User chat message. |
 
-### `Mutation.ciCdSettingsUpdate`
-
-WARNING:
-**Deprecated** in 15.0.
-This was renamed.
-Use: `ProjectCiCdSettingsUpdate`.
-
-Input type: `CiCdSettingsUpdateInput`
-
-#### Arguments
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| <a id="mutationcicdsettingsupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcicdsettingsupdatefullpath"></a>`fullPath` | [`ID!`](#id) | Full Path of the project the settings belong to. |
-| <a id="mutationcicdsettingsupdateinboundjobtokenscopeenabled"></a>`inboundJobTokenScopeEnabled` | [`Boolean`](#boolean) | Indicates CI/CD job tokens generated in other projects have restricted access to this project. |
-| <a id="mutationcicdsettingsupdatejobtokenscopeenabled"></a>`jobTokenScopeEnabled` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** Outbound job token scope is being removed. This field can now only be set to false. Deprecated in 16.0. |
-| <a id="mutationcicdsettingsupdatekeeplatestartifact"></a>`keepLatestArtifact` | [`Boolean`](#boolean) | Indicates if the latest artifact should be kept for the project. |
-| <a id="mutationcicdsettingsupdatemergepipelinesenabled"></a>`mergePipelinesEnabled` | [`Boolean`](#boolean) | Indicates if merge pipelines are enabled for the project. |
-| <a id="mutationcicdsettingsupdatemergetrainsenabled"></a>`mergeTrainsEnabled` | [`Boolean`](#boolean) | Indicates if merge trains are enabled for the project. |
-
-#### Fields
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| <a id="mutationcicdsettingsupdatecicdsettings"></a>`ciCdSettings` | [`ProjectCiCdSetting!`](#projectcicdsetting) | CI/CD settings after mutation. |
-| <a id="mutationcicdsettingsupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcicdsettingsupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-
 ### `Mutation.ciJobTokenScopeAddProject`
 
 Input type: `CiJobTokenScopeAddProjectInput`
diff --git a/spec/requests/api/graphql/mutations/ci/project_ci_cd_settings_update_spec.rb b/spec/requests/api/graphql/mutations/ci/project_ci_cd_settings_update_spec.rb
index aa00069b24135e7461bb4090282723e079670751..fd92ed198e7e4dc4b5d4dcda2efb0644c5158d1f 100644
--- a/spec/requests/api/graphql/mutations/ci/project_ci_cd_settings_update_spec.rb
+++ b/spec/requests/api/graphql/mutations/ci/project_ci_cd_settings_update_spec.rb
@@ -64,35 +64,6 @@
       expect(project.keep_latest_artifact).to eq(false)
     end
 
-    describe 'ci_cd_settings_update deprecated mutation' do
-      let(:mutation) { graphql_mutation(:ci_cd_settings_update, variables) }
-
-      it 'returns error' do
-        post_graphql_mutation(mutation, current_user: user)
-
-        expect(graphql_errors).to(
-          include(
-            hash_including('message' => '`remove_cicd_settings_update` feature flag is enabled.')
-          )
-        )
-      end
-
-      context 'when remove_cicd_settings_update FF is disabled' do
-        before do
-          stub_feature_flags(remove_cicd_settings_update: false)
-        end
-
-        it 'updates ci cd settings' do
-          post_graphql_mutation(mutation, current_user: user)
-
-          project.reload
-
-          expect(response).to have_gitlab_http_status(:success)
-          expect(project.keep_latest_artifact).to eq(false)
-        end
-      end
-    end
-
     it 'allows setting job_token_scope_enabled to false' do
       post_graphql_mutation(mutation, current_user: user)