Apigator by MixerBox

Docs

API reference

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, decisions — through one endpoint.

Looking for task recipes & tool integrations (LangChain, Vercel AI SDK, Cursor, Cline)? See the Cookbook.

Free quickstart

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. Every new account also starts with a $0.042 credit (≈ 1M tokens of the Jev decision model). 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

Quick start

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).

Endpoints by modality

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
Decision (Jev) POST /v1/decisions typesafe/jev-latest

Examples

Python examples assume the client from Quick start.

Image generation

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,
});

Embeddings

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",
});

Text-to-Speech

curl https://api.apigator.ai/v1/audio/speech \
  -H "Authorization: Bearer sk-..." \
  -d '{"model":"elevenlabs-tts","input":"Hello","voice":"21m00Tcm4TlvDq8ikWAM"}' \
  --output speech.mp3
with 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.

Decision model (TypeSafe Jev)

curl https://api.apigator.ai/v1/decisions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"typesafe/jev-latest","input":"Help! My payouts have been failing for 3 days.",
       "questions":[{"name":"is_urgent","type":"predicate","instructions":"Does this convey urgency?"},
                    {"name":"department","type":"choice","instructions":"Which team should handle this?",
                     "choices":[{"value":"billing"},{"value":"technical"},{"value":"sales"}]}]}'
# -> {"answers":[{"type":"predicate","name":"is_urgent","probability":0.95},
#     {"type":"choice","name":"department","choice":"billing","probabilities":[...],"confidence":0.8}], ...}
import requests

r = requests.post(
    "https://api.apigator.ai/v1/decisions",
    headers={"Authorization": "Bearer sk-..."},
    json={"model": "typesafe/jev-latest",
          "input": "Help! My payouts have been failing for 3 days.",
          "questions": [{"name": "is_urgent", "type": "predicate",
                         "instructions": "Does this convey urgency?"}]},
)
print(r.json()["answers"][0]["probability"])  # 0.95 = P(yes)
const r = await fetch("https://api.apigator.ai/v1/decisions", {
  method: "POST",
  headers: { Authorization: "Bearer sk-...", "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "typesafe/jev-latest",
    input: "Help! My payouts have been failing for 3 days.",
    questions: [{ name: "is_urgent", type: "predicate", instructions: "Does this convey urgency?" }],
  }),
});
console.log((await r.json()).answers[0].probability); // 0.95 = P(yes)

OpenAI-compatible parameters

We follow the OpenAI Chat Completions spec. Verified on the GPT-5 family (Sep 2026):

The Responses API is also available at POST https://api.apigator.ai/v1/responses for every model, in OpenAI's Responses format. GPT-5 and GPT-6 models accept function tools on chat/completions directly — the gateway bridges to the Responses API for you; if any model ever rejects tools on chat/completions, send the same tools to /v1/responses.

Models & Claude

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.

For AI agents

Wiring up a client for your user? Fetch these raw markdown files and follow them verbatim.

Errors