Budibase/budibase · warning · HTTPError
Config id not found
Error message
Config id not found
What it means
Thrown by createLLM when the configId argument is falsy (empty string, undefined, null). An AI config id is mandatory to resolve which LLM provider/model to use, so calls without one are rejected immediately with HTTPError 422 before any lookup.
Source
Thrown at packages/server/src/sdk/workspace/ai/llm/index.ts:20
import { quotas } from "@budibase/pro"
import { BUDIBASE_AI_PROVIDER_ID, LLMResponse } from "@budibase/types"
import tracer from "dd-trace"
import sdk from "../../.."
import { createBBAIClient } from "./bbai"
import { createLiteLLMOpenAI } from "./litellm"
export * as bbai from "./bbai"
export * from "./utils"
export * from "./messages"
export async function createLLM(
configId: string,
sessionId?: string,
span?: tracer.Span,
agentId?: string
): Promise<LLMResponse> {
if (!configId) {
throw new HTTPError("Config id not found", 422)
}
const aiConfig = await sdk.ai.configs.find(configId)
if (!aiConfig) {
throw new HTTPError(`Config id "${configId}" not found`, 422)
}
if (aiConfig.provider === BUDIBASE_AI_PROVIDER_ID) {
await quotas.throwIfBudibaseAICreditsExceeded()
}
if (aiConfig.provider === BUDIBASE_AI_PROVIDER_ID && !env.SELF_HOSTED) {
return createBBAIClient(
aiConfig.model,
sessionId,
span,
aiConfig.reasoningEffort,
agentId
)View on GitHub (pinned to a81a902e9a)
Solutions
- Verify the AI config exists in the workspace and copy its id into the call
- Fix the caller (automation step, API request) to pass a non-empty configId
- If the config was deleted, recreate it and update references
- Add validation at the entry point of your integration to reject empty config ids early
Example fix
// before
await llm({ configId: options.configId })
// after
if (!options.configId) {
throw new HTTPError("configId is required", 422)
}
await llm({ configId: options.configId }) Defensive patterns
Strategy: validation
Validate before calling
function requireConfigId(id: string | undefined): string {
if (!id) throw new HTTPError("AI configId is required", 422)
return id
}
await createLLM(requireConfigId(options.configId), sessionId) Try / catch
try {
await createLLM(configId, sessionId)
} catch (e) {
if (e instanceof HTTPError && e.message === "Config id not found") {
return { error: "No AI configuration was provided — select an AI config" }
}
throw e
} Prevention
- Validate that AI config variables are filled before saving automations
- Use config lookups by name at call time instead of hardcoding ids
- Add required-field checks in API request schemas for configId
When it happens
Trigger: Calling createLLM (directly or via chat/agent helpers) with a configId parameter that is empty or undefined — e.g. an AI config variable that was never set, a deleted config referenced by id, or a caller passing an unset options field.
Common situations: Automations or apps referencing an AI configuration that was deleted; environment/app variables for AI config ids left blank; API integrations omitting the configId field in the request body.
Understand the failure class
Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.
Related errors
- Import data or url is required
- Unsupported import type
- Unsupported AI config type: ${model.configType}
- Config id "${configId}" not found
- Slack app configuration token is required
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/1292c41c81cb222b.
Report an issue: GitHub.