Providers (BYOK)
Bring your own key: connect your own provider credentials and they're used for real inference. Auto-discovered models are merged into your catalog immediately, and your own key always takes priority over any provider your admin has enabled platform-wide, for that same provider. This is available on every plan.
Connecting a provider
client.providers.add(provider="openai", api_key="sk-...")
Models are discovered automatically by calling the provider's own /models endpoint with
your key, so you don't need to list them yourself. If discovery fails (e.g. the key is invalid
or the endpoint is unreachable), the provider is still saved but starts with no models; call
client.providers.test() again once the key is fixed to retry discovery.
The underlying API supports a base_url field for self-hosted or custom-endpoint providers,
but the Python SDK's client.providers.add() doesn't expose it yet. Until it does, add these
via a direct request: POST /v1/providers with {provider, base_url, api_key?}.
Managing your providers
result = client.providers.list()
# result["configs"]: each entry has id, provider, enabled, enabled_models, created_at, updated_at
client.providers.enable("openai")
client.providers.disable("openai")
client.providers.delete("openai")
test = client.providers.test("openai")
# {"healthy": bool, "latency_ms": int, "error": str | None}
Disabling a provider (rather than deleting it) keeps the stored key but removes it from routing consideration, useful for temporarily pulling a provider out of rotation without losing the discovered model list.
Precedence: your key vs. your admin's
If your organization's admin has also enabled a given provider platform-wide, and you connect your own key for that same provider, your key wins. Every request that would route to that provider uses your credentials, not the platform's. Every other provider you haven't connected yourself keeps using whatever your admin has enabled. There's no separate setting to toggle this; it's automatic based on which providers you've personally connected.
Seeing what's actually available
client.models.list() is not this list yetclient.models.list() currently returns a static reference list of commonly-supported model
IDs. It does not reflect your org's actual connected providers or BYOK keys. The dashboard's
Model Catalog tab is the accurate, real-time view (it merges your own connected providers
with whatever your admin has enabled platform-wide); the SDKs don't have a method for it yet.
If you need this programmatically today, call GET /v1/models/catalog directly.
Until the SDKs catch up, use the dashboard's Model Catalog tab, right next to the Providers tab where you connect your own keys, to see what's actually routable for your org.