diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 1f8d6fe..0ee3cf0 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -6603,6 +6603,8 @@
   WebTransportStream* outgoing_stream =
       session->OpenOutgoingUnidirectionalStream();
   ASSERT_TRUE(outgoing_stream != nullptr);
+  EXPECT_EQ(outgoing_stream,
+            session->GetStreamById(outgoing_stream->GetStreamId()));
 
   auto stream_visitor =
       std::make_unique<NiceMock<MockWebTransportStreamVisitor>>();
@@ -6622,6 +6624,8 @@
   WebTransportStream* received_stream =
       session->AcceptIncomingUnidirectionalStream();
   ASSERT_TRUE(received_stream != nullptr);
+  EXPECT_EQ(received_stream,
+            session->GetStreamById(received_stream->GetStreamId()));
   std::string received_data;
   WebTransportStream::ReadResult result = received_stream->Read(&received_data);
   EXPECT_EQ(received_data, "test");
@@ -6681,6 +6685,7 @@
 
   WebTransportStream* stream = session->OpenOutgoingBidirectionalStream();
   ASSERT_TRUE(stream != nullptr);
+  EXPECT_EQ(stream, session->GetStreamById(stream->GetStreamId()));
 
   auto stream_visitor_owned =
       std::make_unique<NiceMock<MockWebTransportStreamVisitor>>();
diff --git a/quiche/quic/core/http/quic_spdy_stream.h b/quiche/quic/core/http/quic_spdy_stream.h
index e59afd5..1267f4c 100644
--- a/quiche/quic/core/http/quic_spdy_stream.h
+++ b/quiche/quic/core/http/quic_spdy_stream.h
@@ -27,6 +27,7 @@
 #include "quiche/quic/core/qpack/qpack_decoded_headers_accumulator.h"
 #include "quiche/quic/core/quic_error_codes.h"
 #include "quiche/quic/core/quic_packets.h"
+#include "quiche/quic/core/quic_session.h"
 #include "quiche/quic/core/quic_stream.h"
 #include "quiche/quic/core/quic_stream_priority.h"
 #include "quiche/quic/core/quic_stream_sequencer.h"
diff --git a/quiche/quic/core/http/web_transport_http3.cc b/quiche/quic/core/http/web_transport_http3.cc
index 1896266..dc0e054 100644
--- a/quiche/quic/core/http/web_transport_http3.cc
+++ b/quiche/quic/core/http/web_transport_http3.cc
@@ -267,6 +267,22 @@
   return stream->interface();
 }
 
+webtransport::Stream* WebTransportHttp3::GetStreamById(
+    webtransport::StreamId id) {
+  if (!streams_.contains(id)) {
+    return nullptr;
+  }
+  QuicStream* stream = session_->GetActiveStream(id);
+  const bool bidi = QuicUtils::IsBidirectionalStreamId(
+      id, ParsedQuicVersion::RFCv1());  // Assume IETF QUIC for WebTransport
+  if (bidi) {
+    return static_cast<QuicSpdyStream*>(stream)->web_transport_stream();
+  } else {
+    return static_cast<WebTransportHttp3UnidirectionalStream*>(stream)
+        ->interface();
+  }
+}
+
 webtransport::DatagramStatus WebTransportHttp3::SendOrQueueDatagram(
     absl::string_view datagram) {
   return MessageStatusToWebTransportStatus(
diff --git a/quiche/quic/core/http/web_transport_http3.h b/quiche/quic/core/http/web_transport_http3.h
index 8744449..6eb7239 100644
--- a/quiche/quic/core/http/web_transport_http3.h
+++ b/quiche/quic/core/http/web_transport_http3.h
@@ -82,6 +82,8 @@
   WebTransportStream* OpenOutgoingBidirectionalStream() override;
   WebTransportStream* OpenOutgoingUnidirectionalStream() override;
 
+  webtransport::Stream* GetStreamById(webtransport::StreamId id) override;
+
   webtransport::DatagramStatus SendOrQueueDatagram(
       absl::string_view datagram) override;
   QuicByteCount GetMaxDatagramSize() const override;
diff --git a/quiche/quic/core/quic_session.h b/quiche/quic/core/quic_session.h
index 5fa690b..c9931fe 100644
--- a/quiche/quic/core/quic_session.h
+++ b/quiche/quic/core/quic_session.h
@@ -649,6 +649,11 @@
     datagram_queue_.SetForceFlush(force_flush);
   }
 
+  // Find stream with |id|, returns nullptr if the stream does not exist or
+  // closed. static streams and zombie streams are not considered active
+  // streams.
+  QuicStream* GetActiveStream(QuicStreamId id) const;
+
  protected:
   using StreamMap =
       absl::flat_hash_map<QuicStreamId, std::unique_ptr<QuicStream>>;
@@ -810,11 +815,6 @@
     connection()->SetLossDetectionTuner(std::move(tuner));
   }
 
-  // Find stream with |id|, returns nullptr if the stream does not exist or
-  // closed. static streams and zombie streams are not considered active
-  // streams.
-  QuicStream* GetActiveStream(QuicStreamId id) const;
-
   const UberQuicStreamIdManager& ietf_streamid_manager() const {
     QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
     return ietf_streamid_manager_;
diff --git a/quiche/web_transport/test_tools/mock_web_transport.h b/quiche/web_transport/test_tools/mock_web_transport.h
index a24cc7a..9fdecfc 100644
--- a/quiche/web_transport/test_tools/mock_web_transport.h
+++ b/quiche/web_transport/test_tools/mock_web_transport.h
@@ -66,6 +66,7 @@
   MOCK_METHOD(bool, CanOpenNextOutgoingUnidirectionalStream, (), (override));
   MOCK_METHOD(Stream*, OpenOutgoingBidirectionalStream, (), (override));
   MOCK_METHOD(Stream*, OpenOutgoingUnidirectionalStream, (), (override));
+  MOCK_METHOD(Stream*, GetStreamById, (StreamId), (override));
   MOCK_METHOD(DatagramStatus, SendOrQueueDatagram, (absl::string_view datagram),
               (override));
   MOCK_METHOD(uint64_t, GetMaxDatagramSize, (), (const, override));
diff --git a/quiche/web_transport/web_transport.h b/quiche/web_transport/web_transport.h
index 6bf68f4..7ea0085 100644
--- a/quiche/web_transport/web_transport.h
+++ b/quiche/web_transport/web_transport.h
@@ -205,8 +205,7 @@
   //
   // IMPORTANT: See the class note regarding the lifetime of the returned stream
   // object.
-  // TODO(vasilvv): implement this in a follow-up CL.
-  // virtual Stream* GetStreamById(StreamId id) = 0;
+  virtual Stream* GetStreamById(StreamId id) = 0;
 
   virtual DatagramStatus SendOrQueueDatagram(absl::string_view datagram) = 0;
   // Returns a conservative estimate of the largest datagram size that the
