Documentation

Get started in 2 minutes.

The Geraikita AI API supports two formats at once: OpenAI Chat Completions and Anthropic Messages. Use the OpenAI SDK, Anthropic SDK, Claude Code CLI, Cline, and other tools — just change the base URL and API key.

Base URL (OpenAI)https://ai.geraikita.com/v1
Base URL (Anthropic)https://ai.geraikita.com
AuthenticationBearer gk-... (or x-api-key: gk-...)
Important — don't write /v1 twice.
OpenAIhttps://ai.geraikita.com/v1OpenAI clients append /chat/completions to the base URL — so the base ends with /v1.
Anthropic / Claude Code CLIhttps://ai.geraikita.comAnthropic clients (Claude Code CLI, Anthropic SDK) append /v1/messages themselves — so the base goes without /v1.

Get it wrong and the path becomes /v1/v1/messages → 400 error.

The free tier (Bansos) uses a SEPARATE KEY — not your paid key.

A bansos key must be claimed first on the Bansos page (login + verified WhatsApp + joining the Telegram channel & group, free, one key per account). A paid gk- key from the Dashboard does not work on the bansos endpoint, and vice versa — mixing them up returns 401 unauthorized.

The bansos base URL is also different from the paid one above:

Bansos base URLhttps://ai.geraikita.com/v1/claude
OpenAIhttps://ai.geraikita.com/v1/claude/chat/completions
Anthropic / Claude Code CLIANTHROPIC_BASE_URL=https://ai.geraikita.com/v1/claudeThe SDK appends /v1/messages itself → https://ai.geraikita.com/v1/claude/v1/messages.
Model discoveryGET https://ai.geraikita.com/v1/claude/models

Free models: deepseek-v4-flash, glm-5.3-flash, qwen3.8-flash, qwen3.8-max. Other models return 404; the current list is at GET /models.

Everything else is exactly the same as the paid endpoint.

Authentication

Every request carries your gk- API key in the Authorization: Bearer gk-... header. Keys are created in the dashboard and shown only once at creation — store them safely. You can restrict each key to specific models (allowlist).

First request

from openai import OpenAI

client = OpenAI(
    base_url="https://ai.geraikita.com/v1",
    api_key="gk-xxxxxxxx",
)
resp = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Halo!"}],
)
print(resp.choices[0].message.content)

Claude Code CLI

Claude Code uses the Anthropic format. Set the base URL to the root (https://ai.geraikita.com — without /v1), then run claude. Use the models claude-sonnet-5 / claude-opus-5 / claude-haiku-4-5.

# Base URL = ROOT without /v1 (Claude Code appends /v1/messages itself)
export ANTHROPIC_BASE_URL="https://ai.geraikita.com"
export ANTHROPIC_AUTH_TOKEN="gk-xxxxxxxx"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"

claude

Cline & other tools

Cline / Roo (OpenAI Compatible): provider OpenAI Compatible, Base URL https://ai.geraikita.com/v1, API key gk-..., Model ID claude-sonnet-5.

Cline (Anthropic): provider Anthropic, Base URL https://ai.geraikita.com, API key gk-....

Does your tool auto-discover models? The GET https://ai.geraikita.com/v1/models endpoint is available. If there is a "Gateway base URL" field that automatically appends /v1/models, fill it with https://ai.geraikita.com (root) so it doesn't become /v1/v1/models.

OpenCode

OpenCode reads its providers from a config file. Register Geraikita as an OpenAI-compatible provider in ~/.config/opencode/opencode.json, or in a project-level opencode.json.

~/.config/opencode/opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "geraikita": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Geraikita AI",
      "options": {
        "baseURL": "https://ai.geraikita.com/v1",
        "apiKey": "{env:GERAIKITA_API_KEY}"
      },
      "models": {
        "claude-sonnet-5": { "name": "Claude Sonnet 5" },
        "gpt-5.6-sol": { "name": "GPT 5.6 Sol" },
        "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }
      }
    }
  }
}

Then export your key and start OpenCode. Pick the model with /models — it shows up as geraikita/claude-sonnet-5.

bash
export GERAIKITA_API_KEY=gk-xxxxxxxx
opencode

Important: the keys under models are sent to the API as-is, so they must match Geraikita's public model ids exactly.

Reminder: write the model name exactly as it appears on the pricing page — no prefix.

9router

9router is a local proxy that fans out to many providers and listens on http://localhost:20128. You don't point your tools at Geraikita directly — you register Geraikita as one of 9router's upstream providers.

  1. Open the 9router dashboard at http://localhost:20128/dashboard.
  2. Go to Providers and add a custom OpenAI-compatible endpoint: Base URL https://ai.geraikita.com/v1, API key gk-xxxxxxxx.
  3. Leave your coding tools pointing at 9router (http://localhost:20128/v1) and just select a Geraikita model — 9router forwards those requests to Geraikita.
9router dashboardhttp://localhost:20128/dashboard
Provider Base URLhttps://ai.geraikita.com/v1
API keygk-xxxxxxxx
Base URL for your toolshttp://localhost:20128/v1
bash
# your tool keeps pointing at 9router, not at Geraikita
export OPENAI_BASE_URL="http://localhost:20128/v1"

That way you keep 9router's routing and fallback across providers, while the tokens are paid from your Geraikita GeraiPoints.

Reminder: write the model name exactly as it appears on the pricing page — no prefix.

Hermes

Hermes (NousResearch's Hermes Agent) works with any OpenAI-compatible endpoint. Point it at Geraikita in ~/.hermes/config.yaml.

~/.hermes/config.yaml
model:
  default: claude-sonnet-5
  provider: custom
  base_url: https://ai.geraikita.com/v1
  api_key: gk-xxxxxxxx   # or put it in ~/.hermes/.env

Or run hermes model, choose Custom OpenAI-compatible endpoint, and enter the base URL plus your key — Hermes then discovers the available models itself via GET https://ai.geraikita.com/v1/models.

Reminder: write the model name exactly as it appears on the pricing page — no prefix.

GeraiPoints

1 GP = Rp1. You are billed per token from each request's real usage — no fixed per-request fee, only a small per-request minimum for each model (floor). Top up GeraiPoints in the dashboard; your balance never expires and works with any model. No subscriptions or monthly quotas.

Model list

The model values you can send. See the pricing page for each model's rates.

Write the model name EXACTLY as listed — no prefix. Send claude-sonnet-5, not gp/claude-sonnet-5 or openai/claude-sonnet-5. Some clients/CLIs prepend a provider name to the model (e.g. a profile named gp → the model reads gp/claude-sonnet-5) → the result is 404 unknown model. The gk- prefix is for API keys (the Authorization header), not for model names.
Token tier available. Models with the -token suffix (e.g. claude-opus-5-token) are the low-cost per-token option — billed per token like Premium, but through partner sellers. Same base URL https://ai.geraikita.com/v1, same API key.

Create an API key

Open the Dashboard → Create API key, give it a name, and (optionally) restrict it to specific models. The raw key is shown only once. Up to 5 active keys per account — revoke an old one to create a new one.

Error codes

StatusMeaning
400Wrong base URL / body — make sure there is no double /v1 (e.g. /v1/v1/messages)
401Invalid API key / wrong lane — paid key ≠ bansos key. Check the base URL: paid uses /v1, bansos uses /v1/claude
402Not enough GeraiPoints — please top up
403Model not allowed for this key
404Unknown model — send the EXACT MODEL NAME (e.g. claude-sonnet-5), no prefix. Names like gp/claude-sonnet-5 or openai/... will 404
429Too many requests