RSX API / Errors

Error reference.

Every RFC 7807 type URL the platform emits points at a page below. The shape of every error is documented in the getting started guide.

StatusErrorMeaning
401missing-api-keyThe request reached an authenticated endpoint without an Authorization header.
401invalid-api-keyThe supplied key is malformed or not recognised by the platform.
401revoked-api-keyThe key exists but has been revoked, or its rotation grace window has ended.
403invalid-scopeThe key is valid but doesn't hold the scope this endpoint requires (scopes look like project:group:action).
401invalid-admin-tokenKey-management endpoints (/platform/v1/keys/*) authenticate with the platform admin token, not an API key.
401invalid-tokenA JWT-authenticated endpoint rejected the bearer token: missing, malformed, expired, wrong issuer/audience, or not signed by a known key. Also returned by RSX ID for an unrecognised, expired, or reused refresh token.
429rate-limit-exceededYour key's token bucket is empty. Every response carries X-RateLimit-* headers.
400missing-idempotency-keyAll add actions require an Idempotency-Key header so a retried request can't create a duplicate.
422idempotency-key-reuseThis Idempotency-Key was already used with a different request body — that's a client bug, not a retry.
404key-not-foundNo API key exists with the requested id (platform/v1).
404widget-not-foundNo widget exists with the requested id (example/v1 — the reference service).
404identity-not-linkedThe external identity (a Discord or GitHub user) is well-formed, but no RSX ID has it connected and verified. Distinct from account-not-found, which means an RSX account id didn't exist, and from a 400, which means the request itself was malformed.
404account-not-foundNo RSX ID account exists with the requested id (id/v1, admin surface).
401invalid-credentialsLogin failed: the email/handle or password is incorrect. The same error is returned for an unknown account and a wrong password, on purpose — RSX ID never reveals whether an identifier exists.
409email-takenAn account already uses this email address.
409handle-takenThe requested @handle is already in use or is reserved by the platform.
409handle-reservedThe @handle was recently released by another account and is held in a 14-day cooldown, reclaimable only by its prior owner (anti-impersonation).
403account-suspendedThe account is temporarily suspended by a platform admin. Login and access are blocked while suspended.
403account-terminatedThe account has been permanently terminated by a platform admin.
400invalid-verification-tokenThe email-verification token is invalid, already used, or expired.
400invalid-reset-tokenThe password-reset token is invalid, already used, or expired.
403email-not-verifiedThe action requires a verified email address — e.g. enabling a developer account.
403developer-onlyThis endpoint (developer self-service API keys) needs an RSX ID developer account.
403private-scopeA developer key may only be scoped to public endpoints. One or more requested scopes are private (admin-issued keys only).
409key-limit-reachedA developer account has reached its maximum number of active API keys.
401invalid-clientThe OIDC `client_id` is not registered with RSX ID, or the client has been revoked.
400invalid-redirect-uriThe OIDC `redirect_uri` does not exactly match one registered for this client (exact-match only — no trailing slashes or path differences).
404not-foundThe requested resource or endpoint does not exist (or is not publicly available).
410version-sunsetThis API version passed its published sunset date and no longer serves requests (§6.8 — deprecations are announced with Deprecation/Sunset headers well before this).
500internal-errorSomething failed on our side. The response's requestId identifies the exact request in our logs.