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

  1. Send limit as a plain integer string (e.g. limit=50)
  2. Coerce client-side number formatting to plain digits
  3. 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

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


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/d924d3a10c3ba033. Report an issue: GitHub.