Integrations
Copy-paste setup for Cursor, Cline, Roo Code, OpenCode, Continue.dev, Codex CLI, LibreChat, SillyTavern — plus the raw Python, Node and cURL snippets. Every client speaks the same OpenAI-compatible endpoint, so one key covers all of them.
Every client below uses the same base URL and the same key
All models are served from one OpenAI-compatible endpoint. You do not pick a provider or a regional host per model — change the model string and the gateway routes the request. Codex CLI is the one exception: it speaks the Responses wire and needs wire_api = "responses", but it uses the same base URL and key.
https://api.selora.lol/v1
sk-gw-...
OpenAI-compatible
3 examples below
Cursor
Cursor ships an OpenAI key override. Paste the gateway endpoint and key there, then add the model ids you want in the picker.
- 01Open Settings (⌘⇧J on macOS, Ctrl+Shift+J on Windows/Linux) and go to Models.
- 02Paste your Selora key into OpenAI API Key and enable Override OpenAI Base URL.
- 03Add each model id under Models → Add model, then select it in chat.
OpenAI API Key: sk-gw-...
Override OpenAI Base URL: https://api.selora.lol/v1
Add model: deepseek-v4.1-flash-1017
kimi-k3.1-pro
claude-sonnet-4-5Cursor's own hosted models stay on Cursor's billing. Only requests sent through the override are billed to your Selora key. If your build has no override field, install Cline inside Cursor and point that at the same endpoint.
Cline (VS Code)
Cline is a VS Code extension with an OpenAI Compatible provider. Three fields and a model id is the whole setup.
- 01Install Cline from the VS Code Marketplace (or your fork’s extension panel).
- 02Open the Cline panel → gear icon → API Provider: OpenAI Compatible.
- 03Fill in the three fields below and click Verify.
API Provider: OpenAI Compatible
Base URL: https://api.selora.lol/v1
API Key: sk-gw-...
Model ID: claude-sonnet-4-5“Invalid API Key” means the key was mistyped; “Model Not Found” means the Model ID is not one the gateway serves. Run the model check below to list valid ids.
Roo Code
Roo Code (the Cline fork) exposes the same OpenAI Compatible provider, so the values carry over unchanged.
- 01Install the Roo Code extension, then open its settings (gear icon).
- 02Set API Provider to OpenAI Compatible.
- 03Enter the base URL and key, then pick or type a model id.
API Provider: OpenAI Compatible
Base URL: https://api.selora.lol/v1
API Key: sk-gw-...
Model ID: kimi-k3.1-proRoo Code keeps its own context-window and pricing metadata per model. Set Context Window / Max Output Tokens to match the model you chose — the values are on the Models page.
OpenCode
OpenCode reads a JSON provider block. Declare the gateway once in opencode.json and switch models with /models.
- 01Install OpenCode: curl -fsSL https://opencode.ai/install | bash
- 02Add the provider block to ~/.config/opencode/opencode.json (or a project opencode.json).
- 03Export SELORA_API_KEY, launch opencode, then pick selora/<model> with /models.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"selora": {
"npm": "@ai-sdk/openai-compatible",
"name": "Selora",
"options": {
"baseURL": "https://api.selora.lol/v1",
"apiKey": "{env:SELORA_API_KEY}"
},
"models": {
"deepseek-v4.1-flash-1017": { "name": "DeepSeek V4.1 Flash" },
"kimi-k3.1-pro": { "name": "Kimi K3.1 Pro" },
"claude-sonnet-4-5": { "name": "Claude Sonnet 4.5" }
}
}
},
"model": "selora/kimi-k3.1-pro"
}export SELORA_API_KEY="sk-gw-..."
cd /path/to/project
opencodeKeep the key out of the file: set SELORA_API_KEY in your shell and reference it with {env:SELORA_API_KEY}.
Continue.dev
Continue takes several models at once. Declare each Selora model in config.yaml with provider: openai and an apiBase override.
- 01Open ~/.continue/config.yaml (Continue 1.x; the legacy config.json uses the same fields in JSON).
- 02Add one entry per model you want, with apiBase pointing at the gateway.
- 03Reload the Continue panel — the models appear in the picker.
name: selora
version: 1.0.0
schema: v1
models:
- name: Selora · Claude Sonnet 4.5
provider: openai
model: claude-sonnet-4-5
apiBase: https://api.selora.lol/v1
apiKey: sk-gw-...
roles: [chat, edit, apply]
- name: Selora · DeepSeek V4.1 Flash
provider: openai
model: deepseek-v4.1-flash-1017
apiBase: https://api.selora.lol/v1
apiKey: sk-gw-...
roles: [autocomplete]Do not append /chat/completions to apiBase — Continue adds the path itself. A 404 here almost always means the base URL ends in the wrong place.
OpenAI Codex CLI
Codex needs wire_api = "responses". The provider block below uses the same /v1 base URL as every other client.
- 01Install: npm install -g @openai/codex
- 02Add the provider block to ~/.codex/config.toml.
- 03Export SELORA_API_KEY and launch with codex --profile selora.
[model_providers.selora]
name = "Selora"
base_url = "https://api.selora.lol/v1"
env_key = "SELORA_API_KEY"
wire_api = "responses"
requires_openai_auth = false
[profiles.selora]
model = "deepseek-v4.1-flash-1017"
model_provider = "selora"export SELORA_API_KEY="sk-gw-..."
cd /path/to/project
codex --profile selorawire_api = "responses" is what current Codex builds require for custom providers and targets /v1/responses. "chat" still works only on older pinned builds — treat it as legacy. Reserved provider names (openai, ollama, lmstudio) take precedence and cannot be overridden.
LibreChat
LibreChat adds the gateway as a custom endpoint in librechat.yaml — one block, any number of models.
- 01Add the endpoints.custom block to librechat.yaml.
- 02Set SELORA_API_KEY in the same .env LibreChat loads.
- 03Start with CONFIG_PATH=./librechat.yaml so the file is read.
version: 1.2.8
cache: true
endpoints:
custom:
- name: "Selora"
apiKey: "${SELORA_API_KEY}"
baseURL: "https://api.selora.lol/v1"
models:
default:
- "claude-sonnet-4-5"
- "kimi-k3.1-pro"
- "deepseek-v4.1-flash-1017"
fetch: false
titleConvo: true
titleModel: "deepseek-v4.1-flash-1017"
modelDisplayLabel: "Selora"fetch: false keeps the dropdown to the three ids above instead of probing the gateway on boot. Drop the field if you would rather list models live.
SillyTavern
SillyTavern calls any OpenAI-compatible endpoint through its Custom chat-completion source.
- 01Open AI Response Configuration → Chat Completion.
- 02Set Chat Completion Source to Custom (OpenAI-compatible).
- 03Paste the endpoint and key, click Connect, then pick a model.
Chat Completion Source: Custom (OpenAI-compatible)
Custom Endpoint: https://api.selora.lol/v1
Custom API Key: sk-gw-...
Model: claude-sonnet-4-5The endpoint is the /v1 root — SillyTavern appends /chat/completions itself. If the model dropdown stays empty after Connect, refresh it and type the id by hand.
Raw SDKs & HTTP
Any OpenAI-compatible client works: point it at https://api.selora.lol/v1 and pass your Selora key. The official openai packages need nothing else.
from openai import OpenAI
client = OpenAI(
base_url="https://api.selora.lol/v1",
api_key="sk-gw-...",
)
resp = client.chat.completions.create(
model="deepseek-v4.1-flash-1017",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
print(resp.choices[0].message.content)import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.selora.lol/v1',
apiKey: process.env.SELORA_API_KEY, // sk-gw-...
});
const resp = await client.chat.completions.create({
model: 'kimi-k3.1-pro',
messages: [{ role: 'user', content: 'Say hello in one line.' }],
});
console.log(resp.choices[0].message.content);curl https://api.selora.lol/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{ "role": "user", "content": "Say hello in one line." }]
}'curl https://api.selora.lol/v1/models \
-H "Authorization: Bearer sk-gw-..."Streaming works on every client above — set stream: true (or the equivalent toggle) and read Server-Sent Events. All three models accept the same request shape, so switching models never means switching clients. Need somewhere to create a key first? Get a key.