set up your clients
Point your client at superbot and keep using it. Every setup here is three values: a base URL, a key and a model id.
Mint a key on the account api page. Routes, limits and the error contract are on developers.
What to paste
These values are the whole configuration. Where the client asks for a model name, enter
superbot.
| Base URL | https://api.superbot.gg/v1 |
|---|---|
| key header | Authorization: Bearer sbc_… or x-api-key |
| model ids | superbot: Your Superbot agent. superbot-omni: Superbot agent, run on your computer. |
Keeping chats apart
superbot keeps its server-side memory of a chat per conversation. Name a conversation with the x-superbot-session: <id> header: letters, digits, _ and -, at most 59 characters. Every call that sends the same id continues the same thread, even when your client does not resend the earlier messages.
With no header, superbot uses the conversation id your client already sends: prompt_cache_key, metadata.session_id, metadata.conversation_id, a Responses conversation or an Anthropic metadata.user_id. Codex and Claude Code send these, so the agent keeps each of their chats apart. With none of them, superbot keys the chat on its first message, so two chats that open with the same words share a thread.
The OpenAI user field is not a conversation id.
curl https://api.superbot.gg/v1/chat/completions \
-H "Authorization: Bearer sbc_…" \
-H "x-superbot-session: my-chat-1" \
-H "Content-Type: application/json" \
-d '{"model": "superbot", "messages": [{"role": "user", "content": "ping"}]}'The full rules are on developers.
Cursorfull
Cursor BYOK: key, base URL and custom model.
- Open
Cursor Settings, thenModels. - Paste your
sbc_key into theOpenAI API keybox. - Paste the base URL from the card above.
- Put it in
Override OpenAI Base URL. - Click
Add Custom Modeland name itsuperbot. - Add
superbot-omnias a second custom model if you want it. - Select
superbotin the model picker, then send one message. - With superbot relay: quit Cursor, run
superbot clients wire cursor, skip 2-6.
Override OpenAI Base URL: https://api.superbot.gg/v1
OpenAI API key: sbc_…
Custom model: superbot# quit Cursor first: it rewrites its state store on quit
superbot clients wire cursor
# what it puts in place for you
Override OpenAI Base URL: https://api.superbot.gg/v1
OpenAI API key: sbc_…
Custom models: superbot, superbot-omni
# undo: restores the config it backed up
superbot clients unwire cursorcurl https://api.superbot.gg/v1/chat/completions \
-H "Authorization: Bearer sbc_…" \
-H "Content-Type: application/json" \
-d '{"model":"superbot","messages":[{"role":"user","content":"ping"}]}'traps
- The override captures every OpenAI-family request it sees. That includes Cursor's own picker models, not just yours. Turn it off to send a picker model to its own vendor.
- No Anthropic base override exists, so an Anthropic key stays native. Claude keeps working, billed by Anthropic as before.
- The override must be a public URL: the dial comes from their servers. A
localhostURL never answers. - Already pointing the override at another gateway? Keep it working. Add it on
/account/apiasyour previous upstream. Its models then keep answering through superbot, in one key. superbot clients wire cursorneeds Cursor quit first, then writes the rows. Undo it withsuperbot clients unwire cursor.- Cursor may probe with
gpt-4o-miniwhen you save the override. If that probe fails, the custom model can still work once selected. - The key lives in Cursor's own state store, not
settings.json. - A request that declares its own tools is answered by the model driving them, and its tool calls come back for the client to run. Cards from the agent come back as plain markdown.
- superbot keeps a server-side thread per conversation. When a Cursor request carries none of the conversation ids listed under
Keeping chats apartat the top of this page, superbot keys the chat on its first message, so two Cursor chats that open with the same words share a thread.
source: cursor.com, retrieved 2026-09-19
Devinnone
No custom endpoint, in the cloud or Desktop
Devin has no base URL to change, so it cannot be pointed at superbot.
- Devin takes no custom base URL, in the cloud or in Devin Desktop.
- Use superbot's hosted MCP server instead. Devin connects to it as a remote MCP server, so it gets superbot's tools and keeps its own models.
- For the Devin CLI, setup is the recipe at
/install/devin.md:devin mcp add -s user superbotwith the MCP URL, thendevin mcp login superbot. - If a custom base URL ever appears, paste the same three values as any other client.
traps
- "Devin is a compound AI system and does not currently support third-party LLM API keys." No tier exception is documented.
- The Devin Desktop docs are silent on BYOK and base URLs. Desktop models come from the built-in catalog.
source: docs.devin.ai, retrieved 2026-09-19
Claude Codefull
Claude Code BYOK: base URL, key, model.
- Set
ANTHROPIC_BASE_URLto the base URL above. - Set
ANTHROPIC_API_KEY, which is sent asx-api-key. - Or set
ANTHROPIC_AUTH_TOKEN, sent asAuthorization: Bearer. - Pick the model with
ANTHROPIC_MODELor--model. - Set
CLAUDE_CODE_MAX_CONTEXT_TOKENSto the window the snippet prints for that model. - You can also set
modelinsettings.json. Or put all of it in the"env"block there. - Restart Claude Code, then send one message.
export ANTHROPIC_BASE_URL="https://api.superbot.gg/v1"
export ANTHROPIC_API_KEY="sbc_…"
export ANTHROPIC_MODEL="superbot"
export CLAUDE_CODE_MAX_CONTEXT_TOKENS="1000000"{
"env": {
"ANTHROPIC_BASE_URL": "https://api.superbot.gg/v1",
"ANTHROPIC_API_KEY": "sbc_…",
"ANTHROPIC_MODEL": "superbot",
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000"
}
}traps
- Claude Code assumes a 200K window for a model id that does not start with
claude-.CLAUDE_CODE_MAX_CONTEXT_TOKENSgives it the window superbot serves. - A non-first-party base URL turns MCP tool search off. Set
ENABLE_TOOL_SEARCH=trueto force it on. - Remote Control is disabled on a non-first-party base URL.
- The base URL only changes where requests go. It does not choose the model.
- Send
superbotas the model id. Claude Code declares its own tools, so superbot answers with the model driving them: its tool calls come back for Claude Code to run, on your machine. Cards from the agent come back as plain markdown. /modelbeats--modelandANTHROPIC_MODEL. Both beat thesettings.jsonmodel.- Claude Code puts its session id in
metadata.user_id, so when your agent answers, superbot keeps each Claude Code session in its own thread. Do not set one fixedx-superbot-sessionheader for it: a fixed value would put every session in one thread.
source: code.claude.com, retrieved 2026-09-19
Codex CLIfull
Codex CLI: custom provider in config.toml.
- Open
~/.codex/config.toml, and create it if it is missing. - Add a
[model_providers.superbot]table. - Give it
base_url,env_keyandwire_api. - Set
wire_api = "responses", the only value Codex still supports. - Export
SUPERBOT_API_KEYwith a caller key. That is the nameenv_keypoints at. - Set the top-level
model_provider,modelandmodel_context_windowkeys, above the table, then restart Codex.
model_provider = "superbot"
model = "superbot"
model_context_window = 1000000
[model_providers.superbot]
name = "superbot"
base_url = "https://api.superbot.gg/v1"
env_key = "SUPERBOT_API_KEY"
wire_api = "responses"export SUPERBOT_API_KEY="sbc_…"traps
wire_apionly takesresponses. The oldchatvalue was removed.- These keys are ignored in a project-local
.codex/config.toml. Write them in the user one. - A custom provider id cannot be
openai,ollamaorlmstudio. Keep the idsuperbot. - superbot serves
/v1/responses, so the responses wire is what answers. - Codex declares its own tools, so
superbotanswers with the model driving them: its tool calls come back for Codex to run, on your machine. Cards from the agent come back as plain markdown. - The provider
nameis only a label. The top-levelmodel_provideris what selects it. - Keep
model_provider,modelandmodel_context_windowabove the[model_providers.superbot]table. A key below a table header belongs to that table. - superbot answers Codex's own model-list request (
GET /v1/models?client_version=…) withsuperbot,superbot-omniandsuperbot-fast, so Codex knows their efforts, their windows and the Fast option. A Codex that cannot read that list printsModel metadata for superbot not found. Defaulting to fallback metadataon the first request. Requests still go through.model_context_windowgives Codex the window superbot serves in place of its generic default. superbotandsuperbot-omniserve the effortsnone,low,high,xhighandmax, and run athigh, their default, when you set none. Amediumis served athigh's rung,minimalaslowandultraasmax(xhighis its own level, served at that same rung).superbot-fastruns atlow(ornone). Setmodel_reasoning_effortat the top level to pick one.- For Fast, set
service_tier = "priority"at the top level: superbot serves the turn with priority, at twice the price. - Codex sends its conversation id as
prompt_cache_key, so when your agent answers, superbot keeps each Codex chat in its own thread. Do not add anx-superbot-sessionvalue underhttp_headers: one fixed value would put every Codex chat in one thread.
source: learn.chatgpt.com, retrieved 2026-09-19
GitHub Copilot (VS Code)partial
Chat works via a Custom Endpoint provider.
- Open the model picker in chat and select
Manage Language Models. - Select
Add Models, thenCustom Endpoint, and name the group. - Enter your key from
/account/api. - Then choose the API type:
Chat Completions,Responses,Messages. - VS Code opens
chatLanguageModels.json. Paste the snippet below into it and save. - The snippet gives the full URL.
- Select the model in the picker. Restart VS Code if it does not show up.
[
{
"name": "superbot",
"vendor": "customendpoint",
"apiKey": "sbc_…",
"models": [
{
"id": "superbot",
"name": "superbot",
"url": "https://api.superbot.gg/v1/chat/completions",
"apiType": "chat-completions",
"toolCalling": true
}
]
}
]traps
- BYOK covers chat only. Semantic search, inline suggestions and embeddings are not covered.
- A Copilot Business or Enterprise admin controls this. It is the
Bring Your Own Language Model Key in VS Codepolicy. - The server-side Enterprise BYOK preview needs the Completions API. A
responsesmodel will not work there. - A raw
apiKeycommitted to the file is a leaked key. The docs use an${input:myApiKey}variable instead.
source: code.visualstudio.com, retrieved 2026-09-19
Continuefull
One OpenAI provider entry in config.yaml.
- Open
config.yaml. - Under
models:add one entry, or edit the one already there. - Set
provider: openaiandapiBaseto the base URL above. - Set
apiKeyto yoursbc_caller key. - Set
modeltosuperbot, and give the entry aname. - Save, reload the extension, then send a chat message.
models:
- name: superbot
provider: openai
apiBase: https://api.superbot.gg/v1
apiKey: sbc_…
model: superbot
useResponsesApi: falsecurl https://api.superbot.gg/v1/chat/completions \
-H "Authorization: Bearer sbc_…" \
-H "Content-Type: application/json" \
-d '{"model":"superbot","messages":[{"role":"user","content":"ping"}]}'traps
config.jsonis deprecated. Writeconfig.yamlinstead.- The Anthropic provider entry has no
apiBasefield. Use the openai provider with the sameapiBase. - Without
useResponsesApi: falseContinue may call the Responses API.
source: docs.continue.dev, retrieved 2026-09-19
Clinefull
Either dialect, three fields to fill in.
- Open Cline and click the settings gear.
- Set
API ProvidertoOpenAI Compatible. - Paste the base URL above into
Base URL. - Paste your
sbc_caller key intoAPI Key. - Type your model id into
Model, or pick it from the list. - Type the context window from the card into the model's
Context Windowfield. - Send one message and confirm the reply arrives.
Base URL: https://api.superbot.gg/v1
API Key: sbc_…
Model: superbot
Context window: 1000000traps
- The base URL is not
https://api.openai.com/v1. That holds even with the OpenAI Compatible provider selected. - A wrong model id answers
Model Not Found. - Left empty,
Context Windowmakes Cline assume 128K tokens for a model it does not know. - For the Anthropic provider, tick
Use custom base URL. Paste the same base URL into that field. - One caller key serves both providers.
source: docs.cline.bot, retrieved 2026-09-19
Roo Codepartial
Two providers; tool calling unverified.
- Open Roo Code settings.
- Set
API ProvidertoOpenAI Compatible. - Paste the base URL above into
Base URL. - Paste your
sbc_caller key intoAPI Key. - Set
Modelto your model id, or pick it from the list. - Type the context window from the card into the model's
Context Windowfield. - Send a message and read the reply.
Base URL: https://api.superbot.gg/v1
API Key: sbc_…
Model: superbot
Context window: 1000000traps
- Roo sends native tool calls on every request.
- Not verified here: whether the agent lane answers those tool calls.
- A wrong model id answers
Model Not Found. - Left empty,
Context Windowmakes Roo assume 128K tokens for a model it does not know. - The base URL is not
https://api.openai.com/v1. - For the Anthropic provider, tick
Use custom base URL. Paste the same base URL into that field.
source: docs.roocode.com, retrieved 2026-09-19
Zedfull
settings.json plus a key in the keychain.
- Open
settings.json. - Add a
language_models.openai_compatibleblock. - Set its
api_urlto the base URL above. - List the model in
available_modelswithnameandmax_tokens. - Store your
sbc_key in Agent Settings, or setSUPERBOT_API_KEY. - Pick the model in the assistant panel, then send a message.
{
"language_models": {
"openai_compatible": {
"superbot": {
"api_url": "https://api.superbot.gg/v1",
"available_models": [
{
"name": "superbot",
"display_name": "superbot",
"max_tokens": 1000000
}
]
}
}
}
}export SUPERBOT_API_KEY="sbc_…"traps
max_tokensis required. It is the context window, and the example sets the window superbot serves for the model.- The key never goes into
settings.json. Use Agent Settings or the env var. - The env var is the provider id uppercased, plus
_API_KEY. chat_completionsalready defaults totrue. No extra field is needed for that.- For the Anthropic dialect, use
anthropic_compatible. Give it the sameapi_url.
source: zed.dev, retrieved 2026-09-19
Aiderfull
Aider via openai/: base URL and key.
- Export
OPENAI_API_BASEwith the base URL above. - Export
OPENAI_API_KEYwith a caller key. - Run
aider --model openai/superbot. - Use
--openai-api-baseinstead of the env var if you prefer flags. - Send one prompt to confirm the route.
export OPENAI_API_BASE="https://api.superbot.gg/v1"
export OPENAI_API_KEY="sbc_…"
aider --model openai/superbottraps
- The
openai/prefix on the model id is required. Without it, another provider is picked. - An unknown model id still runs, but Aider prints model warnings.
OPENAI_API_BASEand--openai-api-basecarry the same value.- Aider speaks OpenAI chat, so it dials
/v1/chat/completions.
source: aider.chat, retrieved 2026-09-19
OpenCodefull
OpenCode: add superbot as a provider.
- Open your
opencode.json. - Add a
provider.superbotentry. - Set its
npmto@ai-sdk/openai-compatible. - Set
options.baseURLto the base URL above, then give it anoptions.apiKey. - List each model id under
models, keyed by the id itself, with itslimitandvariantsas in the snippet. - Restart OpenCode and send one message.
{
"provider": {
"superbot": {
"npm": "@ai-sdk/openai-compatible",
"name": "superbot",
"options": {
"baseURL": "https://api.superbot.gg/v1",
"apiKey": "sbc_…"
},
"models": {
"superbot": {
"name": "Superbot",
"reasoning": true,
"limit": { "context": 1000000, "output": 393216 },
"variants": {
"none": { "reasoningEffort": "none" },
"low": { "reasoningEffort": "low" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" },
"max": { "reasoningEffort": "max" }
}
}
}
}
}
}traps
- Model ids must match an id from
GET /v1/models. Usesuperbot. - Without
limit.context, OpenCode assumes a 200K window for the model. The snippet sets the window superbot serves. - Keep
limit.outputbesidelimit.context. OpenCode rejects alimitthat has only one of them. - Each
variantsentry is one effort superbot serves for that model, sent asreasoningEffort. - The
apiKeyin the file is a plain secret./connectkeeps it out of the repo. - A provider needs
@ai-sdk/openai-compatiblefor the OpenAI wire. - OpenCode reads providers at start, so restart after every edit.
source: opencode.ai, retrieved 2026-09-19
Any OpenAI or Anthropic SDKfull
Any OpenAI or Anthropic SDK, same base URL.
- Install the
openaioranthropicpackage for your language. - Set
OPENAI_BASE_URLorANTHROPIC_BASE_URLin the environment. - Pass a caller key as the API key, or put it in the matching env var.
- Send a normal request with the model id shown in the env comment.
- Swap that id for the omni one to run the agent on your computer.
- Send an
x-superbot-sessionheader to keep one chat in its own server-side thread. Use a different id for each chat.
export OPENAI_BASE_URL="https://api.superbot.gg/v1"
export OPENAI_API_KEY="sbc_…"
export ANTHROPIC_BASE_URL="https://api.superbot.gg/v1"
export ANTHROPIC_API_KEY="sbc_…"
# model: superbot for your agent, superbot-omni to run it on your computerfrom openai import OpenAI
c = OpenAI(base_url="https://api.superbot.gg/v1", api_key="sbc_…")
r = c.chat.completions.create(model="superbot", messages=[{"role": "user", "content": "ping"}])
print(r.choices[0].message.content)from anthropic import Anthropic
c = Anthropic(base_url="https://api.superbot.gg/v1", api_key="sbc_…")
m = c.messages.create(model="superbot", max_tokens=256, messages=[{"role": "user", "content": "ping"}])
print(m.content[0].text)from openai import OpenAI
c = OpenAI(base_url="https://api.superbot.gg/v1", api_key="sbc_…")
r = c.chat.completions.create(
model="superbot",
messages=[{"role": "user", "content": "ping"}],
extra_headers={"x-superbot-session": "my-chat-1"},
)
print(r.choices[0].message.content)curl https://api.superbot.gg/v1/chat/completions \
-H "Authorization: Bearer sbc_…" \
-H "Content-Type: application/json" \
-d '{"model": "superbot", "messages": [{"role": "user", "content": "ping"}]}'traps
ANTHROPIC_AUTH_TOKENis sent asAuthorization: Bearer.ANTHROPIC_API_KEYis sent asx-api-key.- One base URL for both SDKs. It ends in
/v1. - Do not repeat
/v1on the request path. - The Node OpenAI client reads
OPENAI_BASE_URLby default. AbaseURLyou pass wins. - Pass
base_url=to the Anthropic Python constructor. - The
userfield is not a conversation id. Name the chat withx-superbot-session, or sendprompt_cache_keyormetadata.session_id. With none, superbot keys the chat on its first message.
source: developers.openai.com, retrieved 2026-09-19