Skip to content

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.

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
  1. Create a key in https://platform.mirapi.ai → API Keys and export it:
Terminal window
export MIRAPI_API_KEY=sk-...
  1. Export the connection variables. Add them to your shell profile (~/.zshrc, ~/.bashrc, or ~/.config/fish/config.fish) so they persist:
Terminal window
export GEMINI_API_KEY="$MIRAPI_API_KEY"
export GOOGLE_GEMINI_BASE_URL="https://api.mirapi.ai"
  1. Reload your shell and start Gemini CLI:
Terminal window
source ~/.zshrc # or ~/.bashrc, or open a new terminal
gemini

Run a one-shot prompt:

Terminal window
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:

Terminal window
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.

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.

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.

Gemini CLI starts on a Google model by default. Switch it with the /model slash command:

/model deepseek-chat

Use any model name from GET /v1/models, verbatim. The model must be on your key’s whitelist; otherwise the request fails with 403.

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.

  • 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), or GET /api/log/token (per-request detail).
  • Keep the base URL bare. Gemini CLI appends /v1beta/models/{model}:generateContent itself, so adding /v1beta to the base URL produces a doubled /v1beta path.
  • 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.