Speak, friend, and enter.
Your AI providers. One gateway. OpenAI and Anthropic APIs, subscriptions, and local models — connected on your terms.
npm install -g durindoorWalk through the dashboard, no install
The demo runs the real DurinDoor interface against mocked data, so you can click every page before you run it yourself.
Mocked data. Nothing leaves your browser.
One door, every provider
Nine kinds of model call, one key.
The same key and base URL cover chat, embeddings, speech, images, video, search, and fetch.
- 195 providers
Chat & code
/v1/chat/completions - 14 providers
Embeddings
/v1/embeddings - 13 providers
Text to speech
/v1/audio/speech - 7 providers
Speech to text
/v1/audio/transcriptions - 20 providers
Image generation
/v1/images/generations - 12 providers
Vision
image input - 4 providers
Video
/v1/video/generations - 17 providers
Web search
/v1/search - 6 providers
Web fetch
/v1/web/fetch
Provider counts come from the DurinDoor provider registry. Support for each modality depends on the provider.
How it works
Every request passes one door
Clients post OpenAI /v1/chat/completions or /v1/responses, or Anthropic /v1/messages. DurinDoor translates, picks a healthy account, and records the outcome.
Compatible tools
- Claude Code
- Codex
- Cursor
- Cline
DurinDoor
OpenAI / Anthropic APIs
/v1/chat/completions/v1/responses/v1/messages- 01
Knock
A tool sends a /v1 request with a DurinDoor key and a model string.
- 02
Resolve
The key is checked, the model resolved, and a healthy connection chosen.
- 03
Translate
Formats are bridged both ways; the upstream call uses stored credentials.
- 04
Record
Usage, latency and outcome land in local SQLite. Switch the engine to Postgres when you outgrow the file.
"model": "
- resolve provider model
- provider openai
- upstream gpt-4.1
- 200 OK stream · 412 ms
You choose the fallback order
A combo gives your client one model name. DurinDoor tries its configured members in order, retrying eligible accounts before moving to the next model.
Example configuration
coding-default- 1

cc/claude-sonnet - 2

openrouter/qwen3-coder - 3

ollama-local/qwen3
This order is an example, not a built-in subscription, API, or local-model priority.
Providers
OAuth plans, API keys, cookies, and local runtimes
Claude Code, Codex, Gemini CLI, Kiro, Cursor, and GitHub Copilot log in through OAuth. Compatible URLs and local runtimes sit next to them.
- OAuth
- Claude, Codex, Gemini CLI, Kiro, Cursor, Copilot
- Custom nodes
- Any compatible URL
- Local
- No remote account
Compatible tools
Connect your tools
Claude Code, Codex, Cursor, Cline, Roo, and Continue have setup pages. Anything that speaks OpenAI uses the same base URL.
Claude Code
OpenAI Codex
Cursor
Cline
Kilo Code
Droid
OpenCode
GitHub Copilot
Hermes
Continue
Roo Code
Gemini CLI
Antigravity
Kiro
Amp
OpenClaw
Token savers
Say less. Mean the same.
Opt-in compression trims prompts after translation and before they leave your machine. It fails open: if an engine errors, the original request goes through untouched.
./open-sse/providers/registry/9router.js
./open-sse/providers/registry/agentrouter.js
./open-sse/providers/registry/aihorde.js
./open-sse/providers/registry/alibaba.js
./open-sse/providers/registry/anthropic.js
./open-sse/providers/registry/antigravity.js
./open-sse/providers/registry/assemblyai.js
./open-sse/providers/registry/azure.js
./open-sse/providers/registry/baidu.js
./open-sse/providers/registry/bedrock.js
./open-sse/providers/registry/black-forest-labs.js
./open-sse/providers/registry/brave-search.js
./open-sse/providers/registry/cartesia.js
./open-sse/providers/registry/cerebras.js
./open-sse/providers/registry/claude.js
./open-sse/providers/registry/cline.js
./open-sse/providers/registry/codex.js
./open-sse/providers/registry/cohere.js
./open-sse/providers/registry/copilot-web.js
./open-sse/providers/registry/cursor.js
./open-sse/providers/registry/deepgram.js
./open-sse/providers/registry/deepseek.js
./open-sse/providers/registry/elevenlabs.js
./open-sse/providers/registry/exa.js
./open-sse/providers/registry/firecrawl.js
./open-sse/providers/registry/fireworks.js
./open-sse/providers/registry/gemini.js
./open-sse/providers/registry/github.js
./open-sse/providers/registry/glm.js
./open-sse/providers/registry/groq.js
./open-sse/providers/registry/huggingface.js
./open-sse/providers/registry/kimi.js
./open-sse/providers/registry/kiro.js
./open-sse/providers/registry/minimax.js
./open-sse/providers/registry/mistral.js
./open-sse/providers/registry/nvidia.js
./open-sse/providers/registry/ollama.js
./open-sse/providers/registry/ollama-local.js
./open-sse/providers/registry/openai.js
./open-sse/providers/registry/openrouter.js
./open-sse/providers/registry/perplexity.js
./open-sse/providers/registry/qwen.js
./open-sse/providers/registry/together.js
./open-sse/providers/registry/vertex.js
./open-sse/providers/registry/xai.js
./open-sse/translator/index.js
./open-sse/translator/validate.js
./open-sse/translator/webTools.js
./open-sse/translator/formats.js
./open-sse/translator/formats/claude.js
./open-sse/translator/formats/gemini.js
./open-sse/translator/formats/responsesApi.js
./open-sse/translator/formats/openai.js
./open-sse/translator/formats/maxTokens.js54 files in 3 dirs:
./open-sse/providers/registry/ (45)
9router.js
agentrouter.js
aihorde.js
alibaba.js
anthropic.js
antigravity.js
assemblyai.js
azure.js
baidu.js
bedrock.js
+35
./open-sse/translator/ (4)
index.js
validate.js
webTools.js
formats.js
./open-sse/translator/formats/ (5)
claude.js
gemini.js
responsesApi.js
openai.js
maxTokens.js
Real output of DurinDoor's RTK find filter, using the sample file list.
RTK filters
Condense tool output such as git status, git diff, ls, grep, find and build logs.
Caveman
Rule-based prose compression with lite, full and ultra intensities.
Session dedup
Drops blocks repeated across turns of the same conversation.
Headroom
Optional adapter that only applies when it saves more than five percent.
X-DurinDoor-Token-Saver: offThe ledger
Know which account still has room
Quota views show provider limits, reset windows, and Codex reset credits.
- 82%used
- 46%used
- 27%used
In the dashboard
- Provider, model, tokens, cost estimate and latency for every request
- Provider limits and reset windows side by side
- Codex reset credits redeem against that account's exhausted windows
Also on this machine
MCP, realtime, proxy traces, tunnels
Each card opens the matching docs page.
MCP gateway
One DurinDoor endpoint in front of several MCP servers, with gateway keys that map to specific instances.
Realtime
Native realtime and audio where supported. Chat models use text events.
Proxy timeline
Optional redacted hop log for proxy calls. Off by default. Stored next to the main database.
Tunnels
Reach the gateway from another network over HTTPS. Cloudflare and Tailscale are the built-in tunnel providers.
Quick start
Three steps to the other side
Connect a provider, choose a model, and configure your client for OpenAI or Anthropic APIs.
$ npm install -g durindoor
$ durindoor
$ npm install -g durindoor$ durindoor ✓ dashboard http://localhost:20128/dashboard ✓ api base http://localhost:20128/v1curl http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer YOUR_DURINDOOR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "MODEL_ID", "messages": [ {"role": "user", "content": "Reply with one short sentence."} ], "max_tokens": 32 }'
Connect your tools
- Base URL
http://localhost:20128/v1- API key
your DurinDoor API key- Model
model ID, alias, or combo
npx durindoornpx durindoor starts a local process. Docker and a global install are under Quick start.
Quick start ↗