Docs
Quickstart
Kunavo is OpenAI-wire-compatible. If you already use the OpenAI SDK, all you change is the base URL. Five minutes from zero to your first frontier-model call.
Kunavo is an independent, OpenAI-compatible AI API gateway: one API key and one pay-as-you-go balance reach Claude, GPT and image, video and audio models, with no per-provider account required. The whole onboarding is four steps. The first three are one-time. The fourth — making a call — is just a base_url swap.
1. Create an account
Sign up at kunavo.com/app/login with Google or email magic link. It's pay-as-you-go and starts from a $10 top-up — your balance never expires, and failed requests are never billed.
2. Create an API key
Open /app/keys in the dashboard and click New key. Keys start with sk-kn- and are shown only once at creation — copy and store securely.
Recommended hygiene:
- One key per project / environment (dev, staging, prod).
- Rotate keys on incident or every quarter.
- Set a per-key monthly spend cap if you script-call from CI.
3. Fund your wallet
Go to /app/billing and top up via Stripe Checkout. Cards are offered everywhere Stripe reaches, and Apple Pay, Google Pay and Link everywhere except India; local methods appear by country — for example ACH in the US, Pix in Brazil, UPI in India, KakaoPay in South Korea, iDEAL in the Netherlands, BLIK in Poland (the full list is in the billing reference; PayPal and SEPA Direct Debit are not offered). Top-ups start from $10 — enough to try every model on a real key — and balance never expires.
- Pay-as-you-go: usage is deducted from your wallet in real time, no subscription.
- Volume bonuses apply: $100 → +$10, $1,000 → +$200, $5,000 → +$1,250.
- Statement descriptor on your card:
KUNAVO.COM* TOPUP.
4. Make your first call
Pick any enabled model from the catalog. Below: a cheap, fast claude-haiku-4-5 chat call so you can verify the wiring.
Python (OpenAI SDK)
The openai Python package (v1+) works out of the box — just point base_url at Kunavo.
from openai import OpenAI
client = OpenAI(
api_key=os.environ["KUNAVO_API_KEY"],
base_url="https://api.kunavo.com/v1",
)
resp = client.chat.completions.create(
model="claude-haiku-4-5",
messages=[{"role": "user", "content": "Say hi in one sentence."}],
)
print(resp.choices[0].message.content)Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.KUNAVO_API_KEY,
baseURL: "https://api.kunavo.com/v1",
});
const resp = await client.chat.completions.create({
model: "claude-haiku-4-5",
messages: [{ role: "user", content: "Say hi in one sentence." }],
});
console.log(resp.choices[0].message.content);curl
curl https://api.kunavo.com/v1/chat/completions \
-H "Authorization: Bearer $KUNAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-haiku-4-5",
"messages": [{"role": "user", "content": "Say hi in one sentence."}]
}'/app/usage within seconds.Other modalities
The same SDK handles images and video. Endpoints are OpenAI-named where possible.
Image generation
Use any of the image models — Nano Banana, Nano Banana 2, Nano Banana Pro and GPT-Image-2. See image docs.
img = client.images.generate(
model="nano-banana",
prompt="a tiny red origami crane on a white desk",
size="1024x1024",
)
print(img.data[0].url)Streaming chat
Set stream=True. Streaming works on every chat model — the full Claude and GPT families. The response is server-sent events in OpenAI's standard format.
stream = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Tell me a 2-line haiku about CI/CD."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Where to go next
- Authentication — full API key + base URL reference.
- Chat completions — parameters, streaming, tool calls, vision.
- Billing — how the markup formula and credit ledger work.
- Errors — HTTP codes and retry strategy.