RELAY_CONTROL_PORT (separate from the inference port) and serves the admin
UI, CRUD for every catalog entity, auth, and operational endpoints.
All control-API routes are mounted under the
/api prefix (e.g.
GET /api/providers). The prefix keeps the API from shadowing the embedded
admin UI’s client-side routes (/models, /policies, …), which are served
on the same origin — a hard reload of /models must return the UI, not JSON.
Only /config.json and /metrics stay at the listener root.Authentication
Two ways to authenticate:CRUD surface
Eight catalog kinds share one uniform shape:providers, hosts, models, host-keys, rate-limits,
policies, pricings, relay-keys.
Every write triggers a Postgres
NOTIFY; the change propagates to every
pod’s in-memory snapshot within ~1 second. No manual reload needed for
CRUD operations.Host keys
A host key is your upstream provider credential (e.g. your OpenAI key). Two value modes:RELAY_MASTER_KEY and only the
ciphertext is persisted.
Relay keys
A relay key is the inbound bearer your callers use. The server generates the plaintext viacrypto/rand, stores only sha256(plaintext) + a short
display prefix, and returns the plaintext once on create.
Operational endpoints
/reload is a manual fallback; normal CRUD writes propagate automatically
via NOTIFY.