n8vDocs

Automations API

List, change, pause, run and fix your scheduled and triggered tasks from an assistant or a script, over REST and MCP

Your automations can be managed outside the app: from a conversation with Claude or ChatGPT connected to n8v, or from your own scripts with an API key. List them, read one in full, see why its runs failed, create one, change its prompt, model or schedule, pause and resume it, run it now and delete it.

Every answer says whether the automation's model can still run. An automation whose model was turned off, or that its provider stopped serving, carries a warning in plain words, so an assistant can find it and fix it in the same conversation.

Automations over the API and MCP are on by default. They need the API or the MCP server, which are in early access and may not be enabled for your account yet.

Access

Two scopes, for API keys and connected assistants alike:

ScopeAllows
automations:readEvery automation's prompt, schedule, model and repository, and its runs, with why a run failed
automations:writeCreate, change, pause, resume, run now and delete. A run starts an agent, and spends like any other one

automations:write does not include reading: a key that should find an automation and then change it needs both.

  • An API key: in Settings, API, click Create key and tick the scopes under Automations. The key's repositories bound what it sees and changes.
  • An assistant: connect Claude or ChatGPT as in MCP Setup and approve See your automations and Manage your automations. An API key with these scopes works as the bearer token for https://n8v.online/mcp too.

An assistant connected before this release keeps the access it was given then, without automations. Connect it again from the assistant (or authorize it again) to add them. Settings, API, AI assistants says so under each app that lacks them: Connect it again from Claude to let it manage your automations.

Calls and tools

CallScopeDoes
GET /api/v1/automationsautomations:readEvery automation, with enabled, repo, query
POST /api/v1/automationsautomations:writeCreate one
GET /api/v1/automations/{id}automations:readRead one
PATCH /api/v1/automations/{id}automations:writeChange it: only the fields sent
DELETE /api/v1/automations/{id}automations:writeDelete it; the chats it started stay
POST /api/v1/automations/{id}/pauseautomations:writePause it
POST /api/v1/automations/{id}/resumeautomations:writeResume it at its next time
POST /api/v1/automations/{id}/runautomations:writeRun it once now, like Run now in the app
GET /api/v1/automations/{id}/runsautomations:readIts runs, newest first, with why each failed
ToolScopeDoes
list_automationsautomations:readEvery automation: when it runs, its model and repository, on or paused, how its last run ended, and a warning when its model cannot run. query and enabled filter
read_automationautomations:readOne automation in full: its prompt, schedule, model and whether it can run, the follow-up and the last run
list_automation_runsautomations:readIts runs, newest first: each run's chat, status and, when it failed, why. limit and cursor page
create_automationautomations:writeA new automation, with the fields of POST /automations
update_automationautomations:writeautomation_id and the fields to change, as PATCH /automations/{id}
pause_automationautomations:writepaused: true pauses, paused: false resumes
run_automationautomations:writeOne run now. Returns the chat, which read_chat and wait_for_reply follow
delete_automationautomations:writeDeletes it for good; the chats it started stay

The tools answer in a few lines an assistant reads first, with the full object alongside. The reading tools are marked read-only and delete_automation as destructive, so assistants that honour these marks ask before they delete. A refusal arrives as a tool error with the same code and message as the API.

The automation object

Every call that answers with an automation answers with this shape (shortened here):

{
  "automation": {
    "id": "9fad8d64-e794-460e-8074-62e6456ba8a1",
    "name": "Weekly review",
    "description": null,
    "enabled": true,
    "url": "https://n8v.online/automations/9fad8d64-e794-460e-8074-62e6456ba8a1",
    "trigger": "schedule",
    "schedule": {
      "cron": "0 2 * * 5",
      "timezone": "Europe/Lisbon",
      "frequency": "weekly",
      "time": "02:00",
      "days": ["fri"],
      "description": "At 02:00 AM, only on Friday (Europe/Lisbon)",
      "next_run_at": "2026-11-13T02:00:00.000Z"
    },
    "github": null,
    "webhook": null,
    "action": "prompt",
    "prompt": "Review last week's merged pull requests and list what was left behind",
    "model": {
      "id": "gpt-5.5-xhigh",
      "name": "GPT-5.5 X-High",
      "status": "refused",
      "message": "The last run (2026-11-06) was refused for GPT-5.5 X-High: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account."
    },
    "repo": "owner/name",
    "branch": "main",
    "new_chat_each_run": true,
    "follow_up": null,
    "archive_runs": false,
    "skip_setup": false,
    "checkpoints": true,
    "run_count": 32,
    "last_run_at": "2026-11-06T02:00:42.000Z",
    "next_run_at": "2026-11-13T02:00:00.000Z",
    "last_run": {
      "chat_id": "40fb1421-6b1e-4f43-9d0a-1f0d8c0b2a77",
      "status": "complete",
      "at": "2026-11-06T02:00:42.000Z",
      "error": {
        "code": "agent_generic_error",
        "message": "The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.",
        "model_refused": true
      }
    },
    "warnings": [
      "The last run (2026-11-06) was refused for GPT-5.5 X-High: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account."
    ]
  }
}
FieldDescription
id, urlThe automation's id, and its page in the app
name, descriptionUp to 200 and 2,000 characters. description may be null
enabledfalse while paused
triggerschedule, manual, pull_request, issue, github_mention or webhook
scheduleWhen a schedule automation runs, see Schedule. null for other triggers
githubWhich GitHub events and authors start a run, see GitHub triggers. null for other triggers
webhook{"allow_branch_override": true} when callers may choose the branch. null for other triggers
actionprompt, or workflow_graph for an automation that starts a Workflow Graph (with workflow_graph_id)
promptWhat the agent is asked on every run, as plain text, up to 50,000 characters. null for a workflow graph
modelThe model and whether it can still run, see Model health
repo, branchThe repository, and the base branch each run starts from
new_chat_each_runAlways true: every run starts a chat of its own. To continue that chat, use follow_up
follow_upThe app's Recurring follow-up, see Follow-up in the same chat. null when off
archive_runsEach run's chat starts in the archive (Create task in archive in the app)
skip_setupEach run skips the repository's setup script
checkpointsGit checkpoints of the agent's work. On by default
run_count, last_run_atHow many times it ran, and when last
next_run_atWhen it runs next, for a schedule; otherwise null
last_runIts latest run, in the shape of List runs, or null
warningsWhat to act on first, in words: empty when nothing is wrong
created_at, updated_atISO 8601 times

Schedule

A schedule takes a timezone (IANA, such as Europe/Amsterdam) and either cron or the fields of the app's schedule picker, never both:

FieldDescription
cronFive fields: minute, hour, day of month, month, day of week. "0 2 * * 5" runs on Fridays at 02:00
frequencyhourly, every_n_minutes, daily, weekdays, weekly or monthly
timeHH:MM, 24-hour, in the schedule's timezone. For hourly, only its minute counts
timesSeveral times a day instead of time, up to 8, all on the same minute: ["09:00", "17:00"]
daysFor weekly: sun, mon, tue, wed, thu, fri, sat. Several days run on each of them
day_of_monthFor monthly: 1 to 31
every_minutesFor every_n_minutes: 10, 15, 20 or 30
{ "timezone": "Europe/Amsterdam", "frequency": "weekly", "time": "09:00", "days": ["mon", "thu"] }

Answers give both forms, whichever was sent: cron, the picker's fields, the schedule in words as description, and next_run_at. The plan's schedule rules apply as in the app: a schedule it does not allow answers 422 automation_refused with the reason. On PATCH, schedule replaces the schedule; leave out timezone to keep the current one.

Model health

model says which model runs and whether it still can:

FieldDescription
idThe model's id, as in GET /api/v1/models. null runs your default model at each run
nameThe model's name in the apps, or null with the default
statusok, unavailable or refused
messageWhy, in one sentence, when status is not ok. The same sentence is in warnings
statusWhenmessage, for example
okThe model can run, and the latest run was not refused for itnull
unavailablen8v would refuse it at the start of the next run: its rollout flag is off for the account, n8v does not know the id, or it needs a ChatGPT sign-in that is not connectedGPT-5.5 X-High needs a connected ChatGPT subscription.
refusedn8v lets it run, but the latest run was refused for this same model, by n8v or by the providerThe last run (2026-11-06) was refused for GPT-5.5 X-High: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.

A refusal counts only while the model is the one the run asked for: change the model and the warning goes, even before the next run.

Writes check the model before they save. Creating or changing an automation with a model the account cannot run, and running one now, answers 422 model_unavailable, with a hint that points to the models you can use. Leaving out model on create runs your default model, which must be one the account can run today. A refused model is not blocked: the provider may serve it again, so the automation keeps it until you change it. Running one now still starts it, and the answer's warnings says it was refused last time.

In the app, an automation whose model cannot run reads Model cannot run on its card, and its page says why, with the same words.

Follow-up in the same chat

Each run starts a new chat. follow_up continues that chat after the run, like Recurring follow-up in the app:

FieldDescription
messageRequired. What to send into the chat, up to 20,000 characters
whenRequired. on_complete: each time the agent finishes. schedule: on its own schedule
scheduleFor schedule: a schedule. Its timezone defaults to the automation's
max_runsStop after this many follow-ups, 1 to 10,000. null for no limit
ends_atStop at this time, ISO 8601 with an offset, in the future. null for no end
retry_on_erroron_complete only: also continue after a run that failed. Stops after three failures in a row

Send "follow_up": null to turn it off. A pull request or issue automation with a follow-up needs "auto_archive_on_complete": false in github, as in the app; otherwise the write answers 422 automation_refused.

GitHub triggers

For pull_request, issue and github_mention, github holds the trigger's options. On create, what is left out takes the app's defaults; on PATCH, what is left out stays as it was.

FieldTriggersDescription
on_openpull_request, issueRun when one is opened. Default true
on_updatepull_requestRun when one is updated. Default true
include_draft_prspull_requestInclude draft pull requests. Default false
include_other_authorsall threeAlso run for other people. Default false: only yours
other_authorsall threeThe GitHub usernames to include, up to 50
include_bot_mentionsgithub_mentionAlso run when a bot mentions n8v. Pro plan only
bot_usernamesgithub_mentionThe bots, each ending in [bot], such as sentry-io[bot]
auto_archive_on_completepull_request, issueArchive each run's chat when it completes. Default true

Include only authors and bots you trust: see Security considerations.

Endpoints

Base URL https://n8v.online/api/v1, authentication and errors as in the API.

List automations

GET /api/v1/automations, needs automations:read. Every automation in the key's repositories, up to 200.

QueryDescription
enabledtrue: only those on. false: only those paused
repoOnly this repository, owner/name
queryWords in the name or the repository
curl -sS "https://n8v.online/api/v1/automations?enabled=true" \
  -H "Authorization: Bearer $N8V_API_KEY"
{
  "automations": [
    {
      "id": "9fad8d64-e794-460e-8074-62e6456ba8a1",
      "name": "Weekly review",
      "enabled": true,
      "trigger": "schedule",
      "model": { "id": "gpt-5.5-xhigh", "name": "GPT-5.5 X-High", "status": "refused", "message": "The last run (2026-11-06) was refused for GPT-5.5 X-High: ..." },
      "next_run_at": "2026-11-13T02:00:00.000Z",
      "warnings": ["The last run (2026-11-06) was refused for GPT-5.5 X-High: ..."]
    }
  ]
}

(Shortened: each entry is a full automation object.) To find the ones that need attention, look for a non-empty warnings.

Read an automation

GET /api/v1/automations/{id}, needs automations:read. Answers 200 with {"automation": {...}}.

curl -sS https://n8v.online/api/v1/automations/9fad8d64-e794-460e-8074-62e6456ba8a1 \
  -H "Authorization: Bearer $N8V_API_KEY"

Create an automation

POST /api/v1/automations, needs automations:write. Checked as the app checks it: your plan's limits on active automations and schedules, the repository and branch on GitHub, and the model.

FieldTypeDescription
namestringRequired. Up to 200 characters
promptstringRequired. What the agent is asked on every run, up to 50,000 characters
repostringRequired. owner/name. Must be reachable with your GitHub account, and allowed by the key
branchstringThe base branch each run starts from. Defaults to the repository's default branch
triggerstringschedule, manual, pull_request, issue or github_mention. Defaults to schedule when schedule is sent, otherwise manual
scheduleobjectRequired for schedule. See Schedule
githubobjectFor the GitHub triggers. See GitHub triggers
modelstring, nullA model id. Left out or null: your default model at each run
descriptionstring, nullUp to 2,000 characters
enabledboolDefaults to true
follow_upobject, nullSee Follow-up in the same chat
archive_runsboolStart each run's chat in the archive
skip_setupboolSkip the repository's setup script
checkpointsboolGit checkpoints. Defaults to true

Any other field answers 400 invalid_request, with the field in param.

curl -sS --fail-with-body --retry 3 --retry-max-time 120 \
  -X POST https://n8v.online/api/v1/automations \
  -H "Authorization: Bearer $N8V_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(openssl rand -hex 16)" \
  -d '{
    "name": "Morning triage",
    "repo": "owner/name",
    "prompt": "Triage the issues opened since yesterday and label them",
    "model": "sonnet-5",
    "schedule": {
      "timezone": "Europe/Amsterdam",
      "frequency": "weekdays",
      "time": "08:30"
    }
  }'
{
  "automation": {
    "id": "c2a7e0b4-5d1f-4b9e-8a63-0e4f2d7b9c15",
    "name": "Morning triage",
    "enabled": true,
    "trigger": "schedule",
    "schedule": {
      "cron": "30 8 * * 1-5",
      "timezone": "Europe/Amsterdam",
      "frequency": "weekdays",
      "time": "08:30",
      "description": "At 08:30 AM, Monday through Friday (Europe/Amsterdam)",
      "next_run_at": "2026-11-09T07:30:00.000Z"
    },
    "model": { "id": "sonnet-5", "name": "Sonnet 5", "status": "ok", "message": null },
    "repo": "owner/name",
    "branch": "main",
    "warnings": []
  }
}

Answers 201. Creating a webhook automation stays in the app, see What stays in the app.

Change an automation

PATCH /api/v1/automations/{id}, needs automations:write. Takes the fields of create, all optional, at least one. Only the fields sent change: a new model keeps the prompt, a new schedule time keeps its timezone. Answers 200 with the automation.

curl -sS --fail-with-body -X PATCH \
  https://n8v.online/api/v1/automations/9fad8d64-e794-460e-8074-62e6456ba8a1 \
  -H "Authorization: Bearer $N8V_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "sonnet-5"}'
  • trigger switches between the five triggers above. Moving a webhook automation to another trigger revokes its token, as in the app.
  • repo moves the automation to a repository the key allows; otherwise 403 repo_not_allowed.
  • prompt, model, follow_up and archive_runs belong to a prompt: on an automation that runs a workflow graph they answer 422 invalid_request.

Pause and resume

POST /api/v1/automations/{id}/pause and POST /api/v1/automations/{id}/resume, need automations:write, no body. Answer 200 with the automation. A paused automation does not run. A resumed schedule waits for its next time; it does not run for the times it missed. Pausing one that is paused, or resuming one that is on, changes nothing and answers the same.

curl -sS -X POST https://n8v.online/api/v1/automations/9fad8d64-e794-460e-8074-62e6456ba8a1/pause \
  -H "Authorization: Bearer $N8V_API_KEY"

Run now

POST /api/v1/automations/{id}/run, needs automations:write. Runs the automation once, like Run now in the app. The run starts an agent in a new chat and spends like any other run. Send an Idempotency-Key, so a retry never starts a second run.

FieldTypeDescription
pr_numberintRequired for a pull_request automation: the pull request
issue_numberintRequired for an issue automation: the issue
curl -sS --fail-with-body --retry 3 --retry-max-time 120 \
  -X POST https://n8v.online/api/v1/automations/9fad8d64-e794-460e-8074-62e6456ba8a1/run \
  -H "Authorization: Bearer $N8V_API_KEY" \
  -H "Idempotency-Key: $(openssl rand -hex 16)"
{
  "automation_id": "9fad8d64-e794-460e-8074-62e6456ba8a1",
  "chat_id": "5f0c0d6e-8a0b-4e0e-9a54-7a1a5f7a0c11",
  "url": "https://n8v.online/task/5f0c0d6e-8a0b-4e0e-9a54-7a1a5f7a0c11"
}

Answers 202. Follow the chat with GET /api/v1/chats/{id}. For a pull request or issue automation, chat_id and url are null: List runs shows its chat once it starts.

Refused with 422 model_unavailable when its model cannot run, and with 422 automation_refused when the app would refuse it too: a github_mention automation (it runs when n8v is mentioned on GitHub), a webhook automation while webhooks are not enabled for the account, or a plan with no automation runs left.

List runs

GET /api/v1/automations/{id}/runs, needs automations:read. The chats it started, newest first.

QueryDescription
limit1 to 50. Defaults to 10
cursornext_cursor from the page before
curl -sS "https://n8v.online/api/v1/automations/9fad8d64-e794-460e-8074-62e6456ba8a1/runs?limit=5" \
  -H "Authorization: Bearer $N8V_API_KEY"
{
  "automation_id": "9fad8d64-e794-460e-8074-62e6456ba8a1",
  "runs": [
    {
      "chat_id": "40fb1421-6b1e-4f43-9d0a-1f0d8c0b2a77",
      "title": "Weekly review",
      "url": "https://n8v.online/task/40fb1421-6b1e-4f43-9d0a-1f0d8c0b2a77",
      "status": "complete",
      "archived": false,
      "at": "2026-11-06T02:00:42.000Z",
      "error": {
        "code": "agent_generic_error",
        "message": "The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.",
        "model_refused": true
      }
    }
  ],
  "next_cursor": "MjAyNi0xMS0wNlQwMjowMDo0Mi4wMDBafDQwZmIxNDIxLTZiMWUtNGY0My05ZDBhLTFmMGQ4YzBiMmE3Nw"
}
FieldDescription
chat_id, urlThe run's chat, which GET /api/v1/chats/{id} reads
statusThe chat's status, as in Read a chat
errornull, or why the run failed: code, message (the provider's own words, without its JSON) and model_refused
error.model_refusedtrue when the run was refused for its model, by n8v or by the provider
next_cursorPass it as cursor for older runs; null on the last page

A run can end complete and still carry an error: check error, not status, to tell whether it did its work.

Delete an automation

DELETE /api/v1/automations/{id}, needs automations:write. Deletes it for good, with its webhook token. The chats it started stay. Answers 200:

{ "id": "9fad8d64-e794-460e-8074-62e6456ba8a1", "deleted": true }

To stop it for a while, pause it instead.

Fix an automation whose model stopped working

A weekly automation runs gpt-5.5-xhigh through Codex. The provider stopped serving it on a ChatGPT account, so every run ends without doing its work, while the automation itself looks fine. Ask your assistant: "Why does my weekly review keep failing? Fix it."

list_automations shows the warning:

- Weekly review (id 9fad8d64-e794-460e-8074-62e6456ba8a1): on, At 02:00 AM, only on Friday (Europe/Lisbon), owner/name@main, model GPT-5.5 X-High. Next run 2026-11-13 02:00 UTC. Last run failed: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.
  Warning: The last run (2026-11-06) was refused for GPT-5.5 X-High: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.

list_automation_runs with automation_id="9fad8d64-e794-460e-8074-62e6456ba8a1" confirms that it is the model, run after run:

- 2026-11-06 02:00 UTC, chat 40fb1421-6b1e-4f43-9d0a-1f0d8c0b2a77: complete, failed, refused for its model: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.
- 2026-10-30 02:00 UTC, chat 7c3e2a90-1d4b-4f6e-b2a8-5e9f0c1d3b46: complete, failed, refused for its model: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.

list_models shows which models the account can run. update_automation with automation_id="9fad8d64-e794-460e-8074-62e6456ba8a1" and model="sonnet-5" changes only the model:

Updated Weekly review.
- Weekly review (id 9fad8d64-e794-460e-8074-62e6456ba8a1): on, At 02:00 AM, only on Friday (Europe/Lisbon), owner/name@main, model Sonnet 5. Next run 2026-11-13 02:00 UTC. Last run failed: The 'gpt-5.5' model is not supported when using Codex with a ChatGPT account.

The warning is gone: the refusal was for the old model. The last run's failure stays in its history.

Optional: run_automation runs it now to check, and wait_for_reply follows its chat
# 1. Find the automations that need attention
curl -sS https://n8v.online/api/v1/automations \
  -H "Authorization: Bearer $N8V_API_KEY" |
  jq '.automations[] | select(.warnings | length > 0) | {id, name, warnings}'

# 2. See why its runs failed
curl -sS "https://n8v.online/api/v1/automations/$ID/runs?limit=3" \
  -H "Authorization: Bearer $N8V_API_KEY" |
  jq '.runs[] | {at, error}'

# 3. Pick a model the account can run, and switch to it
curl -sS https://n8v.online/api/v1/models \
  -H "Authorization: Bearer $N8V_API_KEY" |
  jq -r '.models[] | select(.enabled) | .id'

curl -sS --fail-with-body -X PATCH "https://n8v.online/api/v1/automations/$ID" \
  -H "Authorization: Bearer $N8V_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "sonnet-5"}'

The answer has "model": {"id": "sonnet-5", "name": "Sonnet 5", "status": "ok", "message": null} and an empty warnings.

Idempotency

Send an Idempotency-Key header on POST /api/v1/automations and POST /api/v1/automations/{id}/run, the two calls that create something. The rules are the API's: a retry with the same key and body answers what the first call did, with 200 and Idempotent-Replayed: true, and creates or runs nothing; a retry that arrives while the first is still running answers 409 idempotency_in_progress; the same key with a different body answers 422 idempotency_conflict; a call that failed frees its key. Keys for runs are separate for every automation.

The other writes are safe to repeat: PATCH sets the same values again, pause and resume change nothing the second time, and a second DELETE answers 404. Over MCP there is no Idempotency-Key: each run_automation call starts a run.

Limits

Automations calls count against the same limit as every other call: 120 a minute per key, across every endpoint, and the same per connected assistant over MCP (a key used over MCP shares its REST budget). Over it: 429 rate_limited with Retry-After over REST, a tool error saying when to try again over MCP. Bodies are up to 256 KB. See Limits.

Your plan's own limits hold as in the app, such as the number of active automations, the schedules it allows and its automation runs. Reaching one answers 422 automation_refused, with the app's words in message.

Repositories

A key limited to some repositories works on automations in those repositories only:

  • An automation in another repository does not exist for the key: reading, changing, running or deleting it answers 404 automation_not_found, the same as an id that does not exist, and listing leaves it out.
  • Creating an automation in another repository, or moving one there with repo, answers 403 repo_not_allowed.

Connected assistants act with all the repositories your GitHub account can reach.

Errors

The errors these calls add to the API's:

StatuscodeMeaning
400invalid_requestThe body or query is not valid. param names the field, such as schedule.days or follow_up.schedule
400invalid_modelUnknown model name. didYouMean names the likely model, when there is one
403automations_disabledAutomations over the API and MCP are turned off for the account, see Turn it off
403forbidden_scopeThe key lacks automations:read or automations:write
403repo_not_allowedCreating or moving an automation into a repository the key is not limited to
404automation_not_foundNo such automation for this account, or it is outside the key's repositories
409idempotency_in_progressThe first request with this Idempotency-Key is still running
422model_unavailableThe model cannot run for the account. message says why, hint points to the models you can use
422automation_refusedThe app refuses it too: a plan limit, a schedule rule, a run that cannot start on demand. message says why
422invalid_requestA prompt field sent to an automation that runs a workflow graph
422repo_not_foundThe repository does not exist, or your GitHub account cannot reach it
422branch_not_foundThe branch does not exist
422github_not_connectedGitHub is not connected, or the connection expired
422idempotency_conflictThe Idempotency-Key was used with a different body
{
  "error": {
    "code": "model_unavailable",
    "message": "GPT-5.5 X-High needs a connected ChatGPT subscription.",
    "param": "model",
    "hint": "GET /api/v1/models lists every model and whether this account can use it."
  }
}

Over MCP the same answers arrive as tool errors, with the hint naming list_models.

Audit log

Every call and tool call is listed in Settings, API, Activity, as automation.list, automation.read, automation.runs, automation.create, automation.update, automation.pause, automation.resume, automation.run or automation.delete, with the automation's name and, for a run, its chat. See Audit log.

What stays in the app

Some changes need the app, where they can be shown and confirmed:

  • Webhook triggers. Creating one, and its token, which the app shows once. A webhook automation can be read, changed in other ways, paused, run and deleted over the API; see Webhook trigger.
  • The action type. An automation that runs a prompt stays a prompt, and one that runs a workflow graph stays a graph.
  • Workflow graphs. Their nodes and routing are edited in Workflow Graphs. Over the API a graph automation shows its workflow_graph_id.

Turn it off

Settings, API, Automations has the switch Automations over the API and MCP, on by default.

  • Off: no key or assistant sees or changes your automations. API calls answer 403 automations_disabled, the MCP tools are gone, and assistants are no longer offered the automations access when they connect. Your automations themselves keep running, and their cards no longer show Model cannot run.
  • On again: keys and assistants that hold the scopes work again at once. When n8v has turned automations over the API off for everyone, the switch cannot turn them back on, and says so.

Questions

My assistant does not show the automation tools. It was connected before this release, or connected while the switch was off. Connect it again from the assistant. Settings, API, AI assistants names each app that lacks the access.

Why does an automation with a refused model still run? n8v lets the model run; the provider refused the last run. It may serve the model again, so n8v warns rather than blocks. Change the model to fix it.

Can a key create an automation that runs on a repository it may not use? No. Creating or moving one there answers 403 repo_not_allowed, and the key never sees automations there.

Does deleting an automation delete its chats? No. The chats it started stay in your task list.