Apps
Integrate the Bankr LLM Gateway into your own applications. The gateway exposes two standard API formats — you can call them directly or use an SDK.
This page is for building your own apps. To configure Claude Code, Cursor, or Codex, see Coding Agents.
Integration Options
| Approach | Format | Best For |
|---|---|---|
OpenAI Chat Completions (/v1/chat/completions) | OpenAI format | Direct HTTP calls, any OpenAI-compatible SDK or client |
Anthropic Messages (/v1/messages) | Anthropic format | Direct HTTP calls, Anthropic SDK, Claude-specific features |
| Vercel AI SDK | Either format via provider packages | TypeScript apps using generateText, streamText, tool calling |
Both API formats work with all models — the gateway translates automatically. See the API Reference for full endpoint details.
Direct API Usage
If you're making HTTP requests directly (or using a lightweight HTTP client), point at the gateway's base URL and pass your API key:
OpenAI Chat Completions Format
const response = await fetch("https://llm.bankr.bot/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.BANKR_API_KEY!,
},
body: JSON.stringify({
model: "claude-sonnet-4.6",
messages: [{ role: "user", content: "Explain ERC-20 tokens." }],
}),
});
const data = await response.json();
console.log(data.choices[0].message.content);
Anthropic Messages Format
const response = await fetch("https://llm.bankr.bot/v1/messages", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.BANKR_API_KEY!,
},
body: JSON.stringify({
model: "claude-opus-4.6",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain ERC-20 tokens." }],
}),
});
const data = await response.json();
console.log(data.content[0].text);
Vercel AI SDK
The Vercel AI SDK provides a higher-level TypeScript interface with generateText, streamText, tool calling, and streaming helpers.
Installation
bun add ai @ai-sdk/openai-compatible
# or, for Claude-specific features (prompt caching):
bun add ai @ai-sdk/anthropic
Provider Setup
The gateway supports two AI SDK provider packages. Choose based on your needs:
| Provider | Package | Best For |
|---|---|---|
| OpenAI-Compatible | @ai-sdk/openai-compatible | All models (Claude, Gemini, GPT, Kimi, Qwen) |
| Anthropic | @ai-sdk/anthropic | Claude models with native features (prompt caching) |
The @ai-sdk/openai package defaults to the new OpenAI Responses API format, which the gateway does not support. Use @ai-sdk/openai-compatible instead — it uses the standard /v1/chat/completions format that works with all gateway models.
OpenAI-Compatible (All Models)
Use this when you want access to every model the gateway offers through a single provider.
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
const llm = createOpenAICompatible({
name: "bankr",
baseURL: "https://llm.bankr.bot/v1",
headers: { "X-API-Key": process.env.BANKR_API_KEY! },
});
// Use any supported model
const claude = llm("claude-opus-4.6");
const gemini = llm("gemini-3-pro");
const gpt = llm("gpt-5.2");
Anthropic (Claude Models)
Use this when you're exclusively using Claude models and want native Anthropic features like prompt caching.
import { createAnthropic } from "@ai-sdk/anthropic";
const anthropic = createAnthropic({
baseURL: "https://llm.bankr.bot/v1",
apiKey: process.env.BANKR_API_KEY!,
});
const claude = anthropic("claude-opus-4.6");
Generate Text
import { generateText } from "ai";
const { text, usage } = await generateText({
model: llm("claude-sonnet-4.6"),
prompt: "Explain ERC-20 tokens in one paragraph.",
});
console.log(text);
console.log(`Tokens: ${usage.inputTokens} in, ${usage.outputTokens} out`);
Stream Text
import { streamText } from "ai";
const result = streamText({
model: llm("gemini-3-flash"),
prompt: "List the top 5 DeFi protocols by TVL.",
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
const usage = await result.usage;
console.log(`\nTokens: ${usage.inputTokens} in, ${usage.outputTokens} out`);
Tool Calling
import { generateText, tool } from "ai";
import { z } from "zod";
const { text, toolResults } = await generateText({
model: llm("claude-opus-4.6"),
tools: {
getTokenPrice: tool({
description: "Get the current price of a token",
parameters: z.object({
symbol: z.string().describe("Token symbol, e.g. ETH"),
}),
execute: async ({ symbol }) => {
// Your price-fetching logic here
return { symbol, price: 3450.12, currency: "USD" };
},
}),
},
prompt: "What is the current price of ETH?",
});
console.log(text);
Multi-Model Routing
One advantage of the gateway is switching models without changing your code or provider config:
// Same provider, different models — the gateway handles routing
const result = await generateText({
model: llm(process.env.MODEL ?? "claude-sonnet-4.6"),
prompt: "Summarize this transaction.",
});
The gateway automatically routes each model to the best backend:
- Claude models → Vertex AI (primary), OpenRouter (fallback)
- Gemini models → Vertex AI (primary), OpenRouter (fallback)
- GPT, Kimi, Qwen → OpenRouter
Quick Reference
| Setting | Value |
|---|---|
| Base URL | https://llm.bankr.bot/v1 |
| Auth Header | X-API-Key: bk_... or Authorization: Bearer bk_... |
| OpenAI-compatible package | @ai-sdk/openai-compatible |
| Anthropic package | @ai-sdk/anthropic |
See Supported Models for the full model list and API Reference for raw endpoint details.