Budibase/budibase · warning · HTTPError
Invalid limit query
Error message
Invalid limit query
What it means
sanitizeLimitQuery rejects a limit query parameter that is not a pure digit string with HTTPError 400 "Invalid limit query". The limit controls page size for agent logs and must be a positive integer.
Source
Thrown at packages/server/src/api/controllers/ai/agentLogs.ts:48
throw new HTTPError("Invalid bookmark query", 400)
}
const parsedBookmark = Number.parseInt(normalizedBookmark, 10)
if (!Number.isFinite(parsedBookmark) || parsedBookmark < 1) {
throw new HTTPError("Invalid bookmark query", 400)
}
return String(parsedBookmark)
}
function sanitizeLimitQuery(limit?: string): number | undefined {
const normalizedLimit = limit?.trim()
if (!normalizedLimit) {
return undefined
}
if (!/^\d+$/.test(normalizedLimit)) {
throw new HTTPError("Invalid limit query", 400)
}
const parsedLimit = Number.parseInt(normalizedLimit, 10)
if (parsedLimit < 1 || parsedLimit > 100) {
throw new HTTPError("Limit query must be between 1 and 100", 400)
}
return parsedLimit
}
function sanitizeDateQuery(
value: string | undefined,
queryName: "startDate" | "endDate"
): string | undefined {
const normalizedValue = value?.trim()
if (!normalizedValue) {
return undefined
}View on GitHub (pinned to a81a902e9a)
Solutions
- Send limit as a plain integer string (e.g. limit=50)
- Coerce client-side number formatting to plain digits
- Omit limit to use the default
Example fix
// before
fetch("/api/ai/agent/logs?limit=1.5")
// after
fetch("/api/ai/agent/logs?limit=50") Defensive patterns
Strategy: validation
Validate before calling
const limit = rawLimit?.trim(); if (limit && !/^\d+$/.test(limit)) throw new Error("limit must be a plain integer") Type guard
const isValidLimit = (v: unknown): v is string => typeof v === "string" && /^\d+$/.test(v.trim())
Try / catch
try { await api.fetchAgentLogs({ limit }) } catch (e) { if (e.status === 400 && e.message === "Invalid limit query") { /* send integer or omit */ } else throw e } Prevention
- Serialize limits with String(parseInt(x, 10))
- Avoid locale-aware number formatting in query params
- Omit limit to use the server default
When it happens
Trigger: GET agent logs with ?limit=ten, ?limit=1.5, ?limit=-5 or other non-plain-digit strings.
Common situations: Client formatting numbers with separators; passing floats; buggy serialization of numeric params.
Related errors
- Invalid bookmark query
- Limit query must be between 1 and 100
- Invalid limit query
- Limit query must be between 1 and 100
- Invalid page query
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/d924d3a10c3ba033.
Report an issue: GitHub.