keyward.broker console
control plane offlineoffline
Docs / Troubleshooting

Why was I denied?

Every denial the broker can return, what it actually means, and where to fix it. Every one of these is also written to the audit log — the Audit page is the fastest way to see which reason you're hitting.

Identity & authentication

ReasonWhat it meansFix
authentication_requiredno user token AND no service key on the requestset KEYWARD_AGENT_KEY (Agents → service key), or pass the user's token
invalid_user_tokenthe end-user token didn't verify against the IdPcheck the token's issuer/expiry; service mode avoids user tokens entirely
agent_auth_failedthe service key is wrong or was revokedissue a fresh key on the Agents page (shown once) and update the env
unknown_agentno agent registered with this id — agents are never auto-createdAgents → Register agent; the id must equal KEYWARD_AGENT exactly
agent_revokedthe agent exists but was revokedAgents → restore
agent_attestation_requiredthe agent is registered as attested but sent no valid workload tokenpass agentAssertion (fresh per request), or clear the attestation config
invalid_delegationthe delegation credential didn't verify or was splicedpass the orchestrator's unmodified credential; chains are cryptographically bound
delegation_too_deepthe actor chain exceeded depth 5flatten the orchestration — five hops is the ceiling
agent_attestation_faileda workload token WAS sent but failed verification (wrong issuer, subject, or expired)check the attestation issuer / JWKS URI / subject on the agent's registration; mint a fresh token per request
org_suspendedthe tenant is frozencontact the org owner / support
unknown_orgthe authenticated user belongs to no orgsign up / accept the org invite; membership is required before brokering
cross_orgthe user/delegation and the agent belong to different orgsuse an agent registered in your own org — chains never cross tenants

Provider & scope

ReasonWhat it meansFix
unknown_providerno secret for this provider in THIS environment — often an environment mismatch, not a missing keycheck the env column on Secrets vs the agent's KEYWARD_ENVIRONMENT; connect the provider if truly missing
scope_not_allowedthe route's scope isn't in the SECRET's allowed scopes (gate 1 of 2)Secrets page → the provider's scope checkboxes
policy_denieda policy rule denied it, or no allow rule matched (gate 2 of 2 — deny-by-default)Policies page → add/adjust the allow rule for this agent + provider + scope
approval_requireda require_approval rule matched and no valid approval existed — the request is queuedan admin approves it on the Approvals page; the agent's NEXT identical call consumes the approval and proceeds (approvals are one-time, and spent at decision time — if the approved call then fails or aborts, re-queue and re-approve)
route_not_allowedthe provider's catalog doesn't map this method+path to any scopecheck the Provider reference for the exact routes; admin/key-management endpoints are excluded by design
native_not_proxyablegateway() was called on a native-mode secretuse kw.get(provider, scope, ttl) for native providers
gateway_provider_unsupporteda proxy secret with no built-in match and no gateway_configre-connect it as Custom API (base URL + auth header + scope)
unknown_scopestoring a secret: a scope the provider's catalog doesn't definepick scopes from the checkboxes — free-typed strings aren't accepted for built-ins
key_format_rejectedstoring a secret: the pasted value is a known-wrong credential kind (webhook secret, admin key…)paste the right key type — the error message names it
builtin_name_reserveda Custom API was named after a built-in providerpick the built-in from the dropdown, or rename your custom provider

Limits & upstream

ReasonWhat it meansFix
too_many_requestsper-IP flood cap on the brokerrespect retry_after_s; the SDK's cache usually makes this moot
plan_limit_exceededthe org hit its plan's secrets capremove unused secrets or upgrade the plan
upstream_unreachableKeyward couldn't reach the provider's APIusually transient; check the provider's status page
client_abortedthe CLIENT disconnected mid-call; Keyward cancelled the upstream requestnothing to fix — this is the agent hanging up (interrupted streams, timeouts on the caller's side)
native_provider_unavailablethe secret's native config names a kind no native provider is registered forset native_config.kind to a supported kind (aws-sts is the built-in)
native_mint_failedthe native provider (e.g. AWS STS) refused to mintcheck the native config (role ARN, trust policy) on the secret

Allowed… but the call still failed?

Some providers (Slack) return HTTP 200 with an error inside the body. The gateway detects this and records it in the audit reason as upstream_ok:false <error> — the request was allowed by Keyward and refused by the provider (usually missing bot scopes or the bot isn't in the channel). Fix it on the provider's side; Keyward's gates weren't the blocker.