{"record":{"id":"68a072ebe7f28d2c","repo":"flarum/framework","slug":"page-number-must-be-at-least-1","errorCode":null,"errorMessage":"page[number] must be at least 1","messagePattern":"page\\[number\\] must be at least 1","errorType":"http","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"framework/core/src/Http/RequestUtil.php","lineNumber":182,"sourceCode":"        }\n\n        if ($max !== null) {\n            $limit = min($limit, $max);\n        }\n\n        if ($limit < 1) {\n            throw new BadRequestException('page[limit] must be at least 1');\n        }\n\n        return $limit;\n    }\n\n    public static function extractOffsetFromNumber(Request $request, int $limit): int\n    {\n        $page = (int) ($request->getQueryParams()['page']['number'] ?? 1);\n\n        if ($page < 1) {\n            throw new BadRequestException('page[number] must be at least 1');\n        }\n\n        return ($page - 1) * $limit;\n    }\n\n    public static function extractOffset(Request $request, ?int $limit = 0): int\n    {\n        if ($request->getQueryParams()['page']['number'] ?? false) {\n            return self::extractOffsetFromNumber($request, $limit);\n        }\n\n        $offset = (int) ($request->getQueryParams()['page']['offset'] ?? 0);\n\n        if ($offset < 0) {\n            throw new BadRequestException('page[offset] must be at least 0');\n        }\n\n        return $offset;","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/flarum/framework/blob/4b939f685389bfe8a380e9e28ddf305a1c66950c/framework/core/src/Http/RequestUtil.php#L164-L200","documentation":"Guard in RequestUtil::extractOffsetFromNumber: when the client paginates with page[number], the page must be >= 1 (pages are 1-indexed). A page[number] of 0 or negative cannot be converted to an offset, so a 400 BadRequestException is thrown.","triggerScenarios":"Thrown at framework/core/src/Http/RequestUtil.php:182 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use page[number] >= 1 (the first page is 1, not 0)","Or paginate by page[offset] >= 0 instead","Fix off-by-one client pagination logic that starts at page 0"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4b939f685389bfe8a380e9e28ddf305a1c66950c","analyzedAt":"2026-09-15T18:09:20.879Z","contentChangedAt":"2026-09-15T18:09:20.879Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}