---
title: "Provider keys"
description: "Connect your own provider keys, order fallbacks, and understand free and multi-key pricing."
canonical_url: "https://minirouter.sh/docs/byok"
markdown_url: "https://minirouter.sh/docs/byok.md"
last_updated: "2026-09-26"
---

# Provider keys

Use your OpenAI, Anthropic or DeepSeek keys. One key per provider is free; add fallbacks for 3%.

[Manage provider keys](https://minirouter.sh/dashboard/provider-keys)

## Pricing by provider

- **One enabled key**: 0% MiniRouter service fee for that provider.
- **Multiple enabled keys**: 3% of that provider's published-rate usage, including a first-key success.

Your provider bills inference separately. Private discounts, provider credits and taxes do not reduce the 3% reference fee.

### How the fee works across providers

| Configuration | MiniRouter fee |
| --- | --- |
| One OpenAI key | 0% for OpenAI. |
| One OpenAI + one Anthropic key | 0% for each provider. |
| Two OpenAI + one Anthropic key | 3% on OpenAI usage; 0% on Anthropic usage. |
| One enabled + one disabled backup | 0%. Disabled keys do not count. |

The enabled-key count is frozen when each request is admitted. Temporary health or balance state does not change the fee.

## Qualified requests

Text generation and OpenAI embeddings, sent directly to your provider. Copy a model ID and use its supported endpoint.

### OpenAI
| Model ID | Endpoint |
| --- | --- |
| `openai/gpt-6-astra` | /v1/chat/completions, /v1/responses |
| `openai/gpt-6-sol` | /v1/chat/completions, /v1/responses |
| `openai/gpt-6-luna` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.6-sol` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.6-terra` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.6-luna` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.5` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.5-pro` | /v1/responses |
| `openai/gpt-5.4` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.4-mini` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.4-nano` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.4-pro` | /v1/responses |
| `openai/gpt-5.2` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5.3-codex` | /v1/responses |
| `openai/gpt-5.2-codex` | /v1/responses |
| `openai/gpt-5.2-pro` | /v1/responses |
| `openai/gpt-5.1-thinking` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5-mini` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5-nano` | /v1/chat/completions, /v1/responses |
| `openai/gpt-5-pro` | /v1/responses |
| `openai/o3` | /v1/chat/completions, /v1/responses |
| `openai/o4-mini` | /v1/chat/completions, /v1/responses |
| `openai/o3-pro` | /v1/responses |
| `openai/gpt-4.1` | /v1/chat/completions, /v1/responses |
| `openai/gpt-4.1-mini` | /v1/chat/completions, /v1/responses |
| `openai/gpt-4.1-nano` | /v1/chat/completions, /v1/responses |
| `openai/gpt-4o` | /v1/chat/completions, /v1/responses |
| `openai/gpt-4o-mini` | /v1/chat/completions, /v1/responses |
| `openai/gpt-4-turbo` | /v1/chat/completions, /v1/responses |
| `openai/text-embedding-3-small` | /v1/embeddings |
| `openai/text-embedding-3-large` | /v1/embeddings |
| `openai/text-embedding-ada-002` | /v1/embeddings |

### Anthropic
| Model ID | Endpoint |
| --- | --- |
| `anthropic/claude-fable-5.1` | /v1/messages |
| `anthropic/claude-opus-5.5` | /v1/messages |
| `anthropic/claude-sonnet-5` | /v1/messages |
| `anthropic/claude-haiku-4.5` | /v1/messages |
| `anthropic/claude-sonnet-4.5` | /v1/messages |
| `anthropic/claude-sonnet-4.6` | /v1/messages |
| `anthropic/claude-opus-4.5` | /v1/messages |
| `anthropic/claude-opus-4.6` | /v1/messages |
| `anthropic/claude-opus-4.7` | /v1/messages |
| `anthropic/claude-opus-4.8` | /v1/messages |

### DeepSeek
| Model ID | Endpoint |
| --- | --- |
| `deepseek/deepseek-v4.1-flash` | /v1/chat/completions |
| `deepseek/deepseek-v4-pro` | /v1/chat/completions |
| `deepseek/deepseek-v4-pro-0813` | /v1/chat/completions |

### Endpoints, tools and limitations

Use /v1/chat/completions, /v1/responses, /v1/messages or /v1/embeddings to match the endpoint listed for your model.

Chat Completions and Messages accept supported client-defined function tools. GPT-6 Sol and Luna require reasoning_effort: none for Chat Completions with tools. Responses supports text-only requests: tools, reasoning summaries and encrypted reasoning content stop before provider dispatch. A listed Codex model does not mean full Codex CLI compatibility.

Claude Fable 5.1 and Opus 5.5 use adaptive thinking. If you set thinking.type, use adaptive; forced tool choices (any or a specific tool) are not supported.

Only synchronous text generation and input-only embeddings at standard public pricing are qualified. Images, audio, built-in provider tools, batch, flex, fast and regional pricing modes are not qualified.

MiniRouter sends own-key requests directly to the provider using your encrypted key. Vercel AI Gateway is not in this request path. Your provider account must have access to the model. Unqualified requests stop before provider dispatch.

## Set up a pool

1. **Save**: Name and encrypt a provider key.
2. **Group and order**: Group keys sharing provider funds, then set priority.
3. **Enable**: Acknowledge 3% before enabling a second key.

Provider keys are available to every account. Own-key mode remains off until you save your first enabled key or turn on a saved provider pool. Add and rotate credentials in [Provider keys](https://minirouter.sh/dashboard/provider-keys). A newly saved second key stays disabled until you enable it. Funding-account labels are customer-provided unless the provider confirms the scope.

Own-key mode applies per provider. Enable an OpenAI key and OpenAI requests use your keys; Anthropic, DeepSeek and other providers continue using MiniRouter credits unless you enable their own-key pools.

| Action | Result |
| --- | --- |
| Disable or revoke the last key | That provider stays in own-key mode and its requests stop. Other providers are unchanged. |
| Stop using one provider's keys | That provider returns to MiniRouter keys at normal pricing. Other provider pools are unchanged. |
| Stop using the last active pool | All providers now use MiniRouter keys at normal pricing. |

## What switching can do

| Signal | Result |
| --- | --- |
| Insufficient provider credit | Try the next eligible independent key. |
| Temporary rate limit | Honor Retry-After, cool down the shared funding account, and try the next independent eligible key. |
| Invalid or revoked key | Stop using it until you replace or revalidate it. |
| Model permission error | Return without trying another key. The credential remains available for other models. |
| Invalid request | Return the error without switching keys. |
| Ambiguous timeout or partial stream | Do not replay work that the provider may already have billed. |

At most three upstream dispatches are authorized. An ambiguous timeout or a stream that started is not blindly replayed.

## Balances

- **Provider reported**: Shown with its freshness when the provider offers a suitable balance API.
- **Unavailable**: No amount is invented. Confirmed credit failures can still move to another key.
- **MiniRouter budget**: Set an external-spend cap and low-balance threshold. They cover traffic MiniRouter sees, not direct requests.

## When own keys cannot serve

If an enabled provider pool has no qualified eligible key, its requests stop without switching to MiniRouter credits. Providers whose pools are off or unconfigured use MiniRouter credits normally. Earlier own-key attempts may still appear on your provider invoice.

## Receipts

Recent receipts in [Provider keys](https://minirouter.sh/dashboard/provider-keys) keep provider reference usage, the applied 0% or 3% rate, collected fee and any waiver separate. The provider invoice remains separate.
