Budibase/budibase · error · HTTPError
Automations cannot have more than ${MAX_STICKY_NOTES_PER_AUT
Error message
Automations cannot have more than ${MAX_STICKY_NOTES_PER_AUTOMATION} sticky notes What it means
Automations support UI sticky notes, capped at MAX_STICKY_NOTES_PER_AUTOMATION. validateStickyNoteLimit runs on both create and update and throws this 400 HTTPError when automation.uiTree.stickyNotes exceeds the limit.
Source
Thrown at packages/server/src/sdk/workspace/automations/crud.ts:322
const readonlyField = key as keyof typeof step.inputs
const oldStep = oldStepDefinitions.find(i => i.id === step.id)
if (step.inputs[readonlyField] !== oldStep?.inputs[readonlyField]) {
throw new HTTPError(
`Field ${readonlyField} is readonly and it cannot be modified`,
400
)
}
})
}
}
function validateStickyNoteLimit(automation: Automation) {
const stickyNotes = automation.uiTree?.stickyNotes
if (
Array.isArray(stickyNotes) &&
stickyNotes.length > MAX_STICKY_NOTES_PER_AUTOMATION
) {
throw new HTTPError(
`Automations cannot have more than ${MAX_STICKY_NOTES_PER_AUTOMATION} sticky notes`,
400
)
}
}
function trimUnexpectedObjectFields<T extends Automation>(automation: T): T {
// This will ensure all the automation fields (and nothing else) is mapped to the result
const allRequired: RequiredKeys<Omit<Automation, "_deleted">> = {
_id: automation._id,
_rev: automation._rev,
definition: automation.definition,
screenId: automation.screenId,
uiTree: automation.uiTree,
appId: automation.appId,
live: automation.live,
projectIds: automation.projectIds,
name: automation.name,View on GitHub (pinned to a81a902e9a)
Solutions
- Remove sticky notes until the count is at or below MAX_STICKY_NOTES_PER_AUTOMATION and retry.
- Consolidate overlapping notes into fewer notes before saving.
- If importing, strip or trim the stickyNotes array from the imported JSON.
Example fix
// before automation.uiTree.stickyNotes = [...manyNotes] // > limit await update(automation) // after automation.uiTree.stickyNotes = automation.uiTree.stickyNotes.slice(0, MAX_STICKY_NOTES_PER_AUTOMATION) await update(automation)
Defensive patterns
Strategy: validation
Validate before calling
const MAX = MAX_STICKY_NOTES_PER_AUTOMATION
if (Array.isArray(automation.uiTree?.stickyNotes) && automation.uiTree.stickyNotes.length > MAX) {
automation.uiTree.stickyNotes = automation.uiTree.stickyNotes.slice(0, MAX)
}
await sdk.automations.update(automation) Try / catch
try {
await sdk.automations.update(automation)
} catch (e) {
if (e instanceof HTTPError && e.status === 400 && e.message.includes("sticky notes")) {
// trim stickyNotes and retry / inform the user of the cap
}
throw e
} Prevention
- Cap sticky note creation in the UI at MAX_STICKY_NOTES_PER_AUTOMATION
- Trim stickyNotes when importing/copying automations
- Consolidate notes before hitting the cap
When it happens
Trigger: Creating or updating an automation whose uiTree.stickyNotes array length is greater than MAX_STICKY_NOTES_PER_AUTOMATION.
Common situations: Bulk import/paste of an automation JSON with many notes; automation copy/duplicate accumulating notes; older clients without the limit create oversized canvases that now fail to save.
Related errors
- _id or _rev fields missing
- Field ${readonlyField} is readonly and it cannot be modified
- IMAP password is required
- automationId and appId are required
- Import data or url is required
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/1a8afa19ff1d51e6.
Report an issue: GitHub.