Skip to content

Deny codes

When the regional gateway rejects a tenant request before relaying to your backend, you typically receive HTTP 502 with:

  • Content-Type: application/vnd.xg3.error+json
  • JSON body: { "code": "...", "message": "..." }
  • X-Xg3-Request-Id — use with console Request Lookup

OAuth token errors (POST /oauth/token) use 401/403 with standard OAuth error JSON instead — not covered in detail here.

How to read the error

json
{
  "code": "TokenInvalid",
  "message": "Secret is corrupt"
}
FieldMeaning
codeMachine-readable deny reason (PascalCase string)
messageHuman-readable explanation
X-Xg3-Request-IdCorrelation id on response headers

Deny code reference

CodeTypical causeWhat to do
RegionMismatchService region does not match hostname regionUse correct regional hostname
ServiceNotFoundUnknown service id or deleted serviceCheck service id in URL; create or restore service
ServiceDisabledService or account disabledEnable in console
TokenMissingRequired auth header missing or emptySend X-Xg3-Authorization or X-Xg3-Service-Key per service auth mode
TokenInvalidBad JWT, wrong secret, or invalid service keyRe-mint token; verify credential or key
TokenExpiredJWT past expiryGet a new token from /oauth/token
TokenRevokedCredential revokedRotate credential and mint new token
PolicyDeniedBoth auth headers sent on same requestUse only one of JWT or service key
AgentUnavailableAgent disabled or not connected at authorize timeCheck agent enabled and tunnel status
RateLimitedToo many requestsBack off; reduce traffic
CredentialDisabledOAuth credential disabled or missingEnable or recreate credential
AudienceMismatchToken or credential not valid for this service hostnameFix scope at mint; update credential allowlist
KeyNotAllowedForServiceCredential or key not allowed for this serviceAdd service to allowlist
RenewalLimitExceededAgent certificate renewal limitDo not restart agent in a loop — contact support
AgentDisabledAgent disabledEnable agent in console
AuthModeNotSupportedWrong auth mechanism for service (e.g. key on JWT-only service)Match client to service auth modes
AccountNotFoundAccount in token scope does not existVerify account id
AccountDisabledAccount disabledContact account admin
InvalidScopeOAuth scope format wrongUse account:ACCOUNT_ID service:SERVICE_ID
ScopeAccountMismatchScope account does not match credentialAlign scope with credential account
InternalBackendAccessDeniedBackend URL is private/internal and agent not permittedSee below
TrialExpiredAccount trial ended without subscriptionSubscribe on Billing

Gateway-only statuses (not in table above) include ControlPlaneUnavailable, AGENT_UNAVAILABLE (504), TUNNEL_OVERLOADED — see Troubleshooting.

TrialExpired

Your account’s 14-day free trial has ended and there is no active subscription.

Symptoms:

  • Ingress requests return 502 with code: "TrialExpired"
  • You cannot enable agents or Services in the console

Fix: An account admin opens Billing, chooses a plan, and completes Subscribe (Stripe Checkout). After payment, status becomes Active and access is restored.

See Billing and subscriptions for the full lifecycle.

InternalBackendAccessDenied

Your service backend base URL points to a private or internal network address (for example http://localhost, https://192.168.1.10, or https://app.internal.local), and the agent is not permitted to reach internal targets.

Fix (choose one):

  1. In the console, open the agent for this service → Edit settings → enable Allow internal backend targets; or
  2. Change the service backend URL to a publicly routable address reachable from your agent host.

Important: Disabling Allow internal backend targets immediately stops traffic to affected services — you do not need to edit each service separately.

Internal addresses include common private IP ranges, loopback, link-local addresses, and hostnames like localhost and *.local. Hostnames that only resolve to private IPs through DNS may not be detected unless they match these rules.

When creating or editing a service, the console may block an internal URL before submit if the agent setting is off.