Budibase/budibase · error · Error
Automation is disabled
Error message
Automation is disabled
What it means
`externalTrigger` is the entry point for API/webhook-initiated automation runs. Before doing anything it checks `automation.disabled`; if the automation has been disabled in the builder (or programmatically), it refuses to run and throws 'Automation is disabled'. This prevents external callers from firing automations that an admin explicitly turned off.
Source
Thrown at packages/server/src/automations/triggers.ts:216
}
export async function externalTrigger(
automation: Automation,
params: AutomationTriggerParams,
options: ExternalTriggerOptions & { getResponses: true }
): Promise<AutomationResults | DidNotTriggerResponse>
export async function externalTrigger(
automation: Automation,
params: AutomationTriggerParams,
options?: ExternalTriggerOptions & { getResponses?: false }
): Promise<AutomationJob | DidNotTriggerResponse>
export async function externalTrigger(
automation: Automation,
params: AutomationTriggerParams,
{ getResponses, onProgress, isTestRun }: ExternalTriggerOptions = {}
): Promise<AutomationResults | DidNotTriggerResponse | AutomationJob> {
if (automation.disabled) {
throw new Error("Automation is disabled")
}
const workspaceId = params.appId || context.getWorkspaceId()
const isDevRun = workspaceId ? isDevWorkspaceID(workspaceId) : false
const shouldRunAsTest = Boolean(isTestRun || isDevRun)
if (
sdk.automations.isAppAction(automation) &&
!isTestRun &&
!(await checkTestFlag(automation._id!))
) {
if (params.fields == null) {
params.fields = {}
}
// values are likely to be submitted as strings, so we shall convert to correct type
const coercedFields: any = {}
const triggerInputs = automation.definition.trigger.inputs || {}View on GitHub (pinned to a81a902e9a)
Solutions
- Re-enable the automation in the builder (toggle the automation's enabled/disabled state).
- Check via the API that automation.disabled is false before calling the trigger endpoint.
- Remove or update the external caller so it no longer invokes the disabled automation's webhook.
Example fix
// before: curl -X POST https://app.budi.live/api/automations/<id>/trigger
// after (in app code): if (automation.disabled) return; await api.post(`/automations/${id}/trigger`, params) Defensive patterns
Strategy: try-catch
Validate before calling
// GET the automation first and check enabled state
const auto = await api.get(`/automations/${id}`)
if (auto.data.disabled) throw new Error(`Automation ${id} is disabled; re-enable before triggering`) Try / catch
try {
return await api.post(`/automations/${id}/trigger`, params)
} catch (err) {
if (err.message === "Automation is disabled") {
// alert admin / skip pipeline instead of failing hard
return { skipped: true, reason: "automation-disabled" }
}
throw err
} Prevention
- Check automation.disabled via the API before wiring external callers.
- Remove webhook URLs of automations you disable.
- Audit external integrations (Zapier/cron jobs) after disabling automations.
When it happens
Trigger: POSTing to the automation trigger/webhook endpoint (/automations/{id}/trigger or a webhook URL) for an automation whose `disabled` flag is true; hitting a webhook whose backing automation was disabled after the webhook was created.
Common situations: An admin disabled a misbehaving automation but an external system (Zapier, cron, another app) still calls its webhook URL; importing an app export where the automation was disabled at export time; test scripts replaying recorded triggers against a disabled automation.
Related errors
- No trigger found for automation
- Automation trigger is not an email trigger
- Automation not found
- Invalid automation CRON "${cronExp}" - ${validation.err.join
- Provided webhook ID is not valid.
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/d49c1e43d2053db7.
Report an issue: GitHub.