Skip to main content
Relay puts one endpoint in front of every LLM provider and pools your API keys for failover and higher effective rate limits.
1

Start the relay

Pick one — a single self-contained container, or Compose with separate Postgres + Valkey. Either way the catalog is baked in and seeded on first boot.
The standalone image bundles Postgres. Credentials are auto-generated on first boot and printed to the logs.
docker run -p 8080:8080 -p 8081:8081 wyolet/relay:standalone
Add a volume to keep your data, credentials, and master key across restarts (a fresh container regenerates them otherwise):
docker run -p 8080:8080 -p 8081:8081 \
  -v relay-data:/var/lib/postgresql/data \
  wyolet/relay:standalone
See Persisting data.
Admin UI on :8081, OpenAI/Anthropic-compatible API on :8080.
2

Run the setup wizard

Open localhost:8081 and sign in:
  • docker run (standalone) — username admin and the password printed to the container logs on first boot.
  • docker compose — username admin and RELAY_ADMIN_PASSWORD.
Then follow the wizard to add a provider key and mint a relay key.
The relay-key plaintext is shown exactly once — copy it then.
3

Make a request

curl http://localhost:8080/openai/v1/chat/completions \
  -H "Authorization: Bearer <your-relay-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","messages":[{"role":"user","content":"hello"}]}'

Hit a snag?

Common errors — “no healthy keys in pool”, bad bearer, adapter mismatch.

Next steps

Configuration

Every RELAY_* environment variable and runtime setting.

Inference API

Endpoints, wire shapes, streaming, and error codes.

Control API

Manage hosts, keys, policies, and relay keys.

Troubleshooting

Common errors and how to fix them.