diff --git a/quic/core/crypto/transport_parameters.cc b/quic/core/crypto/transport_parameters.cc
index 6ca4b24..0d828db 100644
--- a/quic/core/crypto/transport_parameters.cc
+++ b/quic/core/crypto/transport_parameters.cc
@@ -54,7 +54,7 @@
 
   kInitialRoundTripTime = 0x3127,
   kGoogleConnectionOptions = 0x3128,
-  kGoogleUserAgentId = 0x3129,
+  // 0x3129 was used to convey the user agent string.
   // 0x312A was used only in T050 to indicate support for HANDSHAKE_DONE.
   // 0x312B was used to indicate that QUIC+TLS key updates were not supported.
   // 0x4751 was used for non-standard Google-specific parameters encoded as a
@@ -122,8 +122,6 @@
       return "initial_round_trip_time";
     case TransportParameters::kGoogleConnectionOptions:
       return "google_connection_options";
-    case TransportParameters::kGoogleUserAgentId:
-      return "user_agent_id";
     case TransportParameters::kGoogleQuicVersion:
       return "google-version";
     case TransportParameters::kMinAckDelay:
@@ -162,8 +160,6 @@
       return true;
     case TransportParameters::kVersionInformation:
       return GetQuicReloadableFlag(quic_version_information);
-    case TransportParameters::kGoogleUserAgentId:
-      return !GetQuicReloadableFlag(quic_ignore_user_agent_transport_parameter);
   }
   return false;
 }
@@ -443,10 +439,6 @@
       rv += QuicTagToString(connection_option);
     }
   }
-  if (user_agent_id.has_value()) {
-    rv += " " + TransportParameterIdToString(kGoogleUserAgentId) + " \"" +
-          user_agent_id.value() + "\"";
-  }
   for (const auto& kv : custom_parameters) {
     absl::StrAppend(&rv, " 0x", absl::Hex(static_cast<uint32_t>(kv.first)),
                     "=");
@@ -520,7 +512,6 @@
       max_datagram_frame_size(other.max_datagram_frame_size),
       initial_round_trip_time_us(other.initial_round_trip_time_us),
       google_connection_options(other.google_connection_options),
-      user_agent_id(other.user_agent_id),
       custom_parameters(other.custom_parameters) {
   if (other.preferred_address) {
     preferred_address = std::make_unique<TransportParameters::PreferredAddress>(
@@ -561,7 +552,6 @@
         initial_round_trip_time_us.value() ==
             rhs.initial_round_trip_time_us.value() &&
         google_connection_options == rhs.google_connection_options &&
-        user_agent_id == rhs.user_agent_id &&
         custom_parameters == rhs.custom_parameters)) {
     return false;
   }
@@ -636,10 +626,6 @@
     *error_details = "Server cannot send initial round trip time";
     return false;
   }
-  if (perspective == Perspective::IS_SERVER && user_agent_id.has_value()) {
-    *error_details = "Server cannot send user agent ID";
-    return false;
-  }
   if (version_information.has_value()) {
     const QuicVersionLabel& chosen_version =
         version_information.value().chosen_version;
@@ -748,7 +734,6 @@
       kIntegerParameterLength +           // max_datagram_frame_size
       kIntegerParameterLength +           // initial_round_trip_time_us
       kTypeAndValueLength +               // google_connection_options
-      kTypeAndValueLength +               // user_agent_id
       kTypeAndValueLength;                // google-version
 
   std::vector<TransportParameters::TransportParameterId> parameter_ids = {
@@ -773,7 +758,6 @@
       TransportParameters::kInitialSourceConnectionId,
       TransportParameters::kRetrySourceConnectionId,
       TransportParameters::kGoogleConnectionOptions,
-      TransportParameters::kGoogleUserAgentId,
       TransportParameters::kGoogleQuicVersion,
       TransportParameters::kVersionInformation,
   };
@@ -784,10 +768,6 @@
     max_transport_param_length +=
         in.google_connection_options.value().size() * sizeof(QuicTag);
   }
-  // user_agent_id.
-  if (in.user_agent_id.has_value()) {
-    max_transport_param_length += in.user_agent_id.value().length();
-  }
   // Google-specific version extension.
   if (in.legacy_version_information.has_value()) {
     max_transport_param_length +=
@@ -1112,18 +1092,6 @@
           }
         }
       } break;
-      // Google-specific user agent identifier.
-      case TransportParameters::kGoogleUserAgentId: {
-        if (in.user_agent_id.has_value()) {
-          if (!writer.WriteVarInt62(TransportParameters::kGoogleUserAgentId) ||
-              !writer.WriteStringPieceVarInt62(in.user_agent_id.value())) {
-            QUIC_BUG(Failed to write Google user agent ID)
-                << "Failed to write Google user agent ID \""
-                << in.user_agent_id.value() << "\" for " << in;
-            return false;
-          }
-        }
-      } break;
       // Google-specific version extension.
       case TransportParameters::kGoogleQuicVersion: {
         if (!in.legacy_version_information.has_value()) {
@@ -1446,29 +1414,6 @@
           out->google_connection_options.value().push_back(connection_option);
         }
       } break;
-      case TransportParameters::kGoogleUserAgentId:
-        if (GetQuicReloadableFlag(quic_ignore_user_agent_transport_parameter)) {
-          QUIC_RELOADABLE_FLAG_COUNT(
-              quic_ignore_user_agent_transport_parameter);
-          // This is a copy of the default switch statement below.
-          // TODO(dschinazi) remove this case entirely when deprecating the
-          // quic_ignore_user_agent_transport_parameter flag.
-          if (out->custom_parameters.find(param_id) !=
-              out->custom_parameters.end()) {
-            *error_details = "Received a second unknown parameter" +
-                             TransportParameterIdToString(param_id);
-            return false;
-          }
-          out->custom_parameters[param_id] =
-              std::string(value_reader.ReadRemainingPayload());
-          break;
-        }
-        if (out->user_agent_id.has_value()) {
-          *error_details = "Received a second user_agent_id";
-          return false;
-        }
-        out->user_agent_id = std::string(value_reader.ReadRemainingPayload());
-        break;
       case TransportParameters::kGoogleQuicVersion: {
         if (!out->legacy_version_information.has_value()) {
           out->legacy_version_information =
diff --git a/quic/core/crypto/transport_parameters.h b/quic/core/crypto/transport_parameters.h
index 74f05bb..1b6f516 100644
--- a/quic/core/crypto/transport_parameters.h
+++ b/quic/core/crypto/transport_parameters.h
@@ -260,9 +260,6 @@
   // Google-specific connection options.
   absl::optional<QuicTagVector> google_connection_options;
 
-  // Google-specific user agent identifier.
-  absl::optional<std::string> user_agent_id;
-
   // Validates whether transport parameters are valid according to
   // the specification. If the transport parameters are not valid, this method
   // will write a human-readable error message to |error_details|.
diff --git a/quic/core/crypto/transport_parameters_test.cc b/quic/core/crypto/transport_parameters_test.cc
index 111d43a..c9df18a 100644
--- a/quic/core/crypto/transport_parameters_test.cc
+++ b/quic/core/crypto/transport_parameters_test.cc
@@ -127,10 +127,6 @@
           MakeQuicTag('H', 'I', 'J', 0xff)};
 }
 
-std::string CreateFakeUserAgentId() {
-  return "FakeUAID";
-}
-
 void RemoveGreaseParameters(TransportParameters* params) {
   std::vector<TransportParameters::TransportParameterId> grease_params;
   for (const auto& kv : params->custom_parameters) {
@@ -290,7 +286,6 @@
   orig_params.retry_source_connection_id = CreateFakeRetrySourceConnectionId();
   orig_params.initial_round_trip_time_us.set_value(kFakeInitialRoundTripTime);
   orig_params.google_connection_options = CreateFakeGoogleConnectionOptions();
-  orig_params.user_agent_id = CreateFakeUserAgentId();
   orig_params.custom_parameters[kCustomParameter1] = kCustomParameter1Value;
   orig_params.custom_parameters[kCustomParameter2] = kCustomParameter2Value;
 
@@ -327,9 +322,6 @@
       CreateFakeInitialSourceConnectionId();
   orig_params.initial_round_trip_time_us.set_value(kFakeInitialRoundTripTime);
   orig_params.google_connection_options = CreateFakeGoogleConnectionOptions();
-  if (!GetQuicReloadableFlag(quic_ignore_user_agent_transport_parameter)) {
-    orig_params.user_agent_id = CreateFakeUserAgentId();
-  }
   orig_params.custom_parameters[kCustomParameter1] = kCustomParameter1Value;
   orig_params.custom_parameters[kCustomParameter2] = kCustomParameter2Value;
 
@@ -573,10 +565,6 @@
       'A', 'L', 'P', 'N',  // value
       'E', 'F', 'G', 0x00,
       'H', 'I', 'J', 0xff,
-      // user_agent_id
-      0x71, 0x29,  // parameter id
-      0x08,  // length
-      'F', 'a', 'k', 'e', 'U', 'A', 'I', 'D',  // value
       // Google version extension
       0x80, 0x00, 0x47, 0x52,  // parameter id
       0x04,  // length
@@ -641,12 +629,6 @@
   ASSERT_TRUE(new_params.google_connection_options.has_value());
   EXPECT_EQ(CreateFakeGoogleConnectionOptions(),
             new_params.google_connection_options.value());
-  if (!GetQuicReloadableFlag(quic_ignore_user_agent_transport_parameter)) {
-    ASSERT_TRUE(new_params.user_agent_id.has_value());
-    EXPECT_EQ(CreateFakeUserAgentId(), new_params.user_agent_id.value());
-  } else {
-    EXPECT_FALSE(new_params.user_agent_id.has_value());
-  }
 }
 
 TEST_P(TransportParametersTest,
@@ -919,7 +901,6 @@
   ASSERT_TRUE(new_params.google_connection_options.has_value());
   EXPECT_EQ(CreateFakeGoogleConnectionOptions(),
             new_params.google_connection_options.value());
-  EXPECT_FALSE(new_params.user_agent_id.has_value());
 }
 
 TEST_P(TransportParametersTest, ParseServerParametersRepeated) {
@@ -1037,7 +1018,6 @@
       CreateFakeInitialSourceConnectionId();
   orig_params.initial_round_trip_time_us.set_value(kFakeInitialRoundTripTime);
   orig_params.google_connection_options = CreateFakeGoogleConnectionOptions();
-  orig_params.user_agent_id = CreateFakeUserAgentId();
   orig_params.custom_parameters[kCustomParameter1] = kCustomParameter1Value;
   orig_params.custom_parameters[kCustomParameter2] = kCustomParameter2Value;
 
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index cf84969..cad9cac 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -552,12 +552,6 @@
           EXPECT_EQ(0u, server_stats.packets_lost);
         }
         EXPECT_EQ(0u, server_stats.packets_discarded);
-        if (!GetQuicReloadableFlag(
-                quic_ignore_user_agent_transport_parameter)) {
-          EXPECT_EQ(
-              server_session->user_agent_id().value_or("MissingUserAgent"),
-              kTestUserAgentId);
-        }
       } else {
         ADD_FAILURE() << "Missing server connection";
       }
@@ -5902,10 +5896,6 @@
   QuicConfig* server_config = nullptr;
   if (server_session != nullptr) {
     server_config = server_session->config();
-    if (!GetQuicReloadableFlag(quic_ignore_user_agent_transport_parameter)) {
-      EXPECT_EQ(server_session->user_agent_id().value_or("MissingUserAgent"),
-                kTestUserAgentId);
-    }
   } else {
     ADD_FAILURE() << "Missing server session";
   }
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index f61faf8..2039148 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -123,8 +123,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_match_ietf_reset_code, true)
 // When the flag is true, exit STARTUP after the same number of loss events as PROBE_UP.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_startup_probe_up_loss_events, true)
-// When true, QUIC server will ignore received user agent transport parameter and rely on getting that information from HTTP headers.
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_ignore_user_agent_transport_parameter, true)
 // When true, QUIC will both send and validate the version_information transport parameter.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_version_information, false)
 // When true, defaults to BBR congestion control instead of Cubic.
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc
index 7950a9d..62f2b4c 100644
--- a/quic/core/tls_client_handshaker.cc
+++ b/quic/core/tls_client_handshaker.cc
@@ -240,9 +240,6 @@
   if (!handshaker_delegate()->FillTransportParameters(&params)) {
     return false;
   }
-  if (!user_agent_id_.empty()) {
-    params.user_agent_id = user_agent_id_;
-  }
 
   // Notify QuicConnectionDebugVisitor.
   session()->connection()->OnTransportParametersSent(params);
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index e94a597..a16e729 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -502,10 +502,6 @@
   }
 
   ProcessAdditionalTransportParameters(client_params);
-  if (!session()->user_agent_id().has_value() &&
-      client_params.user_agent_id.has_value()) {
-    session()->SetUserAgentId(client_params.user_agent_id.value());
-  }
 
   return true;
 }
