Skip to main content
Refusals come from two different places, and telling them apart is the whole trick to debugging quickly.
  • The door. A request that never reached an action — no key, access switched off, too fast, no such action — answers a 4xx with an error object.
  • The answer. A request that got through the door and reached the action answers 200, and the ok field says how it went. A declined action is still a 200 with "ok": false and a reason.
So branch on ok, not on the status code. If you would rather not read the body, the x-goosy-tool-error header carries true or false on every dispatched call.

Refused at the door

401 never tells you which credential problem you had. A revoked key, an expired one, a typo and a key that never existed all answer the same words. If you are unsure, look at the key’s row under Settings → API & MCP — it shows the status and when it was last used.

Refused by the action

These answer 200 with "ok": false, a code, and a plain-language message. An invalid_arguments reply points at the field:

Which refusals are about us

Four of the answers above are platform states. No new key, no permission change and no code change on your side will clear them, and each says so in its own message rather than leaving you to guess:
  • tenant_mcp.surface_disabled — the surface is not open for your account yet.
  • api_access.platform_disabled — programmatic access is off platform-wide.
  • tool_capability_unbound — that action is not open to API clients yet.
  • Anything a support reply tells you is on our side.
Everything else in this page has a fix you can perform.

A quick triage

1

Read the status first

A 4xx means the request never reached the action. A 200 means it did.
2

On a 4xx, read the code

The table above names who can clear each one. Most 403s are a switch or a permission, not the key.
3

On a 200, read ok

"ok": true is a real answer. "ok": false carries a code and a message written to be acted on — including, where it applies, the list of choices you could pass instead.
4

If the message says it is not about your key, believe it

Minting another key is the most common wasted step. The refusals that are not about your credential say so in those words.