diff --git a/CHANGELOG.md b/CHANGELOG.md
index d46a9fa..771a9cd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -40,6 +40,10 @@
   - `decode_pldm_file_descriptor_pdr()` to
     `decode_pldm_platform_file_descriptor_pdr()`
 
+- base: Let `payload_length` be an in/out buffer for:
+  - `encode_pldm_base_multipart_receive_req()`
+  - `encode_pldm_base_negotiate_transfer_params_req()`
+
 ### Deprecated
 
 ### Removed
diff --git a/include/libpldm/base.h b/include/libpldm/base.h
index 75197d3..83a3336 100644
--- a/include/libpldm/base.h
+++ b/include/libpldm/base.h
@@ -719,7 +719,7 @@
  *  @param[in] instance_id - Message's instance id
  *  @param[in] req - The pointer to the request message to be encoded
  *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - length of request message payload
+ *  @param[in, out] payload_length - length of request message payload
  *  @return 0 on success
  *          -EINVAL if the input parameters' memory are not allocated,
  *          or message type or instance in request header is invalid
@@ -728,7 +728,7 @@
  */
 int encode_pldm_base_multipart_receive_req(
 	uint8_t instance_id, const struct pldm_base_multipart_receive_req *req,
-	struct pldm_msg *msg, size_t payload_length);
+	struct pldm_msg *msg, size_t *payload_length);
 
 /** @brief Decode a PLDM MultipartReceive response message
  *
@@ -802,7 +802,7 @@
  *  @param[in] instance_id - Message's instance id
  *  @param[in] req - The pointer to the request message to be encoded
  *  @param[in,out] msg - Message will be written to this
- *  @param[in] payload_length - length of request message payload
+ *  @param[in, out] payload_length - length of request message payload
  *  @return 0 on success
  *          -EINVAL if the input parameters' memory are not allocated,
  *          or message type or instance in request header is invalid
@@ -812,7 +812,7 @@
 int encode_pldm_base_negotiate_transfer_params_req(
 	uint8_t instance_id,
 	const struct pldm_base_negotiate_transfer_params_req *req,
-	struct pldm_msg *msg, size_t payload_length);
+	struct pldm_msg *msg, size_t *payload_length);
 
 /** @brief Decode a PLDM Negotiate Transfer Parameters response message
  *
diff --git a/src/dsp/base.c b/src/dsp/base.c
index c8a9210..c227beb 100644
--- a/src/dsp/base.c
+++ b/src/dsp/base.c
@@ -585,12 +585,12 @@
 LIBPLDM_ABI_TESTING
 int encode_pldm_base_multipart_receive_req(
 	uint8_t instance_id, const struct pldm_base_multipart_receive_req *req,
-	struct pldm_msg *msg, size_t payload_length)
+	struct pldm_msg *msg, size_t *payload_length)
 {
 	PLDM_MSGBUF_DEFINE_P(buf);
 	int rc;
 
-	if (req == NULL || msg == NULL) {
+	if (req == NULL || msg == NULL || payload_length == NULL) {
 		return -EINVAL;
 	}
 
@@ -606,7 +606,7 @@
 	}
 
 	rc = pldm_msgbuf_init_errno(buf, PLDM_MULTIPART_RECEIVE_REQ_BYTES,
-				    msg->payload, payload_length);
+				    msg->payload, *payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -618,7 +618,7 @@
 	pldm_msgbuf_insert(buf, req->section_offset);
 	pldm_msgbuf_insert(buf, req->section_length);
 
-	return pldm_msgbuf_complete(buf);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_TESTING
@@ -795,12 +795,12 @@
 int encode_pldm_base_negotiate_transfer_params_req(
 	uint8_t instance_id,
 	const struct pldm_base_negotiate_transfer_params_req *req,
-	struct pldm_msg *msg, size_t payload_length)
+	struct pldm_msg *msg, size_t *payload_length)
 {
 	PLDM_MSGBUF_DEFINE_P(buf);
 	int rc;
 
-	if (req == NULL || msg == NULL) {
+	if (req == NULL || msg == NULL || payload_length == NULL) {
 		return -EINVAL;
 	}
 
@@ -817,7 +817,7 @@
 
 	rc = pldm_msgbuf_init_errno(
 		buf, PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES,
-		msg->payload, payload_length);
+		msg->payload, *payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -831,7 +831,7 @@
 		return pldm_msgbuf_discard(buf, rc);
 	}
 
-	return pldm_msgbuf_complete(buf);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_TESTING
diff --git a/tests/dsp/base.cpp b/tests/dsp/base.cpp
index fbecd60..723810e 100644
--- a/tests/dsp/base.cpp
+++ b/tests/dsp/base.cpp
@@ -756,7 +756,10 @@
     const struct pldm_base_multipart_receive_req req_data = {
         PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
 
-    std::array<uint8_t, PLDM_MULTIPART_RECEIVE_REQ_BYTES> requestMsg = {
+    static constexpr const size_t requestMsgLength =
+        PLDM_MULTIPART_RECEIVE_REQ_BYTES;
+
+    std::array<uint8_t, requestMsgLength> requestMsg = {
         PLDM_BASE, PLDM_XFER_FIRST_PART,
         0x01,      0x00,
         0x00,      0x00,
@@ -767,13 +770,15 @@
         0x10,      0x00,
         0x00,      0x00};
 
-    PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+    PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+    size_t payload_length = requestMsgLength;
     auto rc = encode_pldm_base_multipart_receive_req(
-        instance_id, &req_data, requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+        instance_id, &req_data, requestPtr, &payload_length);
 
     ASSERT_EQ(rc, 0);
     EXPECT_EQ(
         0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
+    EXPECT_EQ(payload_length, requestMsgLength);
 }
 #endif
 
@@ -786,13 +791,17 @@
     const struct pldm_base_multipart_receive_req req_data = {
         PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
 
-    PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
-    rc = encode_pldm_base_multipart_receive_req(
-        instance_id, nullptr, requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+    static constexpr const size_t requestMsgLength =
+        PLDM_MULTIPART_RECEIVE_REQ_BYTES;
+
+    PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+    size_t payload_length = requestMsgLength;
+    rc = encode_pldm_base_multipart_receive_req(instance_id, nullptr,
+                                                requestPtr, &payload_length);
     EXPECT_EQ(rc, -EINVAL);
 
-    rc = encode_pldm_base_multipart_receive_req(
-        instance_id, &req_data, nullptr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+    rc = encode_pldm_base_multipart_receive_req(instance_id, &req_data, nullptr,
+                                                &payload_length);
     EXPECT_EQ(rc, -EINVAL);
 }
 #endif
@@ -806,10 +815,13 @@
     const struct pldm_base_multipart_receive_req req_data = {
         PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
 
-    PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+    static constexpr const size_t requestMsgLength =
+        PLDM_MULTIPART_RECEIVE_REQ_BYTES;
 
+    PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+    size_t payload_length = 1;
     rc = encode_pldm_base_multipart_receive_req(instance_id, &req_data,
-                                                requestPtr, 1);
+                                                requestPtr, &payload_length);
     EXPECT_EQ(rc, -EOVERFLOW);
 }
 #endif
@@ -1443,21 +1455,24 @@
         0x0001, // BE 256
         {{0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x81}}};
 
-    std::array<uint8_t, PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES>
-        requestMsg = {0x01, 0x00, // requester_part_size = 256
-                      0x00, 0x00, 0x00, 0x00,
-                      0x00, 0x00, 0x00, 0x81}; // requester_protocol_support =
-                                               // PLDM_BASE & PLDM_FILE
+    static constexpr const size_t requestMsgLength =
+        PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES;
 
-    PLDM_MSG_DEFINE_P(requestPtr,
-                      PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+    std::array<uint8_t, requestMsgLength> requestMsg = {
+        0x01, 0x00, // requester_part_size = 256
+        0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x81}; // requester_protocol_support =
+                                 // PLDM_BASE & PLDM_FILE
+
+    PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+    size_t payload_length = requestMsgLength;
     auto rc = encode_pldm_base_negotiate_transfer_params_req(
-        instance_id, &req_data, requestPtr,
-        PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+        instance_id, &req_data, requestPtr, &payload_length);
 
     ASSERT_EQ(rc, 0);
     EXPECT_EQ(
         0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
+    EXPECT_EQ(payload_length, requestMsgLength);
 }
 #endif
 
@@ -1470,16 +1485,17 @@
         0x0001, // BE 256
         {{0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x81}}};
 
-    PLDM_MSG_DEFINE_P(requestPtr,
-                      PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+    static constexpr const size_t requestMsgLength =
+        PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES;
+
+    PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+    size_t payload_length = requestMsgLength;
     rc = encode_pldm_base_negotiate_transfer_params_req(
-        instance_id, nullptr, requestPtr,
-        PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+        instance_id, nullptr, requestPtr, &payload_length);
     EXPECT_EQ(rc, -EINVAL);
 
     rc = encode_pldm_base_negotiate_transfer_params_req(
-        instance_id, &req_data, nullptr,
-        PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+        instance_id, &req_data, nullptr, &payload_length);
     EXPECT_EQ(rc, -EINVAL);
 }
 #endif
@@ -1497,8 +1513,9 @@
     PLDM_MSG_DEFINE_P(requestPtr,
                       PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
 
-    rc = encode_pldm_base_negotiate_transfer_params_req(instance_id, &req_data,
-                                                        requestPtr, 1);
+    size_t payload_length = 1;
+    rc = encode_pldm_base_negotiate_transfer_params_req(
+        instance_id, &req_data, requestPtr, &payload_length);
     EXPECT_EQ(rc, -EOVERFLOW);
 }
 #endif
