Providers & config API
Overview
MultiRoute uses configs to define which providers and models are available for a given API key. The Providers page in the app is the main place to view and edit this: you see the default configuration and can create your own override (a config with parent_id set to the default). The config API (/v1/configs) lets you do the same things programmatically.
Key ideas:
- Default config — A global, read-only config (fixed ID). You never edit it directly.
- Your config (override) — A config with
parent_id = default_config_id. It inherits the default; you only store additions and overrides (e.g. API keys, disabled providers, extra providers). - Effective config — What the API uses: the default merged with your overrides. Providers from the default can be disabled in your config but not deleted.
See Providers and overrides for the full behavior of the Providers page and inheritance.
Providers page (app)
In the dashboard, open Providers in the sidebar:
- If the default config is not found, you see a Create config button to create your override.
- If you have an override (
parent_id = default_config_id), that config is loaded and you see the merged (effective) provider list. You can add providers, edit overrides, and disable or enable providers that come from the default. - If you don’t have an override yet, the default is shown read-only. Use Create my configuration to create your override; the first edit (add, edit, or disable) creates that config and applies the change.
You cannot delete providers that come from the default; you can only disable them (stored as an override with disabled: true in your config).
Config API summary
Typical operations:
| Method | Path | Description |
|---|---|---|
GET |
/v1/configs |
List config summaries for the current user. Use ?all=true to include configs with a parent. |
GET |
/v1/configs/{config_id} |
Get a config by ID. Returns the effective (merged) config when the config has a parent. |
POST |
/v1/configs |
Create a config. Send parent_id to create an override of the default. |
PUT |
/v1/configs/{config_id} |
Replace a config (full body). |
PATCH |
/v1/configs/{config_id} |
Partially update a config (name, parent_id, or providers). |
DELETE |
/v1/configs/{config_id} |
Delete a config (only your own). |
Provider-level operations:
| Method | Path | Description |
|---|---|---|
GET |
/v1/configs/{config_id}/providers |
List providers for that config (raw, not merged). |
GET |
/v1/configs/{config_id}/providers/{provider_name} |
Get one provider. |
POST |
/v1/configs/{config_id}/providers |
Add a provider. |
PATCH |
/v1/configs/{config_id}/providers/{provider_name} |
Update a provider (e.g. api_key, models, api_base, disabled). |
DELETE |
/v1/configs/{config_id}/providers/{provider_name} |
Remove a provider (only for providers you added, not from parent). |
Authentication: use a JWT access token (or an API key with sufficient scope). See Authentication.
Response shape (effective config)
GET /v1/configs/{config_id} returns the merged config when the config has a parent. Each provider in the response may include:
name,api_key,models,api_base— As in the merged result.from_parent—truewhen the provider comes from the parent config (you can disable it but not delete it).disabled—truewhen your override disables this provider (only in your effective config).
Best practices
- Use the Providers page for day-to-day changes; use the API for automation or tooling.
- When creating an override via API, send
parent_id: <default_config_id>and only the overrides you need inproviders. - To disable a provider from the default, add (or patch) a provider entry with the same
nameanddisabled: truein your config.
Related documentation
- Providers and overrides — How the default and overrides work in the app.
- Authentication
- API key management
- Errors & retry guidance