diff --git a/api/compose/spec.json b/api/compose/spec.json
index 1dce8061c0cc4aa06ff4f962752d241f3f2e1abb..fd92ab8914c919e11ea1df6498b40cb98676eb40 100644
--- a/api/compose/spec.json
+++ b/api/compose/spec.json
@@ -34,24 +34,11 @@
                             "required": false,
                             "title": "Search by namespace slug"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        },
-                        {
-                            "name": "sort",
-                            "type": "string",
-                            "required": false,
-                            "title": "Sort namespaces"
-                        }
+                        {"type": "uint",   "name": "limit",   "title": "Limit"},
+                        {"type": "uint",   "name": "offset",  "title": "Offset"},
+                        {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+                        {"type": "string", "name": "sort",    "title": "Sort items"}
                     ]
                 }
             },
@@ -244,24 +231,11 @@
                             "required": false,
                             "title": "Search by handle"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        },
-                        {
-                            "type": "string",
-                            "name": "sort",
-                            "required": false,
-                            "title": "Sort"
-                        }
+                        {"type": "uint",   "name": "limit",   "title": "Limit"},
+                        {"type": "uint",   "name": "offset",  "title": "Offset"},
+                        {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+                        {"type": "string", "name": "sort",    "title": "Sort items"}
                     ]
                 }
             },
@@ -547,24 +521,11 @@
                             "required": false,
                             "title": "Search by handle"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        },
-                        {
-                            "type": "string",
-                            "name": "sort",
-                            "required": false,
-                            "title": "Sort"
-                        }
+                        {"type": "uint",   "name": "limit",   "title": "Limit"},
+                        {"type": "uint",   "name": "offset",  "title": "Offset"},
+                        {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+                        {"type": "string", "name": "sort",    "title": "Sort items"}
                     ]
                 }
             },
@@ -779,24 +740,11 @@
                             "required": false,
                             "title": "Filtering condition"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        },
-                        {
-                            "name": "sort",
-                            "type": "string",
-                            "required": false,
-                            "title": "Sort field (default id desc)"
-                        }
+                        {"type": "uint",   "name": "limit",   "title": "Limit"},
+                        {"type": "uint",   "name": "offset",  "title": "Offset"},
+                        {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+                        {"type": "string", "name": "sort",    "title": "Sort items"}
                     ]
                 }
             },
@@ -1135,24 +1083,11 @@
                             "title": "Search charts by handle",
                             "type": "string"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        },
-                        {
-                            "name": "sort",
-                            "required": false,
-                            "title": "Sort charts",
-                            "type": "string"
-                        }
+                        {"type": "uint",   "name": "limit",   "title": "Limit"},
+                        {"type": "uint",   "name": "offset",  "title": "Offset"},
+                        {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+                        {"type": "string", "name": "sort",    "title": "Sort items"}
                     ]
                 }
             },
@@ -1392,18 +1327,10 @@
                             "required": false,
                             "title": "Filter attachments by field name"
                         },
-                        {
-                            "name": "page",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Page number"
-                        },
-                        {
-                            "name": "perPage",
-                            "type": "uint",
-                            "required": false,
-                            "title": "Returned items per page (default 50)"
-                        }
+                        {"type": "uint", "name": "limit",   "title": "Limit"},
+                        {"type": "uint", "name": "offset",  "title": "Offset"},
+                        {"type": "uint", "name": "page",    "title": "Page number (1-based)"},
+                        {"type": "uint", "name": "perPage", "title": "Returned items per page (default 50)"}
                     ]
                 }
             },
diff --git a/api/compose/spec/attachment.json b/api/compose/spec/attachment.json
index c6892fa7ffc7ee5f55bf89c7bb1a5df0f01f3448..223b0a682c497c3a756c6b94e00c434b6c5e5a41 100644
--- a/api/compose/spec/attachment.json
+++ b/api/compose/spec/attachment.json
@@ -70,15 +70,23 @@
             "title": "Filter attachments by field name",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           }
diff --git a/api/compose/spec/chart.json b/api/compose/spec/chart.json
index 01dec00c3cb8c6befa2c1b495c8f5d3b0df0fbb4..112656e46f26ea0518998c27048a823637acdd8f 100644
--- a/api/compose/spec/chart.json
+++ b/api/compose/spec/chart.json
@@ -42,22 +42,29 @@
             "title": "Search charts by handle",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort charts",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/compose/spec/module.json b/api/compose/spec/module.json
index 1c92615f7bcda254545e6534427e461c0c5b2854..98ce36623f67d0761c3c555b6f27529195399d41 100644
--- a/api/compose/spec/module.json
+++ b/api/compose/spec/module.json
@@ -50,22 +50,29 @@
             "title": "Search by handle",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/compose/spec/namespace.json b/api/compose/spec/namespace.json
index b39290245c4e0d15a107d1bd4771718d62360580..7eefec820e21cff319f0fb75afffe7d6a2d2eb2b 100644
--- a/api/compose/spec/namespace.json
+++ b/api/compose/spec/namespace.json
@@ -33,22 +33,29 @@
             "title": "Search by namespace slug",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort namespaces",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/compose/spec/page.json b/api/compose/spec/page.json
index 72b1eea7f7210d470d0ecc03de6ea1450bd55c5e..9228b8bcb4bf238e9efa27d163257070c94bbdfb 100644
--- a/api/compose/spec/page.json
+++ b/api/compose/spec/page.json
@@ -48,22 +48,29 @@
             "title": "Search by handle",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/compose/spec/record.json b/api/compose/spec/record.json
index 6b689b93806fedf57e50ffc4e7556dffbf43ea75..cb012fdc07803dacdcebd93856de9d21b9f5c978 100644
--- a/api/compose/spec/record.json
+++ b/api/compose/spec/record.json
@@ -70,22 +70,29 @@
             "title": "Filtering condition",
             "type": "string"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort field (default id desc)",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/system/spec.json b/api/system/spec.json
index 805c2586397ece10bc8113f249e40e558cb371ef..72618b5d5cd1c599b12bb005657d155ec75996f4 100644
--- a/api/system/spec.json
+++ b/api/system/spec.json
@@ -444,24 +444,11 @@
               "title": "Exclude (0, default), include (1) or return only (2) achived roles",
               "type": "uint"
             },
-            {
-              "name": "page",
-              "type": "uint",
-              "required": false,
-              "title": "Page number"
-            },
-            {
-              "name": "perPage",
-              "type": "uint",
-              "required": false,
-              "title": "Returned items per page (default 50)"
-            },
-            {
-              "name": "sort",
-              "required": false,
-              "title": "Sort",
-              "type": "string"
-            }
+            {"type": "uint",   "name": "limit",   "title": "Limit"},
+            {"type": "uint",   "name": "offset",  "title": "Offset"},
+            {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+            {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+            {"type": "string", "name": "sort",    "title": "Sort items"}
           ]
         }
       },
@@ -832,24 +819,11 @@
               "title": "Exclude (0, default), include (1) or return only (2) suspended users",
               "type": "uint"
             },
-            {
-              "name": "sort",
-              "type": "string",
-              "required": false,
-              "title": "Sort by (createdAt, updatedAt, deletedAt, suspendedAt, email, username, userID)"
-            },
-            {
-              "name": "page",
-              "type": "uint",
-              "required": false,
-              "title": "Page number"
-            },
-            {
-              "name": "perPage",
-              "type": "uint",
-              "required": false,
-              "title": "Returned items per page"
-            }
+            {"type": "uint",   "name": "limit",   "title": "Limit"},
+            {"type": "uint",   "name": "offset",  "title": "Offset"},
+            {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+            {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+            {"type": "string", "name": "sort",    "title": "Sort items"}
           ]
         }
       },
@@ -1158,24 +1132,11 @@
               "title": "Exclude (0, default), include (1) or return only (2) deleted roles",
               "type": "uint"
             },
-            {
-              "name": "page",
-              "type": "uint",
-              "required": false,
-              "title": "Page number"
-            },
-            {
-              "name": "perPage",
-              "type": "uint",
-              "required": false,
-              "title": "Returned items per page (default 50)"
-            },
-            {
-              "name": "sort",
-              "required": false,
-              "title": "Sort",
-              "type": "string"
-            }
+            {"type": "uint",   "name": "limit",   "title": "Limit"},
+            {"type": "uint",   "name": "offset",  "title": "Offset"},
+            {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+            {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+            {"type": "string", "name": "sort",    "title": "Sort items"}
           ]
         }
       },
@@ -1493,24 +1454,11 @@
               "title": "Filter out dismissed reminders",
               "type": "bool"
             },
-            {
-              "name": "page",
-              "type": "uint",
-              "required": false,
-              "title": "Page number"
-            },
-            {
-              "name": "perPage",
-              "type": "uint",
-              "required": false,
-              "title": "Returned items per page (default 50)"
-            },
-            {
-              "name": "sort",
-              "required": false,
-              "title": "Sort",
-              "type": "string"
-            }
+            {"type": "uint",   "name": "limit",   "title": "Limit"},
+            {"type": "uint",   "name": "offset",  "title": "Offset"},
+            {"type": "uint",   "name": "page",    "title": "Page number (1-based)"},
+            {"type": "uint",   "name": "perPage", "title": "Returned items per page (default 50)"},
+            {"type": "string", "name": "sort",    "title": "Sort items"}
           ]
         }
       },
diff --git a/api/system/spec/application.json b/api/system/spec/application.json
index 5e5969ce86b078dc7abf1ca72f952628464b067a..2cea7f28957d1d43f3e392ae11c9f376ef886cec 100644
--- a/api/system/spec/application.json
+++ b/api/system/spec/application.json
@@ -38,22 +38,29 @@
             "title": "Exclude (0, default), include (1) or return only (2) deleted roles",
             "type": "uint"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/system/spec/reminder.json b/api/system/spec/reminder.json
index e860488d8133fcee9f642c0f59a8a0aeebb10301..80bb331995a3100db3fb05c03d54acb90be310da 100644
--- a/api/system/spec/reminder.json
+++ b/api/system/spec/reminder.json
@@ -66,22 +66,29 @@
             "title": "Filter out dismissed reminders",
             "type": "bool"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/system/spec/role.json b/api/system/spec/role.json
index 184690de67934868306c19282c430f954e9dae54..9bcf2cfabc2c66589bbb59d82999474ef2e3406b 100644
--- a/api/system/spec/role.json
+++ b/api/system/spec/role.json
@@ -36,22 +36,29 @@
             "title": "Exclude (0, default), include (1) or return only (2) achived roles",
             "type": "uint"
           },
+          {
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
+          },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
             "title": "Returned items per page (default 50)",
             "type": "uint"
           },
           {
             "name": "sort",
-            "required": false,
-            "title": "Sort",
+            "title": "Sort items",
             "type": "string"
           }
         ]
diff --git a/api/system/spec/user.json b/api/system/spec/user.json
index d5fb741da893851ccc558776a4b2830846b9a771..c39870bf0e4fe94fa2454063c367e2fbf67455a1 100644
--- a/api/system/spec/user.json
+++ b/api/system/spec/user.json
@@ -90,22 +90,29 @@
             "type": "uint"
           },
           {
-            "name": "sort",
-            "required": false,
-            "title": "Sort by (createdAt, updatedAt, deletedAt, suspendedAt, email, username, userID)",
-            "type": "string"
+            "name": "limit",
+            "title": "Limit",
+            "type": "uint"
+          },
+          {
+            "name": "offset",
+            "title": "Offset",
+            "type": "uint"
           },
           {
             "name": "page",
-            "required": false,
-            "title": "Page number",
+            "title": "Page number (1-based)",
             "type": "uint"
           },
           {
             "name": "perPage",
-            "required": false,
-            "title": "Returned items per page",
+            "title": "Returned items per page (default 50)",
             "type": "uint"
+          },
+          {
+            "name": "sort",
+            "title": "Sort items",
+            "type": "string"
           }
         ]
       }
diff --git a/compose/rest/request/attachment.go b/compose/rest/request/attachment.go
index 4ec36bb739a10a8c7a78a2cd883bac6e9397d230..ddc88d5117f71517b29b6b0da1d68c5478af0107 100644
--- a/compose/rest/request/attachment.go
+++ b/compose/rest/request/attachment.go
@@ -48,6 +48,14 @@ type AttachmentList struct {
 	rawFieldName string
 	FieldName    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -86,6 +94,8 @@ func (r AttachmentList) Auditable() map[string]interface{} {
 	out["moduleID"] = r.ModuleID
 	out["recordID"] = r.RecordID
 	out["fieldName"] = r.FieldName
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sign"] = r.Sign
@@ -136,6 +146,12 @@ func (r *AttachmentList) Fill(req *http.Request) (err error) {
 	if val, ok := get["fieldName"]; ok {
 		r.FieldName = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -604,6 +620,36 @@ func (r *AttachmentList) GetFieldName() string {
 	return r.FieldName
 }
 
+// HasLimit returns true if limit was set
+func (r *AttachmentList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *AttachmentList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *AttachmentList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *AttachmentList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *AttachmentList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *AttachmentList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *AttachmentList) HasPage() bool {
 	return r.hasPage
diff --git a/compose/rest/request/chart.go b/compose/rest/request/chart.go
index 2d2cfb170f6e6b2bcbd3c09ed0b0ed8c5f226188..26c96a84e795167e96584038dc26140d77e16c61 100644
--- a/compose/rest/request/chart.go
+++ b/compose/rest/request/chart.go
@@ -43,6 +43,14 @@ type ChartList struct {
 	rawHandle string
 	Handle    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -71,6 +79,8 @@ func (r ChartList) Auditable() map[string]interface{} {
 
 	out["query"] = r.Query
 	out["handle"] = r.Handle
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -113,6 +123,12 @@ func (r *ChartList) Fill(req *http.Request) (err error) {
 	if val, ok := get["handle"]; ok {
 		r.Handle = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -482,6 +498,36 @@ func (r *ChartList) GetHandle() string {
 	return r.Handle
 }
 
+// HasLimit returns true if limit was set
+func (r *ChartList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *ChartList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *ChartList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *ChartList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *ChartList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *ChartList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *ChartList) HasPage() bool {
 	return r.hasPage
diff --git a/compose/rest/request/module.go b/compose/rest/request/module.go
index f91e8d3e116458c72fbbb90006d279619547cce4..b3c5a4fbaa1560919c58aba76ae270b345fc1f07 100644
--- a/compose/rest/request/module.go
+++ b/compose/rest/request/module.go
@@ -48,6 +48,14 @@ type ModuleList struct {
 	rawHandle string
 	Handle    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -77,6 +85,8 @@ func (r ModuleList) Auditable() map[string]interface{} {
 	out["query"] = r.Query
 	out["name"] = r.Name
 	out["handle"] = r.Handle
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -122,6 +132,12 @@ func (r *ModuleList) Fill(req *http.Request) (err error) {
 	if val, ok := get["handle"]; ok {
 		r.Handle = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -590,6 +606,36 @@ func (r *ModuleList) GetHandle() string {
 	return r.Handle
 }
 
+// HasLimit returns true if limit was set
+func (r *ModuleList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *ModuleList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *ModuleList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *ModuleList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *ModuleList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *ModuleList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *ModuleList) HasPage() bool {
 	return r.hasPage
diff --git a/compose/rest/request/namespace.go b/compose/rest/request/namespace.go
index e65bb57a11d29413c27393423d7be737867f3924..1fccde47be5b3059fb0a93825b7166ed4dec65a0 100644
--- a/compose/rest/request/namespace.go
+++ b/compose/rest/request/namespace.go
@@ -43,6 +43,14 @@ type NamespaceList struct {
 	rawSlug string
 	Slug    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -67,6 +75,8 @@ func (r NamespaceList) Auditable() map[string]interface{} {
 
 	out["query"] = r.Query
 	out["slug"] = r.Slug
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -108,6 +118,12 @@ func (r *NamespaceList) Fill(req *http.Request) (err error) {
 	if val, ok := get["slug"]; ok {
 		r.Slug = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -524,6 +540,36 @@ func (r *NamespaceList) GetSlug() string {
 	return r.Slug
 }
 
+// HasLimit returns true if limit was set
+func (r *NamespaceList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *NamespaceList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *NamespaceList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *NamespaceList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *NamespaceList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *NamespaceList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *NamespaceList) HasPage() bool {
 	return r.hasPage
diff --git a/compose/rest/request/page.go b/compose/rest/request/page.go
index 94ae014f7d80458a024d5080ae78af5dd542c21f..92388f78bd7ae5d1babfedba43bec8efdd3b620c 100644
--- a/compose/rest/request/page.go
+++ b/compose/rest/request/page.go
@@ -46,6 +46,14 @@ type PageList struct {
 	rawHandle string
 	Handle    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -75,6 +83,8 @@ func (r PageList) Auditable() map[string]interface{} {
 	out["selfID"] = r.SelfID
 	out["query"] = r.Query
 	out["handle"] = r.Handle
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -120,6 +130,12 @@ func (r *PageList) Fill(req *http.Request) (err error) {
 	if val, ok := get["handle"]; ok {
 		r.Handle = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -849,6 +865,36 @@ func (r *PageList) GetHandle() string {
 	return r.Handle
 }
 
+// HasLimit returns true if limit was set
+func (r *PageList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *PageList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *PageList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *PageList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *PageList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *PageList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *PageList) HasPage() bool {
 	return r.hasPage
diff --git a/compose/rest/request/record.go b/compose/rest/request/record.go
index 7b9e7401ab3562d48abf890b6ea93f3e3372f545..284af52224035282594d4bd3e8e9a86377606e82 100644
--- a/compose/rest/request/record.go
+++ b/compose/rest/request/record.go
@@ -128,6 +128,14 @@ type RecordList struct {
 	rawFilter string
 	Filter    string
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -159,6 +167,8 @@ func (r RecordList) Auditable() map[string]interface{} {
 	var out = map[string]interface{}{}
 
 	out["filter"] = r.Filter
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -199,6 +209,12 @@ func (r *RecordList) Fill(req *http.Request) (err error) {
 	if val, ok := get["filter"]; ok {
 		r.Filter = val
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -1373,6 +1389,36 @@ func (r *RecordList) GetFilter() string {
 	return r.Filter
 }
 
+// HasLimit returns true if limit was set
+func (r *RecordList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *RecordList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *RecordList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *RecordList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *RecordList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *RecordList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *RecordList) HasPage() bool {
 	return r.hasPage
diff --git a/docs/compose/README.md b/docs/compose/README.md
index 9839b13ae28c9210f5bc08d6038fb43e169cb45e..b199f15ab987d40886a8ea38b8f015e8f969e63e 100644
--- a/docs/compose/README.md
+++ b/docs/compose/README.md
@@ -24,7 +24,9 @@
 | moduleID | uint64 | GET | Filter attachments by module ID | N/A | NO |
 | recordID | uint64 | GET | Filter attachments by record ID | N/A | NO |
 | fieldName | string | GET | Filter attachments by field name | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
 | sign | string | GET | Signature | N/A | NO |
 | userID | uint64 | GET | User ID | N/A | NO |
@@ -203,9 +205,11 @@ Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.cru
 | --------- | ---- | ------ | ----------- | ------- | --------- |
 | query | string | GET | Search query to match against charts | N/A | NO |
 | handle | string | GET | Search charts by handle | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort charts | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 | namespaceID | uint64 | PATH | Namespace ID | N/A | YES |
 
 ## List/read charts
@@ -307,9 +311,11 @@ Compose module definitions
 | query | string | GET | Search query | N/A | NO |
 | name | string | GET | Search by name | N/A | NO |
 | handle | string | GET | Search by handle | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 | namespaceID | uint64 | PATH | Namespace ID | N/A | YES |
 
 ## Create module
@@ -426,9 +432,11 @@ Compose module definitions
 | --------- | ---- | ------ | ----------- | ------- | --------- |
 | query | string | GET | Search query | N/A | NO |
 | slug | string | GET | Search by namespace slug | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort namespaces | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 
 ## Create namespace
 
@@ -577,9 +585,11 @@ Compose pages
 | selfID | uint64 | GET | Parent page ID | N/A | NO |
 | query | string | GET | Search query | N/A | NO |
 | handle | string | GET | Search by handle | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 | namespaceID | uint64 | PATH | Namespace ID | N/A | YES |
 
 ## Create page
@@ -861,9 +871,11 @@ Compose records
 | Parameter | Type | Method | Description | Default | Required? |
 | --------- | ---- | ------ | ----------- | ------- | --------- |
 | filter | string | GET | Filtering condition | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort field (default id desc) | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 | namespaceID | uint64 | PATH | Namespace ID | N/A | YES |
 | moduleID | uint64 | PATH | Module ID | N/A | YES |
 
diff --git a/docs/system/README.md b/docs/system/README.md
index 6124364b0cb8a590ef48f7d1eb77eb8ca2b74838..f42f7aabb3956a8583467858ce5c69977ede7af0 100644
--- a/docs/system/README.md
+++ b/docs/system/README.md
@@ -25,9 +25,11 @@
 | name | string | GET | Application name | N/A | NO |
 | query | string | GET | Filter applications | N/A | NO |
 | deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted roles | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 
 ## Create application
 
@@ -602,9 +604,11 @@ Organisations represent a top-level grouping entity. There may be many organisat
 | scheduledUntil | *time.Time | GET | Only reminders up to this time (included) | N/A | NO |
 | scheduledOnly | bool | GET | Only scheduled reminders | N/A | NO |
 | excludeDismissed | bool | GET | Filter out dismissed reminders | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 
 ## Add new reminder
 
@@ -739,9 +743,11 @@ An organisation may have many roles. Roles may have many channels available. Acc
 | query | string | GET | Search query | N/A | NO |
 | deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted roles | N/A | NO |
 | archived | uint | GET | Exclude (0, default), include (1) or return only (2) achived roles | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
 | perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
-| sort | string | GET | Sort | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 
 ## Update role details
 
@@ -1101,9 +1107,11 @@ Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.cru
 | incSuspended | bool | GET | [Deprecated] Include suspended users | N/A | NO |
 | deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted users | N/A | NO |
 | suspended | uint | GET | Exclude (0, default), include (1) or return only (2) suspended users | N/A | NO |
-| sort | string | GET | Sort by (createdAt, updatedAt, deletedAt, suspendedAt, email, username, userID) | N/A | NO |
-| page | uint | GET | Page number | N/A | NO |
-| perPage | uint | GET | Returned items per page | N/A | NO |
+| limit | uint | GET | Limit | N/A | NO |
+| offset | uint | GET | Offset | N/A | NO |
+| page | uint | GET | Page number (1-based) | N/A | NO |
+| perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
+| sort | string | GET | Sort items | N/A | NO |
 
 ## Create user
 
diff --git a/system/rest/request/application.go b/system/rest/request/application.go
index 6ee1462bf4396d14043c5fe7dba15a11e5e4b7b0..072ba51af04d39a8c5b8b512a138080324b7097a 100644
--- a/system/rest/request/application.go
+++ b/system/rest/request/application.go
@@ -46,6 +46,14 @@ type ApplicationList struct {
 	rawDeleted string
 	Deleted    uint
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -71,6 +79,8 @@ func (r ApplicationList) Auditable() map[string]interface{} {
 	out["name"] = r.Name
 	out["query"] = r.Query
 	out["deleted"] = r.Deleted
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -115,6 +125,12 @@ func (r *ApplicationList) Fill(req *http.Request) (err error) {
 	if val, ok := get["deleted"]; ok {
 		r.Deleted = parseUint(val)
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -599,6 +615,36 @@ func (r *ApplicationList) GetDeleted() uint {
 	return r.Deleted
 }
 
+// HasLimit returns true if limit was set
+func (r *ApplicationList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *ApplicationList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *ApplicationList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *ApplicationList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *ApplicationList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *ApplicationList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *ApplicationList) HasPage() bool {
 	return r.hasPage
diff --git a/system/rest/request/reminder.go b/system/rest/request/reminder.go
index 92732dc2bdaa15e87721f710fb9390da2afecd91..bf1977239304e248f1da7072e10b05b71605dfee 100644
--- a/system/rest/request/reminder.go
+++ b/system/rest/request/reminder.go
@@ -63,6 +63,14 @@ type ReminderList struct {
 	rawExcludeDismissed string
 	ExcludeDismissed    bool
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -92,6 +100,8 @@ func (r ReminderList) Auditable() map[string]interface{} {
 	out["scheduledUntil"] = r.ScheduledUntil
 	out["scheduledOnly"] = r.ScheduledOnly
 	out["excludeDismissed"] = r.ExcludeDismissed
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -161,6 +171,12 @@ func (r *ReminderList) Fill(req *http.Request) (err error) {
 	if val, ok := get["excludeDismissed"]; ok {
 		r.ExcludeDismissed = parseBool(val)
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -708,6 +724,36 @@ func (r *ReminderList) GetExcludeDismissed() bool {
 	return r.ExcludeDismissed
 }
 
+// HasLimit returns true if limit was set
+func (r *ReminderList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *ReminderList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *ReminderList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *ReminderList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *ReminderList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *ReminderList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *ReminderList) HasPage() bool {
 	return r.hasPage
diff --git a/system/rest/request/role.go b/system/rest/request/role.go
index 8933fba5bcdaecdd66c5a342a7701c3adb667d23..a16cbcd011b91a52f35ef98c550ce94ac6523ec5 100644
--- a/system/rest/request/role.go
+++ b/system/rest/request/role.go
@@ -44,6 +44,14 @@ type RoleList struct {
 	rawArchived string
 	Archived    uint
 
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
+
 	hasPage bool
 	rawPage string
 	Page    uint
@@ -69,6 +77,8 @@ func (r RoleList) Auditable() map[string]interface{} {
 	out["query"] = r.Query
 	out["deleted"] = r.Deleted
 	out["archived"] = r.Archived
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
 	out["sort"] = r.Sort
@@ -113,6 +123,12 @@ func (r *RoleList) Fill(req *http.Request) (err error) {
 	if val, ok := get["archived"]; ok {
 		r.Archived = parseUint(val)
 	}
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
+	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
 	}
@@ -1013,6 +1029,36 @@ func (r *RoleList) GetArchived() uint {
 	return r.Archived
 }
 
+// HasLimit returns true if limit was set
+func (r *RoleList) HasLimit() bool {
+	return r.hasLimit
+}
+
+// RawLimit returns raw value of limit parameter
+func (r *RoleList) RawLimit() string {
+	return r.rawLimit
+}
+
+// GetLimit returns casted value of  limit parameter
+func (r *RoleList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *RoleList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *RoleList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *RoleList) GetOffset() uint {
+	return r.Offset
+}
+
 // HasPage returns true if page was set
 func (r *RoleList) HasPage() bool {
 	return r.hasPage
diff --git a/system/rest/request/user.go b/system/rest/request/user.go
index ee8c66257982fa3a0d7dd93fccc35cc265cdf83a..3a919fa4908dce04cc7fc633a2ee2239b37387ff 100644
--- a/system/rest/request/user.go
+++ b/system/rest/request/user.go
@@ -78,9 +78,13 @@ type UserList struct {
 	rawSuspended string
 	Suspended    uint
 
-	hasSort bool
-	rawSort string
-	Sort    string
+	hasLimit bool
+	rawLimit string
+	Limit    uint
+
+	hasOffset bool
+	rawOffset string
+	Offset    uint
 
 	hasPage bool
 	rawPage string
@@ -89,6 +93,10 @@ type UserList struct {
 	hasPerPage bool
 	rawPerPage string
 	PerPage    uint
+
+	hasSort bool
+	rawSort string
+	Sort    string
 }
 
 // NewUserList request
@@ -111,9 +119,11 @@ func (r UserList) Auditable() map[string]interface{} {
 	out["incSuspended"] = r.IncSuspended
 	out["deleted"] = r.Deleted
 	out["suspended"] = r.Suspended
-	out["sort"] = r.Sort
+	out["limit"] = r.Limit
+	out["offset"] = r.Offset
 	out["page"] = r.Page
 	out["perPage"] = r.PerPage
+	out["sort"] = r.Sort
 
 	return out
 }
@@ -193,8 +203,11 @@ func (r *UserList) Fill(req *http.Request) (err error) {
 	if val, ok := get["suspended"]; ok {
 		r.Suspended = parseUint(val)
 	}
-	if val, ok := get["sort"]; ok {
-		r.Sort = val
+	if val, ok := get["limit"]; ok {
+		r.Limit = parseUint(val)
+	}
+	if val, ok := get["offset"]; ok {
+		r.Offset = parseUint(val)
 	}
 	if val, ok := get["page"]; ok {
 		r.Page = parseUint(val)
@@ -202,6 +215,9 @@ func (r *UserList) Fill(req *http.Request) (err error) {
 	if val, ok := get["perPage"]; ok {
 		r.PerPage = parseUint(val)
 	}
+	if val, ok := get["sort"]; ok {
+		r.Sort = val
+	}
 
 	return err
 }
@@ -1157,19 +1173,34 @@ func (r *UserList) GetSuspended() uint {
 	return r.Suspended
 }
 
-// HasSort returns true if sort was set
-func (r *UserList) HasSort() bool {
-	return r.hasSort
+// HasLimit returns true if limit was set
+func (r *UserList) HasLimit() bool {
+	return r.hasLimit
 }
 
-// RawSort returns raw value of sort parameter
-func (r *UserList) RawSort() string {
-	return r.rawSort
+// RawLimit returns raw value of limit parameter
+func (r *UserList) RawLimit() string {
+	return r.rawLimit
 }
 
-// GetSort returns casted value of  sort parameter
-func (r *UserList) GetSort() string {
-	return r.Sort
+// GetLimit returns casted value of  limit parameter
+func (r *UserList) GetLimit() uint {
+	return r.Limit
+}
+
+// HasOffset returns true if offset was set
+func (r *UserList) HasOffset() bool {
+	return r.hasOffset
+}
+
+// RawOffset returns raw value of offset parameter
+func (r *UserList) RawOffset() string {
+	return r.rawOffset
+}
+
+// GetOffset returns casted value of  offset parameter
+func (r *UserList) GetOffset() uint {
+	return r.Offset
 }
 
 // HasPage returns true if page was set
@@ -1202,6 +1233,21 @@ func (r *UserList) GetPerPage() uint {
 	return r.PerPage
 }
 
+// HasSort returns true if sort was set
+func (r *UserList) HasSort() bool {
+	return r.hasSort
+}
+
+// RawSort returns raw value of sort parameter
+func (r *UserList) RawSort() string {
+	return r.rawSort
+}
+
+// GetSort returns casted value of  sort parameter
+func (r *UserList) GetSort() string {
+	return r.Sort
+}
+
 // HasEmail returns true if email was set
 func (r *UserCreate) HasEmail() bool {
 	return r.hasEmail