DurinDoor
Guides

Models and aliases

How DurinDoor parses provider/model strings, aliases, combos, and /v1/models.

Choose a model ID from your running instance, then use that exact string in the client's model field. A saved alias or combo can give clients a stable name while you change the upstream.

Discover a model

curl http://localhost:20128/v1/models \
  -H "Authorization: Bearer YOUR_DURINDOOR_API_KEY"

The default response is an OpenAI list with model IDs in data. Provider models use prefix/model-id; combos use their saved name. Listing models confirms discovery, not successful inference. Send a first request before configuring a tool.

Model stringRoutes to
openai/gpt-4.1An OpenAI connection with upstream model gpt-4.1
my-node/local-modelThe compatible node whose prefix is my-node
coding-defaultYour saved combo or alias with that name

The first slash separates the provider ID, registry alias, or node prefix from the upstream model. Additional slashes belong to the upstream model. Prefer this explicit form. Unmapped bare names use provider inference, which may select a different provider from the one you connected.

Create an alias or combo

A model alias maps a short name to one provider/model target. The management API accepts PUT /api/models/alias with { "model": "provider/model", "alias": "short-name" }.

A combo contains fallback members. Create it on Combos, then send its name as the model. See Combos for selection strategies and capability requirements.

Custom aliases add their target IDs to the catalog; the short alias does not get a separate top-level row. A custom node exposes only saved model rows. Import and save models on its provider page before relying on discovery.

Discover other model kinds

Append a kind to /v1/models:

KindService
imageImage generation
ttsText to speech
sttSpeech to text
embeddingEmbeddings
image-to-textImage understanding
webSearch and fetch
rerankReranking
systemoneSystem One decisions
videoVideo generation
musicMusic generation
moderationModeration
audioAudio models
realtimeRealtime models
realtime-translationRealtime translation
realtime-transcriptionRealtime transcription
liveLive models
document-parsingDocument parsing

An unknown one-segment kind returns 404. /v1/models/{prefix}/{model} looks up an exact chat model ID and returns model_not_found on a miss. /v1/models/info?id=prefix/model returns metadata; missing id returns 400. See Model limits before assuming a context window.

An anthropic-version header selects Anthropic's list envelope. A Codex user agent selects { "models": [...] }. The Anthropic header takes precedence when both are present. HEAD /v1/models returns an empty 200 response for HTTP probes; use GET and a real request to check model availability.

Control exposure and access

Disabled models disappear from discovery and return 403 when requested directly or through an alias. Media default routes also skip them. Hide paid models removes paid rows and combos with no visible members.

Under Settings → Model catalog, optional allow and deny lists match exact IDs or * and ? globs. Deny takes precedence. With a non-empty allow list, only matches remain visible. The same lists filter auto/* candidate models.

Catalog exposure is not an access restriction. Direct requests for a hidden ID still route, and named combos are exempt from exposure filtering. To restrict clients, configure API key model access.

If an expected model is missing, check the active provider connection, saved model selection, disabled-model settings, exposure lists, and key access rules. Compatible-node discovery imports are separate from the public catalog.

On this page

Edit on GitHub