diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc
index 152887d..fed44e1 100644
--- a/quiche/common/structured_headers.cc
+++ b/quiche/common/structured_headers.cc
@@ -981,49 +981,6 @@
   return std::get_if<InnerList>(&value_);
 }
 
-std::optional<std::pair<const Item&, const Parameters&>>
-ParameterizedMember::GetWithParamsIfItem() const {
-  const auto* item = GetIfItem();
-  if (!item) {
-    return std::nullopt;
-  }
-
-  return std::pair<const Item&, const Parameters&>(item->item, item->params);
-}
-
-std::optional<std::pair<Item&, Parameters&>>
-ParameterizedMember::GetWithParamsIfItem() {
-  auto* item = GetIfItem();
-  if (!item) {
-    return std::nullopt;
-  }
-
-  return std::pair<Item&, Parameters&>(item->item, item->params);
-}
-
-std::optional<
-    std::pair<const std::vector<ParameterizedItem>&, const Parameters&>>
-ParameterizedMember::GetWithParamsIfInnerList() const {
-  const auto* inner_list = GetIfInnerList();
-  if (!inner_list) {
-    return std::nullopt;
-  }
-
-  return std::pair<const std::vector<ParameterizedItem>&, const Parameters&>(
-      inner_list->items, inner_list->params);
-}
-
-std::optional<std::pair<std::vector<ParameterizedItem>&, Parameters&>>
-ParameterizedMember::GetWithParamsIfInnerList() {
-  auto* inner_list = GetIfInnerList();
-  if (!inner_list) {
-    return std::nullopt;
-  }
-
-  return std::pair<std::vector<ParameterizedItem>&, Parameters&>(
-      inner_list->items, inner_list->params);
-}
-
 // Not defaulted to work around
 // https://github.com/llvm/llvm-project/issues/132249 in older Clang versions.
 bool operator==(const ParameterizedMember& lhs,
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index e3b7565..0d8645f 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -314,35 +314,6 @@
   const InnerList* GetIfInnerList() const ABSL_ATTRIBUTE_LIFETIME_BOUND;
   InnerList* GetIfInnerList() ABSL_ATTRIBUTE_LIFETIME_BOUND;
 
-  // Returns the item and its parameters if the member is an item,
-  // `std::nullopt` otherwise.
-  //
-  // Deprecated: Use `GetIfItem()` instead.
-  std::optional<std::pair<const Item&, const Parameters&>> GetWithParamsIfItem()
-      const ABSL_ATTRIBUTE_LIFETIME_BOUND;
-
-  // Returns the item and its parameters if the member is an item,
-  // `std::nullopt` otherwise.
-  //
-  // Deprecated: Use `GetIfItem()` instead.
-  std::optional<std::pair<Item&, Parameters&>> GetWithParamsIfItem()
-      ABSL_ATTRIBUTE_LIFETIME_BOUND;
-
-  // Returns the inner list's items and its parameters if the member is an
-  // inner list, `std::nullopt` otherwise.
-  //
-  // Deprecated: Use `GetIfInnerList()` instead.
-  std::optional<
-      std::pair<const std::vector<ParameterizedItem>&, const Parameters&>>
-  GetWithParamsIfInnerList() const ABSL_ATTRIBUTE_LIFETIME_BOUND;
-
-  // Returns the inner list's items and its parameters if the member is an
-  // inner list, `std::nullopt` otherwise.
-  //
-  // Deprecated: Use `GetIfInnerList()` instead.
-  std::optional<std::pair<std::vector<ParameterizedItem>&, Parameters&>>
-  GetWithParamsIfInnerList() ABSL_ATTRIBUTE_LIFETIME_BOUND;
-
   QUICHE_EXPORT friend bool operator==(const ParameterizedMember&,
                                        const ParameterizedMember&);
 
diff --git a/quiche/common/structured_headers_test.cc b/quiche/common/structured_headers_test.cc
index e126103..dc0ed3c 100644
--- a/quiche/common/structured_headers_test.cc
+++ b/quiche/common/structured_headers_test.cc
@@ -857,12 +857,6 @@
     // default constructor.
     ParameterizedMember member;
 
-    EXPECT_EQ(member.GetWithParamsIfItem(), std::nullopt);
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfItem(), std::nullopt);
-
-    EXPECT_EQ(member.GetWithParamsIfInnerList(), std::nullopt);
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfInnerList(), std::nullopt);
-
     EXPECT_FALSE(member.GetIfItem());
     EXPECT_FALSE(std::as_const(member).GetIfItem());
 
@@ -876,13 +870,6 @@
 
     ParameterizedMember member(item, params);
 
-    EXPECT_EQ(member.GetWithParamsIfItem(), std::pair(item, params));
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfItem(),
-              std::pair(item, params));
-
-    EXPECT_EQ(member.GetWithParamsIfInnerList(), std::nullopt);
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfInnerList(), std::nullopt);
-
     auto* item_ptr = member.GetIfItem();
     ASSERT_TRUE(item_ptr);
     EXPECT_EQ(*item_ptr, ParameterizedItem(item, params));
@@ -897,13 +884,6 @@
 
     ParameterizedMember member(items, params);
 
-    EXPECT_EQ(member.GetWithParamsIfItem(), std::nullopt);
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfItem(), std::nullopt);
-
-    EXPECT_EQ(member.GetWithParamsIfInnerList(), std::pair(items, params));
-    EXPECT_EQ(std::as_const(member).GetWithParamsIfInnerList(),
-              std::pair(items, params));
-
     EXPECT_FALSE(member.GetIfItem());
 
     auto* inner_list_ptr = member.GetIfInnerList();
