Gemini CLI
Gemini CLI is Google’s terminal assistant, and it speaks the Gemini API natively. MirAPI implements the Gemini protocol at POST /v1beta/models/{model}:generateContent, so you can point Gemini CLI at MirAPI with two environment variables. You do not need a proxy or a plugin.
What you need
Section titled “What you need”| Element | Value |
|---|---|
| Base URL | https://api.mirapi.ai (the CLI appends /v1beta itself) |
| API key | Your MirAPI key (sk-...), passed through GEMINI_API_KEY |
| Model | deepseek-chat, set with the /model command |
Configure
Section titled “Configure”- Create a key in https://platform.mirapi.ai → API Keys and export it:
export MIRAPI_API_KEY=sk-...- Export the connection variables. Add them to your shell profile (
~/.zshrc,~/.bashrc, or~/.config/fish/config.fish) so they persist:
export GEMINI_API_KEY="$MIRAPI_API_KEY"export GOOGLE_GEMINI_BASE_URL="https://api.mirapi.ai"- Reload your shell and start Gemini CLI:
source ~/.zshrc # or ~/.bashrc, or open a new terminalgeminiVerify with a message
Section titled “Verify with a message”Run a one-shot prompt:
gemini -p "Reply with exactly: connected to MirAPI"The reply should contain connected to MirAPI. Before you start Gemini CLI, confirm that the key and catalog are reachable:
curl https://api.mirapi.ai/v1beta/models -H "x-goog-api-key: $GEMINI_API_KEY"On Gemini paths, the gateway accepts the key via the x-goog-api-key header or the ?key= query parameter.
Environment variables
Section titled “Environment variables”Three of the variables Gemini CLI reads matter here:
| Variable | Purpose | Value for MirAPI |
|---|---|---|
GEMINI_API_KEY |
The key sent as x-goog-api-key |
Your MirAPI key (sk-...) |
GOOGLE_API_KEY |
Google Cloud API key (Vertex AI) | Leave unset; MirAPI uses GEMINI_API_KEY |
GOOGLE_GEMINI_BASE_URL |
Overrides the API base URL | https://api.mirapi.ai (the CLI appends /v1beta) |
Set exactly one key variable to avoid stale credentials. If a real Google key is still exported elsewhere, Gemini CLI may pick it up instead.
Protocol and capabilities
Section titled “Protocol and capabilities”Gemini CLI speaks only the Gemini API; you cannot switch it to the OpenAI Chat Completions or Anthropic Messages surface. MirAPI serves the Gemini route at POST /v1beta/models/{model}:generateContent. Set GOOGLE_GEMINI_BASE_URL to the bare https://api.mirapi.ai, and the CLI appends /v1beta/models/{model}:generateContent itself.
Which capabilities work depends on the model you choose. Check supported_parameters and output_modalities in GET /v1/models before relying on tool calling, structured output, web search, reasoning, or image input. Responses stream as SSE, and reasoning content arrives before the final answer.
Switching models
Section titled “Switching models”Gemini CLI starts on a Google model by default. Switch it with the /model slash command:
/model deepseek-chatUse any model name from GET /v1/models, verbatim. The model must be on your key’s whitelist; otherwise the request fails with 403.
Errors and troubleshooting
Section titled “Errors and troubleshooting”| Status | Meaning | What to do |
|---|---|---|
| 401 | Key missing, invalid, or unknown | Fix the exported GEMINI_API_KEY |
| 403 | Key valid but rejected (balance, whitelist, quota, or IP) | Resolve the cause, then retry |
| 413 | Payload too large | Reduce the request size |
| 429 | Rate limited | Jittered exponential backoff (1s→2s→4s, cap ~30s); no Retry-After header |
| 500 | Gateway or upstream error | Idempotent requests can be retried safely |
The gateway does not retry on your behalf. Every error message ends with the MirAPI request ID; include it when you open a support ticket.
Billing
Section titled “Billing”- Conversations are billed per token (input, output, and cache read, in USD per 1M tokens). Reasoning and thinking tokens count as output.
- Gemini CLI usage is drawn from a prepaid balance: no subscription, no minimum, and the balance never expires.
- When the balance runs out, requests fail with 403; after you top up, the same key works again immediately.
- Reconcile usage in the Platform billing log,
GET /api/usage/token(account-level summary), orGET /api/log/token(per-request detail).
Troubleshooting
Section titled “Troubleshooting”- Keep the base URL bare. Gemini CLI appends
/v1beta/models/{model}:generateContentitself, so adding/v1betato the base URL produces a doubled/v1betapath. - Model names are verbatim. The model must appear in
GET /v1/models;vendor/prefixes are Platform-only and not part of a request. - 403 with a valid key usually means the model is not whitelisted for the key or the balance is exhausted. Top up or adjust the key, then retry.
- Multimodal input works only when the selected model supports image input; screenshots and files Gemini CLI sends as images need a vision-capable model.