Instabridge runs a reliable AI agent at global scale, with 200M+ downloads across 190+ countries
Unified AI API
The European AI gateway
for agents
Access 700+ leading AI models through one EU-hosted API, pay-as-you-go.
GDPR-compliant, with spend caps, model allowlists and zero data retention.
import OpenAI from "openai";const client = new OpenAI({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const completion = await client.chat.completions.create({model: "aws/claude-opus-5-5",messages: [{ role: "user", content: "Hello" }],});console.log(completion.choices[0].message.content);
import Anthropic from "@anthropic-ai/sdk";const client = new Anthropic({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const message = await client.messages.create({model: "aws/claude-opus-5-5",max_tokens: 1024,messages: [{ role: "user", content: "Hello" }],});console.log(message.content);
import { GoogleGenAI } from "@google/genai";const ai = new GoogleGenAI({apiKey: process.env.OPPER_API_KEY,httpOptions: { baseUrl: "https://api.opper.ai/v3/compat" },});const response = await ai.models.generateContent({model: "vertexai/gemini-3.8-flash-eu",contents: "Hello",});console.log(response.text);
import { createOpenAI } from "@ai-sdk/openai";import { generateText } from "ai";const opper = createOpenAI({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const { text } = await generateText({model: opper("aws/claude-opus-5-5"),prompt: "Hello",});
import { ChatOpenAI } from "@langchain/openai";const llm = new ChatOpenAI({model: "aws/claude-opus-5-5",apiKey: process.env.OPPER_API_KEY,configuration: {baseURL: "https://api.opper.ai/v3/compat",},});const response = await llm.invoke("Hello");
# Route Claude Code through Opper, no installnpx @opperai/cli launch claude# Or wire it up by handexport ANTHROPIC_BASE_URL="https://api.opper.ai/v3/compat"export ANTHROPIC_AUTH_TOKEN="$OPPER_API_KEY"
# Run OpenCode on Opper, no installnpx @opperai/cli launch opencode# Pin any of 700+ modelsnpx @opperai/cli launch opencode --model glm-5.3-flash
// ~/.openclaw/openclaw.json{models: {mode: "merge",providers: {"opper": {baseUrl: "https://api.opper.ai/v3/compat",apiKey: "YOUR_OPPER_API_KEY",api: "openai-completions",}}}}
// Cursor Settings > ModelsOverride OpenAI Base URL:https://api.opper.ai/v3/compatOpenAI API Key:YOUR_OPPER_API_KEYModels:aws/claude-opus-5-5azure:eu/gpt-6.1-sol
curl https://api.opper.ai/v3/images \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "openai/gpt-image-2.6-sunburst","prompt": "A lighthouse on a Stockholm skerry at dusk"}'
const res = await fetch("https://api.opper.ai/v3/images", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "openai/gpt-image-2.6-sunburst",prompt: "A lighthouse on a Stockholm skerry at dusk",}),});console.log(await res.json());
import os, requestsres = requests.post("https://api.opper.ai/v3/images",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "openai/gpt-image-2.6-sunburst","prompt": "A lighthouse on a Stockholm skerry at dusk",},)print(res.json())
# Video runs async: poll the status_url you get backcurl https://api.opper.ai/v3/videos \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "gemini/gemini-omni-1.1-flash","prompt": "Waves rolling onto a Baltic beach"}'
// Video runs async: poll the status_url you get backconst res = await fetch("https://api.opper.ai/v3/videos", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "gemini/gemini-omni-1.1-flash",prompt: "Waves rolling onto a Baltic beach",}),});console.log(await res.json());
# Video runs async: poll the status_url you get backimport os, requestsres = requests.post("https://api.opper.ai/v3/videos",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "gemini/gemini-omni-1.1-flash","prompt": "Waves rolling onto a Baltic beach",},)print(res.json())
curl https://api.opper.ai/v3/audio/speech \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "mistral/voxtral-mini-tts-3-0","input": "Your parcel arrives tomorrow."}'
const res = await fetch("https://api.opper.ai/v3/audio/speech", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "mistral/voxtral-mini-tts-3-0",input: "Your parcel arrives tomorrow.",}),});console.log(await res.json());
import os, requestsres = requests.post("https://api.opper.ai/v3/audio/speech",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "mistral/voxtral-mini-tts-3-0","input": "Your parcel arrives tomorrow.",},)print(res.json())
curl https://api.opper.ai/v3/audio/transcriptions \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "evroc/openai/whisper-large-v3","audio": "https://example.com/support-call.mp3"}'
const res = await fetch("https://api.opper.ai/v3/audio/transcriptions", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "evroc/openai/whisper-large-v3",audio: "https://example.com/support-call.mp3",}),});console.log(await res.json());
import os, requestsres = requests.post("https://api.opper.ai/v3/audio/transcriptions",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "evroc/openai/whisper-large-v3","audio": "https://example.com/support-call.mp3",},)print(res.json())
curl https://api.opper.ai/v3/audio/generations \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "gemini/lyria-3.5","prompt": "Calm lo-fi piano for a product demo","duration_seconds": 30}'
const res = await fetch("https://api.opper.ai/v3/audio/generations", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "gemini/lyria-3.5",prompt: "Calm lo-fi piano for a product demo",duration_seconds: 30,}),});console.log(await res.json());
import os, requestsres = requests.post("https://api.opper.ai/v3/audio/generations",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "gemini/lyria-3.5","prompt": "Calm lo-fi piano for a product demo","duration_seconds": 30,},)print(res.json())
import WebSocket from "ws";const ws = new WebSocket("wss://api.opper.ai/v3/realtime", {headers: { Authorization: `Bearer ${process.env.OPPER_API_KEY}` },});ws.on("open", () => ws.send(JSON.stringify({type: "session.start",config: { model: "openai/gpt-realtime-2.1" },})));
# Mint a short-lived ticket on your servercurl https://api.opper.ai/v3/realtime-sessions \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{ "config": { "model": "openai/gpt-realtime-2.1" } }'# Then open the socket from the browser with it# wss://api.opper.ai/v3/realtime?ticket=<ticket>
curl https://api.opper.ai/v3/compat/decisions \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "typesafe/jev-1.14.0","input": "The parcel arrived broken. I want my money back.","questions": [{ "type": "predicate", "instructions": "Is this a refund request?" }]}'
const res = await fetch("https://api.opper.ai/v3/compat/decisions", {method: "POST",headers: {Authorization: `Bearer ${process.env.OPPER_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "typesafe/jev-1.14.0",input: "The parcel arrived broken. I want my money back.",questions: [{ "type": "predicate", "instructions": "Is this a refund request?" }],}),});console.log(await res.json());
import os, requestsres = requests.post("https://api.opper.ai/v3/compat/decisions",headers={"Authorization": f"Bearer {os.environ['OPPER_API_KEY']}"},json={"model": "typesafe/jev-1.14.0","input": "The parcel arrived broken. I want my money back.","questions": [{ "type": "predicate", "instructions": "Is this a refund request?" }],},)print(res.json())
These models are enabled per account after a review: request access first, then the code below works with your usual key. How access works →
import OpenAI from "openai";const client = new OpenAI({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const completion = await client.chat.completions.create({model: "abliteration/abliterated-model-large-v2",messages: [{ role: "user", content: "Hello" }],});console.log(completion.choices[0].message.content);
import Anthropic from "@anthropic-ai/sdk";const client = new Anthropic({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const message = await client.messages.create({model: "abliteration/abliterated-model-large-v2",max_tokens: 1024,messages: [{ role: "user", content: "Hello" }],});console.log(message.content);
import { GoogleGenAI } from "@google/genai";const ai = new GoogleGenAI({apiKey: process.env.OPPER_API_KEY,httpOptions: { baseUrl: "https://api.opper.ai/v3/compat" },});const response = await ai.models.generateContent({model: "abliteration/abliterated-model-large-v2",contents: "Hello",});console.log(response.text);
import { createOpenAI } from "@ai-sdk/openai";import { generateText } from "ai";const opper = createOpenAI({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const { text } = await generateText({model: opper("abliteration/abliterated-model-large-v2"),prompt: "Hello",});
import { ChatOpenAI } from "@langchain/openai";const llm = new ChatOpenAI({model: "abliteration/abliterated-model-large-v2",apiKey: process.env.OPPER_API_KEY,configuration: {baseURL: "https://api.opper.ai/v3/compat",},});const response = await llm.invoke("Hello");
# Route Claude Code through Opper, no installnpx @opperai/cli launch claude# Or wire it up by handexport ANTHROPIC_BASE_URL="https://api.opper.ai/v3/compat"export ANTHROPIC_AUTH_TOKEN="$OPPER_API_KEY"
# Run OpenCode on Opper, no installnpx @opperai/cli launch opencode# Pin any of 700+ modelsnpx @opperai/cli launch opencode --model glm-5.3-flash
// ~/.openclaw/openclaw.json{models: {mode: "merge",providers: {"opper": {baseUrl: "https://api.opper.ai/v3/compat",apiKey: "YOUR_OPPER_API_KEY",api: "openai-completions",}}}}
// Cursor Settings > ModelsOverride OpenAI Base URL:https://api.opper.ai/v3/compatOpenAI API Key:YOUR_OPPER_API_KEYModels:abliteration/abliterated-model-large-v2
import OpenAI from "openai";const client = new OpenAI({apiKey: process.env.OPPER_API_KEY,baseURL: "https://api.opper.ai/v3/compat",});const res = await client.embeddings.create({model: "azure/text-embedding-3-large",input: "Where is my parcel?",});console.log(res.data[0].embedding);
import osfrom openai import OpenAIclient = OpenAI(api_key=os.environ["OPPER_API_KEY"],base_url="https://api.opper.ai/v3/compat",)res = client.embeddings.create(model="azure/text-embedding-3-large",input="Where is my parcel?",)print(res.data[0].embedding)
curl https://api.opper.ai/v3/compat/embeddings \-H "Authorization: Bearer $OPPER_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "azure/text-embedding-3-large","input": "Where is my parcel?"}'
Add the Opper API to this project. 1. Follow the setup guide at https://skills.opper.ai (quickstart: https://docs.opper.ai/overview/quickstart). 2. Use the API key in OPPER_API_KEY. If it is missing, ask me to create one at https://platform.opper.ai/settings/api-keys, and keep it out of git. 3. Use the OpenAI, Anthropic or Gemini SDK (keep the one this project already has) with its base URL set to https://api.opper.ai/v3/compat. 4. Call models by name, such as claude-opus-5-5: Opper pools every route that serves the model. To pin one route, use its full id, such as aws/claude-opus-5-5 (EU-hosted). All models and routes: https://opper.ai/models. 5. Ask me whether data must stay in the EU. If yes, use EU route ids and help me add an EU-only Model access rule. 6. Get one real request working end to end with error handling, and tell me how to run it.
Paste it into your coding agent.
Trusted by 50k+ developers and companies serving 10M+ users
Apps
Use any agent on any model
Keep inference in the EU, and switch the model behind any app anytime.
Security and GDPR compliance
Frontier AI, EU compliance included
One DPA for every model, SSO, audit logging and model allowlists.
Control plane
Set the rules for every model call
Spend limits, data retention, model access, checks and routing.
LLM router
Route requests to the right model
A decision model picks the branch, backup models catch failures, and your code calls the route like any model.
Reliability
Higher model availability
Automatic failover across multiple providers, with measured uptime per route.
Get started
Up and running in minutes
One key for every model, with nothing to set up.
For yourself or a company. Invite team members anytime.
Sign up02Add creditsFree models work before you add a card. Add a card and top up credits to use premium models, or bring your own provider keys.
See pricingOr paste this setup prompt into your coding agent.
Add the Opper API to this project. 1. Follow the setup guide at https://skills.opper.ai (quickstart: https://docs.opper.ai/overview/quickstart). 2. Use the API key in OPPER_API_KEY. If it is missing, ask me to create one at https://platform.opper.ai/settings/api-keys, and keep it out of git. 3. Use the OpenAI, Anthropic or Gemini SDK (keep the one this project already has) with its base URL set to https://api.opper.ai/v3/compat. 4. Call models by name, such as claude-opus-5-5: Opper pools every route that serves the model. To pin one route, use its full id, such as aws/claude-opus-5-5 (EU-hosted). All models and routes: https://opper.ai/models. 5. Ask me whether data must stay in the EU. If yes, use EU route ids and help me add an EU-only Model access rule. 6. Get one real request working end to end with error handling, and tell me how to run it.
Paste it into your coding agent.
Sign up needs no credit card: you get an API key straight away and the free models work in the playground and the API. Add a card to use premium models, pay-as-you-go with no minimum.
Customers
Teams shipping AI on Opper
Instabridge
Svenska Bostäder
LexBox

