BerriAI/litellm · error · XAIOAuthError

xAI authorization failed: no code returned

Error message

xAI authorization failed: no code returned

What it means

XAIOAuthError raised when the OAuth callback completed without an authorization code: state matched but no 'code' came back, so there is nothing to exchange at the token endpoint and login must be retried.

Source

Thrown at litellm/llms/xai/oauth.py:154

            redirect_uri=redirect_uri,
            challenge=challenge,
            state=state,
            nonce=nonce,
        )

        if no_browser or not webbrowser.open(authorize_url):
            sys.stdout.write(f"Open this URL to authenticate with xAI:\n{authorize_url}\n")
            sys.stdout.flush()

        result: Final = self._wait_for_callback(server)
        if result.get("state") != state:
            raise XAIOAuthError("xAI OAuth state mismatch")
        if result.get("error"):
            description: Final = result.get("error_description") or result["error"]
            raise XAIOAuthError(f"xAI authorization failed: {description}")
        code: Final = result.get("code")
        if not code:
            raise XAIOAuthError("xAI authorization failed: no code returned")

        token_payload: Final = self._exchange_token(
            discovery["token_endpoint"],
            {
                "grant_type": "authorization_code",
                "code": code,
                "redirect_uri": redirect_uri,
                "client_id": XAI_OAUTH_CLIENT_ID,
                "code_verifier": verifier,
            },
        )
        auth_data: Final = self._build_auth_record(token_payload, discovery["token_endpoint"])
        self._write_auth_file(auth_data)
        return auth_data

    def _client(self) -> httpx.Client | HTTPHandler:
        return self.http_client or _get_httpx_client()

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Retry the OAuth login; the authorization response returned no code, usually due to a denied or incomplete consent.
  2. Verify the redirect URI configuration and that the browser flow completed successfully.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at litellm/llms/xai/oauth.py:154 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/cb18aea34a545475. Report an issue: GitHub.