Errors
Every error code we return, where, what causes it and how to fix it.
Inicie sesión para ver su propio ID de cliente de prueba en los ejemplos.
Errors follow OAuth 2.0: a JSON body { "error": "...", "error_description": "..." }, or, at the authorize step, error and error_description on the redirect back to you. Read error in code and show error_description only in your logs.
Some problems at the authorize step are shown on our page and never sent back: an unknown client, a redirect address you did not register, and a repeated parameter. We never send anybody to an address we have not checked.
| error | HTTP | Where |
|---|---|---|
| `access_denied` | on the redirect | Authorize |
| `invalid_request` | 400 | Authorize, Token: swap a code, Token: refresh, Revoke |
| `invalid_scope` | on the redirect | Authorize |
| `unsupported_response_type` | on the redirect | Authorize |
| `login_required` | on the redirect | Authorize |
| `consent_required` | on the redirect | Authorize |
| `interaction_required` | on the redirect | Authorize |
| `invalid_client` | 401 | Token: swap a code, Token: refresh, Revoke |
| `invalid_grant` | 400 | Token: swap a code, Token: refresh |
| `unsupported_grant_type` | 400 | Token: swap a code |
| `invalid_token` | 401 | Userinfo |
| `rate_limited` | 429 | Token: swap a code, Token: refresh, Userinfo, Developer API: your app, Developer API: usage, MCP server |
| `invalid_key` | 401 | Developer API: your app, Developer API: usage, MCP server |
| `missing_right` | 403 | Developer API: your app, Developer API: usage |
| `not_found` | 404 | Developer API: your app |
| `server_error` | 500 | Developer API: your app, Developer API: usage |
access_denied
Cause: The person chose not now, or your app may not sign them in yet: a test app signs in only its team and named testers, a live app only after review, and nothing while it is suspended.
Fix: Show a way to try again. Read error_description to tell the cases apart, and add testers on the app's Testers page.
invalid_request
Cause: A parameter is missing or malformed: no PKCE, PKCE with plain, a bad max_age, prompt=none combined with another prompt, or a token request that is not form encoded.
Fix: Send every required parameter once, PKCE with S256, and form-encode the token request.
invalid_scope
Cause: A scope does not exist, or your client is not registered for it.
Fix: Add the scope on the app's Sign-in page. A sensitive scope on the live app needs a review first.
unsupported_response_type
Cause: response_type is not code.
Fix: Use the authorization code flow.
login_required
Cause: prompt=none was sent and nobody is signed in, or their sign-in is older than max_age.
Fix: Send them again without prompt=none.
consent_required
Cause: prompt=none was sent and the person has not agreed to these scopes yet.
Fix: Send them again without prompt=none.
interaction_required
Cause: prompt=none was sent and their account needs a step first, such as accepting new terms.
Fix: Send them again without prompt=none.
invalid_client
Cause: Your app could not be authenticated: a wrong or expired secret, a revoked or expired certificate, a bad client_assertion (aud must be the token endpoint, exp at most ten minutes ahead, jti new), a public app sending a secret, or the app is suspended.
Fix: Check the credential on the app's Credentials page and its expiry. Rotate without downtime: add a new one, deploy, then revoke the old.
invalid_grant
Cause: The code or refresh token cannot be used: the code expired (60 seconds) or was used, it was issued to another client, the redirect_uri or code_verifier does not match, a refresh token was used twice, access was withdrawn, or the tester was removed.
Fix: Start the sign-in again. Swap each code once, straight away, with the same redirect_uri and the verifier you kept.
unsupported_grant_type
Cause: grant_type is not authorization_code or refresh_token.
Fix: Use one of the two.
invalid_token
Cause: Not an access token (ID tokens are refused), expired (15 minutes), the account is suspended, access was withdrawn, or the app is suspended.
Fix: Refresh the access token, or sign the person in again. Never send an ID token to userinfo.
rate_limited
Cause: Over your quota for this bucket, this minute or this day.
Fix: Wait the Retry-After seconds. Requests over the limit still count, so a retry loop keeps you over it.
invalid_key
Cause: No API key was sent, or it is not one of ours, expired or revoked.
Fix: Send Authorization: Bearer with a key from the app's API keys page.
missing_right
Cause: The key does not carry the right this call needs.
Fix: Make a key with the right (app:read or usage:read).
not_found
Cause: The application this key belonged to has been removed.
Fix: Use a key of an app that still exists.
server_error
Cause: Something went wrong at our end.
Fix: Try again in a moment. If it keeps happening, check the status page and tell us in the chat.
Pregunte a Atlas
Asistente de IAPregunte lo que quiera sobre Iniciar sesión con Atheron, la API o el portal. La respuesta sale de nuestra documentación, con enlaces a las páginas usadas.