> ## Documentation Index
> Fetch the complete documentation index at: https://anaconda.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentication

export const Comments = ({children}) => {
  return <div class="my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border border-zinc-500/20 bg-zinc-50/50 dark:border-zinc-500/30 dark:bg-zinc-500/10" data-callout-type="comments">
      <div class="w-4">
        <svg width="14" height="14" viewBox="0 0 640 640" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" aria-label="Comments">
            <path d="M320 112C434.9 112 528 205.1 528 320C528 434.9 434.9 528 320 528C205.1 528 112 434.9 112 320C112 205.1 205.1 112 320 112zM320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM280 400C266.7 400 256 410.7 256 424C256 437.3 266.7 448 280 448L360 448C373.3 448 384 437.3 384 424C384 410.7 373.3 400 360 400L352 400L352 312C352 298.7 341.3 288 328 288L280 288C266.7 288 256 298.7 256 312C256 325.3 266.7 336 280 336L304 336L304 400L280 400zM320 256C337.7 256 352 241.7 352 224C352 206.3 337.7 192 320 192C302.3 192 288 206.3 288 224C288 241.7 302.3 256 320 256z" />
        </svg>
      </div>
      <div class="text-sm prose min-w-0 w-full">
        {children}
      </div>
    </div>;
};

export const GCell = ({children, className}) => <div className={`grid-table-cell ${className || ""}`} role="cell">
    {children}
  </div>;

export const GTH = ({children, className}) => <div className={`grid-table-th ${className || ""}`} role="columnheader">
    {children}
  </div>;

export const GRow = ({children}) => <div className="grid-table-row" role="row">{children}</div>;

export const GBody = ({children}) => <div className="grid-table-body" role="rowgroup">{children}</div>;

export const GHead = ({children}) => <div className="grid-table-head" role="rowgroup">{children}</div>;

export const GTable = ({children, className, cols}) => <div className={`grid-table not-prose overflow-hidden rounded-2xl ${className || ""}`} style={{
  "--grid-table-cols": cols
}} role="table">
    {children}
  </div>;

Before you can access Anaconda services, you need to authenticate. The login process takes a few seconds.

## Log in

```bash theme={null}
ana login [OPTIONS]
```

This opens your browser for OAuth authentication. Once you authorize, the CLI generates an API key and stores it in the keyring:

<Tabs>
  <Tab title="Windows">
    `C:\Users\<USER_NAME>\.anaconda\keyring`
  </Tab>

  <Tab title="macOS/Linux">
    `~/.anaconda/keyring`
  </Tab>
</Tabs>

All future `ana` commands authenticate automatically using this stored key until it expires.

<Note>
  The activation URL is always displayed in the terminal. If your browser does not open automatically (SSH sessions, containers, headless servers), follow the on-screen link to complete authentication.
</Note>

### Options

<GTable cols="30% 70%">
  <GHead>
    <GRow>
      <GTH>Option</GTH>
      <GTH>Description</GTH>
    </GRow>
  </GHead>

  <GBody>
    <GRow>
      <GCell>`-f, --force`</GCell>
      <GCell>Overwrite existing credentials without confirmation</GCell>
    </GRow>

    <GRow>
      <GCell>`--api-key`</GCell>
      <GCell>Prompt for an API key with hidden input instead of using the browser flow</GCell>
    </GRow>
  </GBody>
</GTable>

### Log in with an API key

If you already have an API key, you can skip the browser flow by passing it with the `--api-key` flag:

```bash theme={null}
ana login --api-key
```

You are prompted to enter your key securely (input is hidden).

### Non-interactive login for CI/CD

For pipelines, Docker builds, or other environments where no human is present, set the `ANACONDA_AUTH_API_KEY` environment variable instead of running `ana login`. All CLI commands use this key automatically when set.

Store your API key in your CI provider's secrets storage (such as GitHub Actions secrets or GitLab CI/CD variables) and expose it as `ANACONDA_AUTH_API_KEY` in your workflow. For Docker-specific guidance, see [Authenticated Docker builds](/getting-started/working-with-conda/integrations/docker-authentication).

<Warning>
  Never hardcode API keys in Dockerfiles or commit them to version control.
</Warning>

### Display your stored API key

```bash theme={null}
ana auth api-key
```

Prints the API key from the keyring. Useful for extracting your key to set as a CI secret:

```bash theme={null}
export ANACONDA_AUTH_API_KEY="$(ana auth api-key)"
```

## Display account information

```bash theme={null}
ana whoami
```

Displays your account information. Use the `--json` flag to output as JSON:

```bash theme={null}
ana whoami --json
```

## Log out

```bash theme={null}
ana logout
```

Removes your API key from the keyring. After logging out, a link is displayed to fully revoke the token on the web.

## What's next

With authentication in place, you can [enable features](/cli-reference/anaconda-cli/features) like the `main-x` channel to configure your package managers.
