diff --git a/core/src/docs/rfcs/3232_align_list_api.md b/core/src/docs/rfcs/3232_align_list_api.md
new file mode 100644
index 000000000000..788d57d0017e
--- /dev/null
+++ b/core/src/docs/rfcs/3232_align_list_api.md
@@ -0,0 +1,69 @@
+- Proposal Name: `align_list_api`
+- Start Date: 2023-10-07
+- RFC PR: [apache/incubator-opendal#3232](https://github.com/apache/incubator-opendal/pull/3232)
+- Tracking Issue: [apache/incubator-opendal#3236](https://github.com/apache/incubator-opendal/issues/3236)
+
+# Summary
+
+Refactor internal `Page` API to `List` API.
+
+# Motivation
+
+OpenDAL's `Lister` is implemented by `Page`:
+
+```rust
+#[async_trait]
+pub trait Page: Send + Sync + 'static {
+ /// Fetch a new page of [`Entry`]
+ ///
+ /// `Ok(None)` means all pages have been returned. Any following call
+ /// to `next` will always get the same result.
+ async fn next(&mut self) -> Result