OpenAI-compatible
The API speaks Chat Completions. Point any OpenAI client at AI_BASE_URL with AI_API_KEY and it works, in TypeScript, Python or curl.
Use GPT, Claude, Gemini, Grok, DeepSeek and Qwen from your app with the OpenAI SDK you already know. No accounts or keys with each provider. Switch models by changing one line.
One OpenAI-compatible API key for GPT, Claude, Gemini, Grok, DeepSeek, Qwen and hundreds more models.
The API speaks Chat Completions. Point any OpenAI client at AI_BASE_URL with AI_API_KEY and it works, in TypeScript, Python or curl.
Models are named by provider, such as openai/gpt-5-mini or anthropic/claude-sonnet-4.5. Change the model string, keep the rest of your code.
Streaming, tools and function calling, JSON output and images all work as they do with OpenAI.
Use the OpenAI Agents SDK, the Vercel AI SDK or LangChain. Tell them to use Chat Completions and they run on any model.
Each request is charged at the provider's own price plus a fixed percentage, from your credits. Every model's price is listed in the docs.
Prompts and answers are never stored. Only each request's model, token counts and cost are kept, for billing.
Click Deploy on the AI card. You get AI_BASE_URL and AI_API_KEY. Keep the key on your server.
Give them to any OpenAI client as its base URL and API key.
Choose one by name from the docs or from GET AI_BASE_URL/models, and stream the reply to your UI.
import OpenAI from "openai";
const ai = new OpenAI({
baseURL: process.env.AI_BASE_URL,
apiKey: process.env.AI_API_KEY,
});
const stream = await ai.chat.completions.create({
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "Write a haiku about Postgres." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}Same project, same .env, same bill.
Postgres, auth, storage, Redis, email and AI models. One API key.