diff --git a/framework-t/api/current.txt b/framework-t/api/current.txt
index 86745d4..fb46ee7 100644
--- a/framework-t/api/current.txt
+++ b/framework-t/api/current.txt
@@ -127,6 +127,7 @@
 
   public final class IpSecTransform implements java.lang.AutoCloseable {
     method public void close();
+    method @FlaggedApi("com.android.net.flags.ipsec_transform_state") public void getIpSecTransformState(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.net.IpSecTransformState,java.lang.RuntimeException>);
   }
 
   public static class IpSecTransform.Builder {
@@ -138,6 +139,29 @@
     method @NonNull public android.net.IpSecTransform.Builder setIpv4Encapsulation(@NonNull android.net.IpSecManager.UdpEncapsulationSocket, int);
   }
 
+  @FlaggedApi("com.android.net.flags.ipsec_transform_state") public final class IpSecTransformState implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getByteCount();
+    method public long getPacketCount();
+    method @NonNull public byte[] getReplayBitmap();
+    method public long getRxHighestSequenceNumber();
+    method public long getTimestamp();
+    method public long getTxHighestSequenceNumber();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpSecTransformState> CREATOR;
+  }
+
+  @FlaggedApi("com.android.net.flags.ipsec_transform_state") public static final class IpSecTransformState.Builder {
+    ctor public IpSecTransformState.Builder();
+    method @NonNull public android.net.IpSecTransformState build();
+    method @NonNull public android.net.IpSecTransformState.Builder setByteCount(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setPacketCount(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setReplayBitmap(@NonNull byte[]);
+    method @NonNull public android.net.IpSecTransformState.Builder setRxHighestSequenceNumber(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setTimestamp(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setTxHighestSequenceNumber(long);
+  }
+
   public class TrafficStats {
     ctor public TrafficStats();
     method public static void clearThreadStatsTag();
diff --git a/framework-t/src/android/net/IpSecTransform.java b/framework-t/src/android/net/IpSecTransform.java
index 0412a76..246a2dd 100644
--- a/framework-t/src/android/net/IpSecTransform.java
+++ b/framework-t/src/android/net/IpSecTransform.java
@@ -213,7 +213,6 @@
      * @param callback Callback that's called after the transform state is ready or when an error
      *     occurs.
      * @see IpSecTransformState
-     * @hide
      */
     @FlaggedApi(IPSEC_TRANSFORM_STATE)
     public void getIpSecTransformState(
diff --git a/framework-t/src/android/net/IpSecTransformState.java b/framework-t/src/android/net/IpSecTransformState.java
index daebbc4..b575dd5 100644
--- a/framework-t/src/android/net/IpSecTransformState.java
+++ b/framework-t/src/android/net/IpSecTransformState.java
@@ -37,8 +37,6 @@
  * well as observing out-of-order delivery by checking the bitmap. Additionally, callers can query
  * IpSecTransformStates at two timestamps. By comparing the changes in packet counts and sequence
  * numbers, callers can estimate IPsec data loss in the inbound direction.
- *
- * @hide
  */
 @FlaggedApi(IPSEC_TRANSFORM_STATE)
 public final class IpSecTransformState implements Parcelable {
@@ -125,7 +123,6 @@
      * Retrieve the epoch timestamp (milliseconds) for when this state was created
      *
      * @see Builder#setTimestamp(long)
-     * @hide
      */
     public long getTimestamp() {
         return mTimeStamp;
@@ -135,7 +132,6 @@
      * Retrieve the highest sequence number sent so far
      *
      * @see Builder#setTxHighestSequenceNumber(long)
-     * @hide
      */
     public long getTxHighestSequenceNumber() {
         return mTxHighestSequenceNumber;
@@ -145,7 +141,6 @@
      * Retrieve the highest sequence number received so far
      *
      * @see Builder#setRxHighestSequenceNumber(long)
-     * @hide
      */
     public long getRxHighestSequenceNumber() {
         return mRxHighestSequenceNumber;
@@ -155,7 +150,6 @@
      * Retrieve the number of packets received AND sent so far
      *
      * @see Builder#setPacketCount(long)
-     * @hide
      */
     public long getPacketCount() {
         return mPacketCount;
@@ -165,7 +159,6 @@
      * Retrieve the number of bytes received AND sent so far
      *
      * @see Builder#setByteCount(long)
-     * @hide
      */
     public long getByteCount() {
         return mByteCount;
@@ -184,18 +177,13 @@
      * IpSecTransforms, all bits will be unchecked.
      *
      * @see Builder#setReplayBitmap(byte[])
-     * @hide
      */
     @NonNull
     public byte[] getReplayBitmap() {
         return mReplayBitmap.clone();
     }
 
-    /**
-     * Builder class for testing purposes
-     *
-     * @hide
-     */
+    /** Builder class for testing purposes */
     @FlaggedApi(IPSEC_TRANSFORM_STATE)
     public static final class Builder {
         private long mTimeStamp;
@@ -205,7 +193,6 @@
         private long mByteCount;
         private byte[] mReplayBitmap;
 
-        /** @hide */
         public Builder() {
             mTimeStamp = System.currentTimeMillis();
         }
@@ -214,7 +201,6 @@
          * Set the epoch timestamp (milliseconds) for when this state was created
          *
          * @see IpSecTransformState#getTimestamp()
-         * @hide
          */
         @NonNull
         public Builder setTimestamp(long timeStamp) {
@@ -226,7 +212,6 @@
          * Set the highest sequence number sent so far
          *
          * @see IpSecTransformState#getTxHighestSequenceNumber()
-         * @hide
          */
         @NonNull
         public Builder setTxHighestSequenceNumber(long seqNum) {
@@ -238,7 +223,6 @@
          * Set the highest sequence number received so far
          *
          * @see IpSecTransformState#getRxHighestSequenceNumber()
-         * @hide
          */
         @NonNull
         public Builder setRxHighestSequenceNumber(long seqNum) {
@@ -250,7 +234,6 @@
          * Set the number of packets received AND sent so far
          *
          * @see IpSecTransformState#getPacketCount()
-         * @hide
          */
         @NonNull
         public Builder setPacketCount(long packetCount) {
@@ -262,7 +245,6 @@
          * Set the number of bytes received AND sent so far
          *
          * @see IpSecTransformState#getByteCount()
-         * @hide
          */
         @NonNull
         public Builder setByteCount(long byteCount) {
@@ -274,7 +256,6 @@
          * Set the replay bitmap
          *
          * @see IpSecTransformState#getReplayBitmap()
-         * @hide
          */
         @NonNull
         public Builder setReplayBitmap(@NonNull byte[] bitMap) {
@@ -286,7 +267,6 @@
          * Build and validate the IpSecTransformState
          *
          * @return an immutable IpSecTransformState instance
-         * @hide
          */
         @NonNull
         public IpSecTransformState build() {
