Menu QaldyDocs

When something says no

What the common refusals mean and what to do next: console only, needs an admin, blocked by the gate, rate limited, a stale version. Every refusal says what happened and the next step; this page explains the codes.

Qaldy says no on purpose, and it says why. Every refusal in the console, the API, the command line and over MCP has the same three parts: what happened, why, and what to do next, plus a stable code for programs. This page explains the ones people meet first.

In the console and from an agent

You seeWhat it meansWhat to do
console_onlyA token (an agent, the CLI, CI) tried something only a signed-in person may do: change who has access, make a token, change a plan, delete a table.Do it in the console, or ask the person who owns the token. This is by design, not a fault.
approval_needs_consoleA build or change reaches the internet, sends messages, uses AI, starts shared or has a webhook or form trigger. A token may approve only the plainest plans.Open the link the message gives you and approve it in the console after reading the permission sentences.
admin_approval_required, "Needs an admin to approve"The app uses a connector or AI models, whose key an admin sealed. A member may not approve it.Copy the request to a workspace admin.
insufficient_scopeThe token has the read scope and the route needs write.Make a token with the scope you need (a person approves it in the browser).
token_revoked, unauthorizedThe token or session ended: revoked, expired, or the person left the workspace.Sign in again: qaldy login, or reconnect the client.
admin_onlyA route for admins, such as the audit log.Ask an admin, or use an admin's own token.
manifest_changedThe plan you approved is not the plan on the server. Approval only ever builds the exact plan you were shown.Plan again and read the new permission sentences.
stale_versionThe app moved to another version while you were looking at an older one.Reload, then redo the change on the current version.
last_ownerThe workspace's last owner cannot leave or be removed.Hand the workspace over to someone first (an owner does this on Team).
rate_limitedToo many requests in a short time. The Retry-After header says how long.Wait that long and try again.

When an app is refused at the gate

A run that ends Blocked was stopped by the gate, not by a bug. The run says which call and why. These are the reasons you will see:

ReasonWhat it meansWhat to do
action_not_declaredThe app called a connector action that is not in its manifest.Add the action in a new version, and approve it.
action_not_supportedThe gate does not forward that action at all (for example a Telegram method that could read the bot's whole inbox).Use a supported action. See the connector's page.
domain_not_allowedThe app tried to reach an address that is not on its list.If it should, add the address with a reason in a new version.
media_not_allowedA Telegram photo or file URL that is not https on an allowed host.Use an allowed host, or a file id from an earlier upload.
connector_not_connectedNo key is stored for that connector.Connect it on Connectors.
budget_exceededAn AI app reached its monthly budget.Raise the app's budget under Settings, then Models, or wait for next month.

egress_blocked (HTTP 403) is the umbrella code for all of the above. The audit log has a row for each, with the reason, and the Security screen can filter to Blocked calls.

When an app is asleep, or a run is waiting

You seeWhat it meansWhat to do
A calm page saying the app is resting (HTTP 503, Retry-After)The workspace reached its spending cap, or this app reached its daily limit, or a flood put it to sleep for a few minutes. The page says which.Raise the cap or the app's daily limit, or wait. Apps wake shortly after a hold is released (the design aim is about 15 seconds).
A run that says it is waiting (held: true)The runs allowance is used up. The run starts by itself, oldest first, when there is room, and is dropped after 24 hours.Add capacity, or wait for the month to renew.
queue_full (HTTP 429)The workspace already has 1,000 runs waiting.Raise the cap or fix what is flooding the queue.
"Temporarily unavailable" (HTTP 503) at an app you never opened beforeQaldy's API is down, and the gate only remembers people it has already seen. See When the control plane is down.Wait. People who already opened the app are unaffected.
tool_rate_limitedAn agent called a published automation more than 30 times a minute.Slow the agent down.

In a Backend

You seeWhat it meansWhat to do
origin_not_allowedA web page called the data API from an address the project does not list. A new project allows none.Add your site's address in the backend's Settings.
policy_deniedNo rule lets this caller do that. A table is private until a rule says otherwise.Add a rule on the Access tab. The message gives an example sentence.
policy_violationA change would make a row stop matching the rule that allowed it.Change something else, or ask for a rule that allows it.
public_needs_personA key or an agent tried to open a table to visitors. Only a person can, by typing the table's name.Do it in the console.
token_invalidA sign-in token sent to the data API did not verify: wrong key, issuer, audience or expiry.Check the keys and the claims you pinned under Access.
column_not_foundThe column does not exist, or the caller may not see it at all. Both look the same on purpose.Check the name and the rules.

Trials

trial_limited means a try-it workspace tried something a trial may not do: connect a service, share, make a token or call a model. Keep the workspace to remove the limits. See Try it without an account.

Connectors

You seeWhat to do
Expired, reconnect or Not working, reconnect on a cardReplace the key with a fresh one from the provider. Press Test connection.
A test says the service refused the key (401)The key was mistyped, revoked or regenerated. Replace it.
A first call to a Preview connector failsIt has not been run against a live account yet. Tell us what the service answered; see Connectors.

Still stuck

Message us on Telegram. A person reads every message. Quote the requestId from the error if there is one: it finds the exact request in our logs.

Type to search. Up and down to choose, Enter to open, Esc to close.