diff --git a/api/compose/spec/page.json b/api/compose/spec/page.json
index 6edd5851450dfd4d94b45fd7a676bca8aa44eb30..72b1eea7f7210d470d0ecc03de6ea1450bd55c5e 100644
--- a/api/compose/spec/page.json
+++ b/api/compose/spec/page.json
@@ -189,6 +189,12 @@
             "title": "Description",
             "type": "string"
           },
+          {
+            "name": "weight",
+            "required": false,
+            "title": "Page tree weight",
+            "type": "int"
+          },
           {
             "name": "visible",
             "required": false,
diff --git a/compose/rest/request/page.go b/compose/rest/request/page.go
index eea9d99f21764cff2706d01d4aaa666bf2bbaf5d..59752943f48d707f7ccb4a87286433c7606d9000 100644
--- a/compose/rest/request/page.go
+++ b/compose/rest/request/page.go
@@ -335,6 +335,7 @@ func (r PageUpdate) Auditable() map[string]interface{} {
 	out["title"] = r.Title
 	out["handle"] = r.Handle
 	out["description"] = r.Description
+	out["weight"] = r.Weight
 	out["visible"] = r.Visible
 	out["blocks"] = r.Blocks
 
@@ -385,6 +386,9 @@ func (r *PageUpdate) Fill(req *http.Request) (err error) {
 	if val, ok := post["description"]; ok {
 		r.Description = val
 	}
+	if val, ok := post["weight"]; ok {
+		r.Weight = parseInt(val)
+	}
 	if val, ok := post["visible"]; ok {
 		r.Visible = parseBool(val)
 	}