# Providers (/docs/providers)

AI Wallet holds the accounts. Your site works the same with every one of them, since the wallet translates the shared chat format to each provider's own API and back. The accounts come from the `@aiconnect/connectors` package, which only the extension uses.

Each account has its own page: what the visitor needs, how its sign in runs in the wallet, how its models are listed, what the wallet reads of its usage, and the issues its code works around.

## Supported accounts [#supported-accounts]

The wallet lists sign ins first, then API keys, in this order.

| Account | How the visitor connects it | Paid from | Default model | Model list in the wallet |
| --- | --- | --- | --- | --- |
| [Claude plan](/docs/providers/claude) | Sign in on claude.ai. The wallet reads the address the sign in window lands on. | Plan | `claude-sonnet-5-5` | Yes |
| [ChatGPT plan](/docs/providers/chatgpt) | Sign in, then approve a code on OpenAI's device page. | Plan | `gpt-6-luna` | Yes |
| [Gemini plan](/docs/providers/gemini) | Google sign in. The wallet reads the address the sign in window lands on. | Plan | The model Google gives the account at sign in, else `gemini-3.8-flash-medium` | Yes |
| [Grok](/docs/providers/grok) | Sign in, then approve a code on xAI's page. | Plan | `grok-4.6` | No |
| [OpenRouter](/docs/providers/openrouter) | Sign in on openrouter.ai in Chrome's sign in window. OpenRouter issues a key on the visitor's credits. | Credits | `openrouter/auto` | Yes, chosen in the account's settings |
| [Qwen](/docs/providers/qwen) | Sign in, then approve a code. | Plan | `qwen3.8-max` | No |
| [Kimi](/docs/providers/kimi) | Sign in, then approve a code. | Plan | `kimi-for-coding` | No |
| [GLM](/docs/providers/glm) | Sign in and approve on Z.ai. The wallet then creates a coding plan key on the account. | Plan | `glm-5.3` | No |
| [MiniMax](/docs/providers/minimax) | Sign in, then approve a code. | Plan | `MiniMax-M3` | No |
| [Muse](/docs/providers/muse) | Sign in, then approve a code. Meta trades the token for a lasting API key. | Plan | `muse-spark-1.3` | No |
| [MiMo](/docs/providers/mimo) | Authorize on the MiMo platform in Chrome's sign in window. MiMo returns the account's API key encrypted for the wallet. | Plan | `mimo-v2.6-pro` | No |
| [CodeBuddy](/docs/providers/codebuddy) | Sign in and approve on codebuddy.ai. | Plan | The first model of the account's catalog that calls tools, else `deepseek-v4-pro` | No |
| [Nous Portal](/docs/providers/nous) | Sign in, then approve a code. | Credits | `Hermes-4-405B` | No |
| [Claude API key](/docs/providers/anthropic-key) | API key from Anthropic | API key | `claude-haiku-5-5` | Yes |
| [OpenAI API key](/docs/providers/openai-key) | API key from OpenAI | API key | `gpt-6-luna` | Yes |
| [Gemini API key](/docs/providers/gemini-key) | API key from Google | API key | `gemini-3.8-flash` | Yes |
| [Mistral API key](/docs/providers/mistral-key) | API key from Mistral | API key | `mistral-large-latest` | Yes |
| [DeepSeek API key](/docs/providers/deepseek-key) | API key from DeepSeek | API key | `deepseek-chat` | Yes |
| [NVIDIA API key](/docs/providers/nvidia-key) | API key from NVIDIA | API key | `nvidia/nemotron-3.5-super-vl` | No |
| [Perplexity API key](/docs/providers/perplexity-key) | API key from Perplexity | API key | `sonar-pro` | No |

The wallet names the Claude plan and the Claude API key both "Claude", and the Gemini plan and the Gemini API key both "Gemini". The first of each pair sits under "With your plan" and the second under "With an API key".

### Who pays [#who-pays]

- **Plan.** The answer counts against the visitor's subscription with that provider, within the plan's own limits.
- **Credits.** The provider bills the visitor's prepaid credits on that account.
- **API key.** The provider bills the account that owns the key.

### How sign ins finish [#how-sign-ins-finish]

The wallet opens the provider's own sign in page in a window, and the sign in finishes in one of three ways:

- **A code to approve.** ChatGPT, Grok, Qwen, Kimi, MiniMax, Muse and Nous Portal show a code in the side panel, and the visitor approves it on the provider's page. GLM and CodeBuddy ask the visitor to sign in and approve in the window, with no code. The wallet checks the approval each time a page finishes loading in the window and when the window closes. An "I approved it" button checks again.
- **An address the window lands on.** Claude and Gemini send the window back to a local address that does not load. The wallet reads that address from the window as soon as it lands there and closes the window. The visitor can also paste the address into the wallet.
- **A return to the wallet.** OpenRouter and MiMo run in Chrome's own sign in window, which returns to the wallet's callback address.

The side panel also offers to open the provider's window again and to cancel the sign in. When a check fails, it shows why.

API keys are pasted in the wallet and go into the vault. The wallet saves the key as pasted, without the spaces around it, and makes no test call. A wrong key shows up as the provider's error on the first answer.

When a sign in returned a refresh token, the wallet renews the access token on the first call made from one minute before its expiry onward. The accounts whose sign in ends with a key (OpenRouter, GLM, Muse and MiMo) keep that key until the visitor removes the account.

## The account each site answers with [#the-account-each-site-answers-with]

- The first account the visitor connects becomes the default. The visitor can pick another default in the side panel, under "New sites answer with".
- A site starts on the default account when the visitor approves it.
- In the side panel, the visitor gives each site its own account with one tap, or Auto. Your open pages receive the change as a link notice and show the new `providerName`.
- When the visitor removes an account, the sites that answered with it move to the default account that remains.

## Model choice [#model-choice]

Each account answers with its own model: the default model in the table above, the model its sign in reported, or the one the visitor picked in the account's settings under "Default model". The settings show that list for every account whose provider has one.

A site that answers with a single account can use another model of that account. The side panel shows three models of the account as buttons, with the chosen one among them, and More opens the full list. The list has a search field when it holds more than eight models. The choice is saved for that site alone, and giving the site another account clears it. A site on Auto answers with each account's own model.

Your site receives the model it answers with as `model` in its connection state: the model picked for your site, else the account's own model.

The wallet asks each provider for its model list with the account's own credential and keeps the list for a day:

- the ChatGPT and Gemini plans list the models of the plan;
- the Claude plan and Claude keys list Anthropic's catalog;
- OpenAI, Mistral, DeepSeek and Gemini keys list their chat models;
- OpenRouter lists its whole catalog with its Auto Router first, and the visitor picks from it in the account's settings, since the catalog is too long to pick from on every site.

The other accounts answer with their default model, and the side panel shows no model buttons for them. When a list request fails, the wallet shows no models for the account, and the account answers with its own model.

## The room meter [#the-room-meter]

Each key card in the wallet carries a stripe that shows how much room the account has left, from 0 to 100 percent. The wallet reads it from the headers the provider returns on the wallet's own calls:

| Account | Headers | Room |
| --- | --- | --- |
| Claude plan | `anthropic-ratelimit-unified-5h-utilization` and `anthropic-ratelimit-unified-7d-utilization` | One minus the higher of the two |
| ChatGPT plan | `x-codex-primary-used-percent` and `x-codex-secondary-used-percent` | One minus the higher of the two, as a share |
| Any account whose answers report token limits | `x-ratelimit-remaining-tokens` and `x-ratelimit-limit-tokens` | Remaining divided by limit |

An account reads as spent, with no room, when Claude answers `anthropic-ratelimit-unified-status: rejected` or ChatGPT returns `x-codex-rate-limit-reached-type`.

The wallet matches each response to its account by the credential its request carried, in the `Authorization`, `x-api-key` or `x-goog-api-key` header. It reads only its own calls, and only while the vault is unlocked.

The stripe goes from red at no room through orange at half to green for an untouched plan. The card says "Plenty of room" from 60 percent, "Some room" from 25 percent, and "Little room" below. An account has no reading until an answer carries one of these headers, and its card says "Usage shows after the first answer" until then.

The readings stay in the wallet. Removing an account forgets its reading. Sites do not receive them.

## Request options each account leaves out [#request-options-each-account-leaves-out]

Your site's request may carry `maxTokens`, `temperature`, `topP` and `stop` in its options. An account whose endpoint refuses one of them leaves it out of the call:

| Account | Left out |
| --- | --- |
| ChatGPT plan | `maxTokens`, `temperature`, `topP` and `stop` |
| Grok | `stop` |
| Claude plan and Claude API key | `temperature` and `topP` |

The Claude plan, the Claude API key and MiniMax speak Anthropic's Messages protocol, which requires an output limit on every call. They ask for 4096 tokens when your site sets no `maxTokens`. A tool choice and a response format always reach the provider.

An image sent as a `data:` URL reaches every account. The Gemini plan reads images inline only, and the wallet answers an image sent to it as an https URL with an error. The [AI SDK guide](/docs/guides/existing-sdks#what-the-wallet-takes-from-a-request) lists what the wallet takes from an SDK's request.

## Auto [#auto]

A site set to Auto answers with an account that has room, and moves to another when a plan is spent. The site sees `providerName: 'Auto'` and no model.

For each answer, the wallet orders the connected accounts:

1. The account that last answered this site comes first when it answered less than 10 minutes ago and is not spent, because a provider's prompt cache belongs to one account.
2. The accounts with a reading above zero follow, the most room first.
3. The accounts with no reading yet come next, the default account first.
4. The spent accounts come last.

The wallet tries the accounts in that order. When an account fails before any text has streamed, for example with a 429 from a spent plan, the next account answers in its place. Once text has streamed, an error ends the answer, so the text of one answer comes from one account. Each account answers with its own model.

The side panel shows which account is answering the site in the current tab, and follows Auto when it moves to the next account.
