Docs
Apigator is OpenAI-compatible. Point any OpenAI SDK at the base URL, pass your Apigator key, and call hundreds of models — chat, image, audio, embeddings — through one endpoint.
Looking for task recipes & tool integrations (LangChain, Vercel AI SDK, Cursor, Cline)? See the Cookbook.
No card needed — free models run on a brand-new key.
Get a key in the Dashboard and make your first call right away with a free model — it bills $0, so no top-up required. Paid models unlock once you add a balance.
curl https://api.apigator.ai/v1/chat/completions \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"free/nemotron-nano-30b","messages":[{"role":"user","content":"Hello from Apigator!"}]}'from openai import OpenAI
client = OpenAI(base_url="https://api.apigator.ai/v1", api_key="sk-YOUR_KEY")
resp = client.chat.completions.create(
model="free/nemotron-nano-30b", # free — no balance needed
messages=[{"role": "user", "content": "Hello from Apigator!"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apigator.ai/v1", apiKey: "sk-YOUR_KEY" });
const r = await client.chat.completions.create({
model: "free/nemotron-nano-30b", // free — no balance needed
messages: [{ role: "user", content: "Hello from Apigator!" }],
});
console.log(r.choices[0].message.content); free/nemotron-nano-30bfree/nemotron-super-120bfree/gemma-4-31b Swap the base URL — that's the whole integration. Pick your language:
curl https://api.apigator.ai/v1/chat/completions \
-H "Authorization: Bearer sk-..." \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello!"}]}'from openai import OpenAI
client = OpenAI(base_url="https://api.apigator.ai/v1", api_key="sk-...")
resp = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apigator.ai/v1", apiKey: "sk-..." });
const r = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(r.choices[0].message.content); Base URL https://api.apigator.ai/v1 · Auth Authorization: Bearer sk-YOUR_KEY (get a key in the Dashboard).
Not everything is chat. Each model on /models lists the endpoint it uses — pick the right one. Same base URL, same key.
| Modality | Endpoint | Model id example |
|---|---|---|
| Chat | POST /v1/chat/completions | gpt-4o |
| Image generation | POST /v1/images/generations | openai/gpt-image-1, fal_ai/fal-ai/flux/schnell |
| Text-to-Speech | POST /v1/audio/speech | elevenlabs-tts |
| Speech-to-Text | POST /v1/audio/transcriptions | groq/whisper-large-v3 |
| Embeddings | POST /v1/embeddings | openai/text-embedding-3-small |
| Video gen (async) | POST /v1/videos | gemini/veo-3.1-fast-generate-preview |
Python examples assume the client from Quick start.
curl https://api.apigator.ai/v1/images/generations \
-H "Authorization: Bearer sk-..." \
-d '{"model":"openai/gpt-image-1","prompt":"a red crocodile mascot","n":1}'client.images.generate(model="openai/gpt-image-1", prompt="a red crocodile mascot", n=1)const img = await client.images.generate({
model: "openai/gpt-image-1",
prompt: "a red crocodile mascot",
n: 1,
}); curl https://api.apigator.ai/v1/embeddings \
-H "Authorization: Bearer sk-..." \
-d '{"model":"openai/text-embedding-3-small","input":"hello world"}'client.embeddings.create(model="openai/text-embedding-3-small", input="hello world")const e = await client.embeddings.create({
model: "openai/text-embedding-3-small",
input: "hello world",
}); curl https://api.apigator.ai/v1/audio/speech \
-H "Authorization: Bearer sk-..." \
-d '{"model":"elevenlabs-tts","input":"Hello","voice":"21m00Tcm4TlvDq8ikWAM"}' \
--output speech.mp3with client.audio.speech.with_streaming_response.create(
model="elevenlabs-tts", voice="21m00Tcm4TlvDq8ikWAM", input="Hello",
) as r:
r.stream_to_file("speech.mp3")import fs from "fs";
const mp3 = await client.audio.speech.create({
model: "elevenlabs-tts", voice: "21m00Tcm4TlvDq8ikWAM", input: "Hello",
});
fs.writeFileSync("speech.mp3", Buffer.from(await mp3.arrayBuffer())); voice must be an ElevenLabs voice id, not a name. Full audio guide: /audio.md.
Browse every callable model (with pricing + the endpoint each uses) at apigator.ai/models, or call GET https://api.apigator.ai/v1/models. Everything except Claude is open to every key by default; Claude is allowlist-gated and runs on a separate Anthropic-compatible endpoint — see Claude Code CLI.
Wiring up a client for your user? Fetch these raw markdown files and follow them verbatim.
/api.md
Full API integration guide — base URL, auth, model ids, every endpoint.
/audio.md
Audio APIs in detail: TTS (voice_id rule), Music, Speech-to-Text.
/llms.txt
Discovery index for agents (the standard llms.txt format).
/claude-cli.md
Claude Code CLI setup against the Anthropic-compatible endpoint.
401 — missing or invalid key.403 claude_not_allowed — Claude not enabled for this key (ask MixerBox to allowlist you).400 — bad request (e.g. a provider constraint like Perplexity's minimum max_tokens).404 model not available — id not enabled upstream; pick another from /models.