diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
index ef3a3b36cd4e4e17..6bb2e4f8558f03ac 100644
--- a/include/libcamera/buffer.h
+++ b/include/libcamera/buffer.h
@@ -52,7 +52,8 @@ public:
 	const std::vector<Plane> &planes() const { return planes_; }
 
 	Request *request() const { return request_; }
-	const FrameMetadata &metadata() const { return metadata_; };
+	void setRequest(Request *request) { request_ = request; }
+	const FrameMetadata &metadata() const { return metadata_; }
 
 	unsigned int cookie() const { return cookie_; }
 	void setCookie(unsigned int cookie) { cookie_ = cookie; }
diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp
index 93057568fc56a6f5..0c5e56cf10621ab2 100644
--- a/src/libcamera/buffer.cpp
+++ b/src/libcamera/buffer.cpp
@@ -182,6 +182,17 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
  * not associated with a request
  */
 
+/**
+ * \fn FrameBuffer::setRequest()
+ * \brief Set the request this buffer belongs to
+ * \param[in] request Request to set
+ *
+ * The intended callers of this method are pipeline handlers and only for
+ * buffers that are internal to the pipeline.
+ *
+ * \todo Shall be hidden from applications with a d-pointer design.
+ */
+
 /**
  * \fn FrameBuffer::metadata()
  * \brief Retrieve the dynamic metadata
