Error codes
Every error code the API, the embed SDK, a workflow check and the preflight check can return.
Every API error has the same body. Branch on error.code. The message is written for a person and may change. Some codes add a details object, such as {"reason": "revoked"}.
{ "error": { "code": "CONCURRENCY_LIMIT", "message": "…" } }The request · 400, 405, 422 13
The body is not valid JSON, or not the shape this call takes.
This app declares no dynamic fields or options.
A parameter or the body is not valid; the message names it.
From List runs, Get a run, Delete a run and 115 more.
The path exists, but not with this method.
From Deliver to a webhook.
A connection named for a slot is for another service (
details.slot).From Make a workflow from a template, Preview using a template, Install a template (Partner API).
With
"test": true, the service refused the settings when tested, so nothing was saved (details.causesays why). See A connection stopped working.From Create a connection, Rename or update a connection, Create a connection.
The website can’t be allowed as written, or is a wildcard. A customer’s website is one exact address.
From Replace an account’s websites (Partner API), Allow a website for one account (Partner API), Allow a website (Partner API).
A step uses an app this workspace may not use. The message names the step. See Switches.
From Publish a workflow, Run a workflow, Go back to a version and 10 more.
The return address is not on an allowed website.
From Start a sign-in for a new connection, Start a connection sign-in from your own button (Partner API).
The change moves a where field (a host, server, port, database, URL or connection string) while a stored secret was left blank.
From Test sign-in details before saving, Rename or update a connection.
The AI app sign-in address is not on a website allowed for the installation or for this account.
The list is full: 20 websites for one account, 200 for the installation (
details.maxsays which).From Replace an account’s websites (Partner API), Allow a website for one account (Partner API), Allow a website (Partner API).
A rule the body breaks (the message names it), or an Idempotency-Key reused with a different body.
From Publish a workflow, Get a new webhook address, Run a workflow and 29 more.
Access · 401, 403 19
The login code’s person no longer has that access (
details.reasonsays why).From Start a session (Partner API), End a session (Partner API), Turn switches off for a session (Partner API) and 1 more.
The code is missing, unknown, used or expired.
A token made inside a partner’s product stopped working: it was revoked or expired, its maker left or lost the editor role, or its account or workspace was deleted (
details.reasonsays which). Make a new token. See Tokens and AI apps.From any call with a token made inside a partner’s product.
The token is missing, expired or revoked.
From any call that needs a token.
The workspace’s account is suspended. Nothing new starts until it is resumed, and its data is kept. See Usage, suspension and deletion.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 21 more.
Signing in needs a person in a browser. An API token signs a connection in again through Start a sign-in for a new connection, with connectionId and returnUrl.
From Start a sign-in for a new connection, Start a sign-in for a connection.
Only an embedded session can do this. An AI app’s connection or a token can’t, and the embedded view can’t reach this part of the API.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 24 more.
Embedding is not licensed here, or sign-in is off. The login code is not used up.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 25 more.
This installation's license does not include embedding. See Your license.
From Make a login code (Partner API), List accounts (Partner API), Create or update an account (Partner API) and 51 more.
In an embedded session, the switch this call needs is off (for example folders). See Switches.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 23 more.
The token lacks the permission this call needs.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 11 more.
The key's address allow-list does not include the caller.
From Make a login code (Partner API), List accounts (Partner API), Create or update an account (Partner API) and 51 more.
Keel tried to publish without a person pressing its card. A person must press it.
The partner manages that connection, so it can’t be changed here.
From Test sign-in details before saving, Start a sign-in for a new connection, Rename or update a connection and 4 more.
The license’s organization limit is reached. See Your license.
From Make a login code (Partner API), Create or update an account (Partner API), Restore an account (Partner API) and 4 more.
The page is not one of the allowed websites. The login code is not used up.
The app is not one this workspace may use. See Switches.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 4 more.
The token wasn’t made to work here: with the API, or with AI apps (
details.surfacesays which).From any call with a token made inside a partner’s product.
The license’s workspace limit is reached. See Your license.
From Make a login code (Partner API), Create or update an account (Partner API), Sign a person in for an AI app (Partner API) and 5 more.
Not found or in conflict · 404, 409 29
An approval link that was already answered. The run has moved on.
From an approval link, asked for JSON.
Nothing with that ID in this workspace, or a mistyped path.
From Get a run, Delete a run, Stream a run and 96 more.
No such sign-in request, or it expired.
From Read a sign-in request (Partner API), Sign a person in for an AI app (Partner API), Turn a sign-in request down (Partner API).
With step: the run has no step of that name. The message lists the ones it has.
From Get a run.
An approval link whose wait timed out before anyone answered.
From an approval link, asked for JSON.
The workspace’s account was deleted. Restore it first. See Usage, suspension and deletion.
From Run a workflow, Start a sign-in for a new connection, Open a sign-in in this tab and 27 more.
The account is not deleted, so there is nothing to restore.
The account is suspended, so the run can’t be decided or run again now. See Usage, suspension and deletion.
From Approve or reject a held run, Run a run again (Partner API).
The approval was already answered.
In Run many runs again’s results: that run already has a retry that worked or is still going, so it was left out.
From Run many runs again.
Something else held the thing this call needs, and the call gave up waiting. Nothing was done. Try again.
From Delete a workflow, Make a login code (Partner API), Create or update an account (Partner API) and 2 more.
The request clashes with the current state. If a request with the same Idempotency-Key is still in progress, retry shortly.
From Delete a run, Publish a workflow, Unpublish a workflow and 26 more.
An account’s default workspace can’t be deleted.
The workflow is being edited in another tab.
A click on the assistant's publish card named no review, or a draft or base version that has moved since the card was shown.
From Publish a workflow.
A folder with that name is already in that place, or a workspace with that name is already in the organization.
From Create a folder, Rename or move a folder, Create a folder and 1 more.
With provision false, the person is not a member of the workspace.
The run is not waiting for an approval.
The account is not the one the sign-in request is for. The request is not used up.
The sign-in request was already completed or turned down.
From Sign a person in for an AI app (Partner API), Turn a sign-in request down (Partner API).
The session can’t be renewed (
details.reasonsays why). Ask your server for a new login code.The account was deleted more than 30 days ago and can no longer be restored.
With provision false, the role is not the person’s role there.
The run is queued, running or held. Cancel it first, or wait.
The sign-in was already opened or has ended, or isn’t a tab sign-in. Start it again.
The workspace already has 25 live tokens.
The list already holds it.
From Allow a website for one account (Partner API), Allow a website (Partner API).
A production run whose workflow is paused or a draft. No run is started.
From Run a run again.
The workflow is not on, so it has nothing published to run.
The body · 413, 415 2
The body is larger than this call accepts.
From Run a workflow, Deliver to a webhook, Create a workflow and 33 more.
A Content-Type other than application/json (leaving it out is fine).
From any POST, PUT or PATCH to the API with a Content-Type other than application/json.
Limits · 429 4
The workflow is at its concurrency limit and is set to Refuse. Try again when a run finishes. See Limit runs at once.
From Run a workflow, Deliver to a webhook, Run a run again (Partner API) and 1 more.
Too many requests from this caller (an API token, a session or an embed session) or this address. Retry-After says when to try again.
From any call, once the caller’s requests for the minute are used up.
Too many runs are already waiting in line, for the organization or for this workflow. Try again later. See Limit runs at once.
From Run a workflow, Deliver to a webhook, Run a run again (Partner API) and 1 more.
This person or token already follows 50 runs on this server. Retry-After says when to try again.
From Stream a run.
The server · 500, 503 14
The delete did not happen, and the workflow is still there. Try again.
From Delete a workflow.
The approval could not be handed to a worker. The run is still held.
Something failed on the server. Try again.
From List runs, List waiting runs, Delete a run and 127 more.
The Sub-flow step’s inputs, or the list of workflows to choose from, could not be read.
A webhook or form of a suspended account. Nothing ran. Retry-After says an hour. See Usage, suspension and deletion.
From a webhook or form address.
This server holds as much request data as it can right now. Nothing was done. Retry after Retry-After.
From any call or webhook whose body doesn’t fit, and any read of a run’s data, while the server is full.
With
"test": true, no worker could test the connection, so nothing was saved. Try again (details.reasonsays why).From Create a connection, Rename or update a connection, Create a connection and 1 more.
A self-hosted installation without a valid license is paused. Nothing is read, written or run. An API call gets no Retry-After: load a license. A webhook or form gets a Retry-After of an hour. See When a license ends.
From any call with an API token made in GoRunner, and any webhook or form address, on a paused self-hosted installation.
GoRunner couldn’t check which apps may run. Nothing started.
From List apps, Get an app, Get an action’s fields and 27 more.
The database or Redis didn’t answer, so the request wasn’t checked and nothing was done. Retry after Retry-After.
From any call whose token can’t be looked up because the database or Redis didn’t answer.
The account's state could not be read, so nothing was started.
From Run a workflow, Start a sign-in for a new connection, Start a sign-in for a connection and 3 more.
A webhook that answers in the same call: the run finished, but its step output couldn’t be read back from storage. The run is intact. Retry, or read it with Get a run.
This server can’t do it now: no Redis to signal a cancel or record a sign-in, or the installation’s OAuth app for the service can’t be read.
From Cancel a run, Create a connection, Rename or update a connection and 3 more.
No worker is checked in.
From Get a field’s sub-fields, Get a field’s options, Get a trigger’s sample data and 2 more.
The embed SDK’s codes, from mount(), the error event, and its methods.
When mounting, or after 16
not_allowed_heremount() or the error eventYour page's origin is not one of the installation's allowed websites (Platform › Partner keys › Allowed websites), or the page has no web origin at all (a file: page). The browser would block the frame, so the SDK refuses before it is made.
licencemount() or the error eventThe installation's license does not include Embed, or the installation is paused because its license ended.
code_failedmount() or the error eventgetCode threw, returned something that is not a code, or did not settle in time. The message carries your error's message.
code_expiredmount() or the error eventThe installation refused the code, and the fresh one the frame asked for too: used, or older than 60 seconds. Check that your server asks for a new code on every call rather than handing out a cached one.
access_endedmount() or the error eventThe person no longer has access to this account: they were removed, or the account or the workspace was deleted. A new code for the same account will not help.
account_suspendedmount() or the error eventThis account is suspended: everything can be read, nothing can be changed or run. A warning: the frame stays open, and the error event has fatal: false.
not_availablemount() or the error eventThe page you mounted is switched off for this person: “The page this embed was asked to open (/overview) is switched off here.” Mount without it, or with one that is on. The frame says this, so every SDK version gets it.
session_failedmount() or the error eventThe session could not be renewed: the host page did not hand over a new sign-in code.
unreachablemount() or the error eventThe frame could not reach the installation while signing in.
crashedmount() or the error eventThe frame hit an error it could not recover from.
version_mismatchmount() or the error eventThe frame and the SDK share no protocol version. Load /embed.js from the installation, or upgrade the package.
timeoutmount() or the error eventThe frame did not answer within timeoutMs. The commonest cause is your page's Content-Security-Policy not allowing the installation in frame-src. For a method, the frame did not reply within ten seconds.
container_not_foundmount() or the error eventNo element matches the container selector, or the element given is not in the page.
invalid_optionsmount() or the error eventAn option is missing or not what it should be; the message names it. Methods use it for an argument they cannot take, such as a theme that is not one.
unmountedmount() or the error eventunmount() was called, or the React component went away, before the mount finished. For a method: the instance was unmounted.
From a method 9
not_readya methodThe embed is not ready: still mounting, reconnecting, or ended.
not_alloweda methodThe page is switched off for this person, or making connections is not available to them.
not_configureda methodConnecting that service is not set up on the installation (no OAuth app for its provider).
invalid_pagea methodWhat you passed to navigate or switchAccount is not a page.
piece_not_founda methodconnect named a service the installation does not have, or an app id that is not one.
busya methodA connection dialog is already open, or the embed is already signing in.
invalid_appearancea methodsetAppearance was given something that is not a settings object, one over 16 KB, or one the frame refuses: a value outside the appearance settings, a font service's stylesheet, or an uploaded face whose file is not at the installation's own address or on your page's own website. An appearance in mount() that the frame refuses is ignored, and the embed shows your installation's look.
unsupporteda methodThe frame answered without the result the method expects — an installation of another release than this SDK.
frame_reloadeda methodThe frame document reloaded, or the embed switched account, while the call was waiting for its reply. Call it again once the embed is ready.
Check a definition answers with diagnostics, and Publish a workflow refuses with the first blocking one. Each has a code, a severity, and where it points: path, step and field. Many also list the allowed values in alternatives.
Errors 26
The definition can’t be read as a workflow.
The definition has a key the format doesn’t have. Nothing else is checked until it’s gone.
The steps don’t form a valid tree. The message says where.
The workflow has no trigger.
The workflow has no steps after its trigger.
unknown_piecepieceIdNo app has that id here.
piece_not_triggerablepieceIdThe app has no triggers, so it can’t start a workflow.
unknown_triggeractionIdThe app has no trigger with that id at that version.
no_piece_selectedpieceIdA step has no app chosen.
no_action_selectedactionIdA step has no action chosen.
unknown_actionactionIdThe app has no action with that id at that version.
unknown_piece_versionpieceVersionA step is pinned to an app version no worker runs. It would fail rather than run another version.
piece_not_allowedpieceIdThe workspace may not use this app.
missing_connectionconnectionIdA step or trigger that needs a connection has none.
connection_not_foundconnectionIdThe step names a connection this workspace doesn’t have.
connection_wrong_piececonnectionIdThe step names a connection made for another app.
A required field is empty.
A condition has no operator.
A condition uses an operator that doesn’t exist. alternatives lists the real ones.
An expression reads a step that isn’t in the workflow.
A step’s name or display name is over 255 characters. If the workflow being replaced already holds that name, this is a warning: a run that reaches the step can’t save its steps.
A field has an unclosed {{ or a }} that closes nothing.
A step that waits for an answer is inside a branch or a loop. Move it to the main line of steps.
subflow_selfworkflow_idA Sub-flow step runs the workflow it is in.
tool_returns_unknown_stepreturnsAn MCP Tool trigger returns a step that isn’t in the workflow.
Warnings 5
The operator compares against a value, but none is set.
A value isn’t one of the field’s options.
A pattern isn’t a regular expression the engine can read. Lookarounds and backreferences aren’t supported.
The action has no such field, so it’s ignored.
error_arm_not_enabledonErrorA step has error steps, but its error mode isn’t errorPath, so they never run.
Notes 1
A step keeps retry and timeout settings from the old Advanced section. They still apply.
The exit status of the preflight check (check), which setup and every update run first.
Exit statuses 4
- 0
exit 0Nothing is wrong. Warnings are allowed.
- 1
exit 1At least one problem. Each one names the line to change.
- 2
exit 2The command line itself was wrong.
- 4
exit 4At least one problem that protects data GoRunner already holds, such as an encryption key that is not the installation’s. Setup, deploy and a container’s start never go past it, even when told to skip the check.
How to handle them: see Errors in the API, The SDK and The preflight check.