diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index 8f54bf8..ec6b893 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -473,6 +473,14 @@
       } else if (name == L"Square") {
         square_count++;
         EXPECT_EQ(1, FPDFPageObjMark_CountParams(mark));
+        ASSERT_GT(FPDFPageObjMark_GetParamKey(mark, 0, buffer, 256), 0u);
+        std::wstring key =
+            GetPlatformWString(reinterpret_cast<unsigned short*>(buffer));
+        EXPECT_EQ(L"Factor", key);
+        EXPECT_EQ(FPDF_OBJECT_NUMBER,
+                  FPDFPageObjMark_GetParamValueType(mark, 0));
+        int square_root = FPDFPageObjMark_GetParamIntValue(mark, 0);
+        EXPECT_EQ(i + 1, square_root * square_root);
       } else if (name == L"GreaterThanTen") {
         greater_than_ten_count++;
         EXPECT_EQ(0, FPDFPageObjMark_CountParams(mark));
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 7a8bbabf2..241025f 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -99,6 +99,28 @@
   }
 }
 
+const std::pair<const ByteString, std::unique_ptr<CPDF_Object>>*
+GetMarkParamPairAtIndex(FPDF_PAGEOBJECTMARK mark, unsigned long index) {
+  if (!mark)
+    return nullptr;
+
+  const CPDF_ContentMarkItem* pMarkItem =
+      CPDFContentMarkItemFromFPDFPageObjectMark(mark);
+
+  const CPDF_Dictionary* pParams = pMarkItem->GetParam();
+  if (!pParams)
+    return nullptr;
+
+  for (auto& it : *pParams) {
+    if (index == 0)
+      return &it;
+
+    --index;
+  }
+
+  return nullptr;
+}
+
 }  // namespace
 
 FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument() {
@@ -284,6 +306,39 @@
   return pParams->GetCount();
 }
 
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFPageObjMark_GetParamKey(FPDF_PAGEOBJECTMARK mark,
+                            unsigned long index,
+                            void* buffer,
+                            unsigned long buflen) {
+  auto* param_pair = GetMarkParamPairAtIndex(mark, index);
+  if (!param_pair)
+    return 0;
+
+  return Utf16EncodeMaybeCopyAndReturnLength(
+      WideString::FromUTF8(param_pair->first.AsStringView()), buffer, buflen);
+}
+
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark,
+                                  unsigned long index) {
+  auto* param_pair = GetMarkParamPairAtIndex(mark, index);
+  if (!param_pair)
+    return FPDF_OBJECT_UNKNOWN;
+
+  return param_pair->second->GetType();
+}
+
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObjMark_GetParamIntValue(FPDF_PAGEOBJECTMARK mark,
+                                 unsigned long index) {
+  auto* param_pair = GetMarkParamPairAtIndex(mark, index);
+  if (!param_pair)
+    return 0;
+
+  return param_pair->second->GetInteger();
+}
+
 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
 FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) {
   if (!pageObject)
diff --git a/fpdfsdk/fpdf_view_c_api_test.c b/fpdfsdk/fpdf_view_c_api_test.c
index 0174872..dd93095 100644
--- a/fpdfsdk/fpdf_view_c_api_test.c
+++ b/fpdfsdk/fpdf_view_c_api_test.c
@@ -149,6 +149,9 @@
     CHK(FPDFPageObj_GetMark);
     CHK(FPDFPageObjMark_GetName);
     CHK(FPDFPageObjMark_CountParams);
+    CHK(FPDFPageObjMark_GetParamKey);
+    CHK(FPDFPageObjMark_GetParamValueType);
+    CHK(FPDFPageObjMark_GetParamIntValue);
     CHK(FPDFImageObj_LoadJpegFile);
     CHK(FPDFImageObj_LoadJpegFileInline);
     CHK(FPDFImageObj_SetMatrix);
diff --git a/public/fpdf_edit.h b/public/fpdf_edit.h
index 4968a7f..8228bb7 100644
--- a/public/fpdf_edit.h
+++ b/public/fpdf_edit.h
@@ -281,6 +281,7 @@
 FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV
 FPDFPageObj_NewImageObj(FPDF_DOCUMENT document);
 
+// Experimental API.
 // Get number of content marks in |page_object|.
 //
 //   page_object - handle to a page object.
@@ -290,6 +291,7 @@
 FPDF_EXPORT int FPDF_CALLCONV
 FPDFPageObj_CountMarks(FPDF_PAGEOBJECT page_object);
 
+// Experimental API.
 // Get content mark in |page_object| at |index|.
 //
 //   page_object - handle to a page object.
@@ -302,6 +304,7 @@
 FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
 FPDFPageObj_GetMark(FPDF_PAGEOBJECT page_object, unsigned long index);
 
+// Experimental API.
 // Get name of a content mark. |buffer| is only modified if |buflen| is longer
 // than the length of the name.
 //
@@ -315,6 +318,7 @@
                         void* buffer,
                         unsigned long buflen);
 
+// Experimental API.
 // Get number of key/value pair parameters in |mark|.
 //
 //   mark   - handle to a content mark.
@@ -324,6 +328,45 @@
 FPDF_EXPORT int FPDF_CALLCONV
 FPDFPageObjMark_CountParams(FPDF_PAGEOBJECTMARK mark);
 
+// Experimental API.
+// Get the key of a property in a content mark. |buffer| is only modified if
+// |buflen| is longer than the length of the key.
+//
+//   mark   - handle to a content mark.
+//   index  - index of the property.
+//   buffer - buffer for holding the returned key in UTF16-LE.
+//   buflen - length of the buffer.
+//
+// Returns the length of the key.
+FPDF_EXPORT unsigned long FPDF_CALLCONV
+FPDFPageObjMark_GetParamKey(FPDF_PAGEOBJECTMARK mark,
+                            unsigned long index,
+                            void* buffer,
+                            unsigned long buflen);
+
+// Experimental API.
+// Get type of the value of a property in a content mark.
+//
+//   mark   - handle to a content mark.
+//   index  - index of the property.
+//
+// Returns the type of the value, or FPDF_OBJECT_UNKNOWN in case of failure.
+FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
+FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark,
+                                  unsigned long index);
+
+// Experimental API.
+// Get value of an int property in a content mark.
+// FPDFPageObjMark_GetParamValueType() should have returned FPDF_OBJECT_NUMBER
+// for this property.
+//
+//   mark   - handle to a content mark.
+//   index  - index of the property.
+//
+// Returns the int value, 0 in case of failure.
+FPDF_EXPORT int FPDF_CALLCONV
+FPDFPageObjMark_GetParamIntValue(FPDF_PAGEOBJECTMARK mark, unsigned long index);
+
 // Load an image from a JPEG image file and then set it into |image_object|.
 //
 //   pages        - pointer to the start of all loaded pages, may be NULL.
diff --git a/testing/resources/text_in_page_marked.in b/testing/resources/text_in_page_marked.in
index e2387a4..982fc7b 100644
--- a/testing/resources/text_in_page_marked.in
+++ b/testing/resources/text_in_page_marked.in
@@ -103,7 +103,7 @@
 q 0 0 0.733333 rg /FXE2 gs
 BT -0.143427 1.73091 -1.73091 -0.143427 97.1315 134.618
 Tm /FXF1 9 Tf (Test 15) Tj ET Q
-/Square <</Factor 2>> BDC
+/Square <</Factor 4>> BDC
 q 0 0 0.788235 rg /FXE2 gs
 BT 0.43929 1.73472 -1.73472 0.43929 108.786 134.694
 Tm /FXF2 9 Tf (Test 16) Tj ET Q
diff --git a/testing/resources/text_in_page_marked.pdf b/testing/resources/text_in_page_marked.pdf
index 5f9467f..1f9e54f 100644
--- a/testing/resources/text_in_page_marked.pdf
+++ b/testing/resources/text_in_page_marked.pdf
@@ -104,7 +104,7 @@
 q 0 0 0.733333 rg /FXE2 gs
 BT -0.143427 1.73091 -1.73091 -0.143427 97.1315 134.618
 Tm /FXF1 9 Tf (Test 15) Tj ET Q
-/Square <</Factor 2>> BDC
+/Square <</Factor 4>> BDC
 q 0 0 0.788235 rg /FXE2 gs
 BT 0.43929 1.73472 -1.73472 0.43929 108.786 134.694
 Tm /FXF2 9 Tf (Test 16) Tj ET Q
