DurinDoor

FAQ

Short answers for DurinDoor setup and runtime, with links to the page that owns each procedure.

What is DurinDoor?

A self-hosted AI gateway. You store provider credentials on this machine, then point tools at http://localhost:20128/v1. DurinDoor translates OpenAI-shaped calls for the upstream you configured. It does not train or host foundation models.

Why do some paths still say 9router?

For compatibility with existing installations, the default data directory is still ~/.9router on macOS and Linux, or %APPDATA%\9router on Windows. The CLI binary is durindoor. Other compatibility identifiers are listed in Migrating from 9router.

What is the default port?

Production and the CLI bind 20128. Source npm run dev binds 20127. See commands, bind defaults, and health checks in Startup.

What base URL should clients use?

OpenAI-compatible clients use http://localhost:20128/v1. For a remote install, use that host's HTTPS origin instead of localhost. Curl and SDK samples: First request.

Which API key should I put in client tools?

A DurinDoor key from Dashboard → API Keys. Do not paste an upstream provider key into a client that talks to this gateway. See key formats, expiry, and scoping in API keys.

Can I use multiple providers at once?

Yes. Add more than one connection, then send a combo name as model. The combo strategy determines which members it tries. Account fallback retries another credential for the same provider first. Combos and Smart routing.

Can I use local models?

Yes. Add a local OpenAI- or Anthropic-compatible node, or a catalog local-router id such as ollama-local/<model>. Inside Docker, localhost is the container; point baseUrl at host.docker.internal or a compose service name. Free and local.

Does DurinDoor support Claude-compatible clients?

Claude-style traffic lands on POST /v1/messages. Claude Code sets ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN against this gateway and sends a DurinDoor key. Claude Code.

Does DurinDoor support the OpenAI Responses API?

POST /v1/responses is on the gateway. /codex/:path* and /responses rewrite onto that handler. Whether a given model works still depends on the translator path. API.

Does DurinDoor support audio, image, search, and embeddings?

Those are separate /v1 families: embeddings, image generate and edit, speech, transcription, translation, search, and web fetch. The connected provider has to support that modality. See the full table in API.

What is a combo?

A named group of model routes. The client puts the combo name in model. The default strategy tries members in order after failures; other strategies rotate, rank, or combine members. Combos.

What is account fallback?

Retrying another credential for the same provider and model. Combo fallback is trying the next member in the combo list. Account fallback runs first. Smart routing.

Is request logging safe?

Optional request logs stay off unless ENABLE_REQUEST_LOGS=true. When on, they write metadata under logs/ in the process working directory, not under DATA_DIR. Leave the flag false except for a short debug window. Security.

Can I expose DurinDoor publicly?

The CLI default bind is 0.0.0.0. Source production pins HOSTNAME to 127.0.0.1 when that variable is empty. For remote access, set a strong dashboard password and stable JWT_SECRET and API_KEY_SECRET, require login and API keys, and terminate TLS in front. See the checklist in Security.

How do I migrate from 9router?

Stop 9router, back up the data directory, start DurinDoor with the same DATA_DIR (or the default ~/.9router), then check providers, keys, combos, and usage. The one-shot script is optional. Migrating from 9router.

Where are environment variables documented?

Environment variables. .env.example is the starter template.

On this page

Edit on GitHub