LLM Providers API: manage and sync API keys
Store, update, and sync LLM provider API keys to your running Nora agents. Keys are masked in all API responses and never returned in plain text.The LLM Providers API lets you associate API keys for language model services (OpenAI, Anthropic, and others) with your Nora account. Provider create, update, and delete requests reconcile the complete current provider state to running agents before the request reports success. Keys are encrypted at rest and never returned in plain text — all responses show a masked version of the key.
You can also trigger the same reconciliation explicitly with
POST /llm-providers/sync.Mutation and revocation semantics
Provider mutations are serialized per user with provisioning and lifecycle reconciliation. Nora replaces its managed environment,auth-profiles.json, OpenClaw SQLite auth profiles, custom-provider
configuration, and managed default-model state from the current database contents, including when
that desired state is empty.
A successful mutation can include sync_warning when an agent could not be updated but Nora
confirmed that it was stopped and quarantined with
paused_reason=provider_auth_reconciliation_failed. A later start or restart must reconcile the
current provider state before that lifecycle request reports success.
If the database mutation committed but Nora cannot confirm runtime reconciliation or containment,
the API returns 502 with committed: true and per-agent sync_results. Do not blindly retry a
create request after this response; first list the saved providers and inspect the affected agents.
List available providers
Return the full catalog of LLM providers that Nora supports, including their supported models.Response
Returns an array of provider descriptors.string
Provider identifier, e.g.
openai, anthropic.string
Human-readable provider name.
string[]
Supported model identifiers for this provider.
boolean
Present only for catalog entries that do not need a key — such as the built-in
demo provider
("Demo (built-in, no key required)"), which carries requiresApiKey: false. Omitted for
key-requiring providers.curl
List your saved providers
Return the LLM provider configurations saved to your account. API keys are masked.Response
string
Provider record UUID.
string
Provider identifier.
string
Masked key, e.g.
sk-...abc123. The full key is never returned.string
Default model selected for this provider.
object
Additional provider-specific configuration.
boolean
Whether this is the default provider for new agents.
string
ISO 8601 creation timestamp.
curl
Add a provider
Save a new LLM provider API key to your account. After the record is saved, Nora synchronously reconciles the current provider state to affected running agents before returning success.Request body
string
required
Provider identifier, e.g.
openai, anthropic. Must match a value from GET /llm-providers/available.string
The API key issued by the provider. Required for every provider except the built-in
demo
provider, whose token is derived server-side — omit apiKey when provider is demo. The demo
entry is flagged requiresApiKey: false in GET /llm-providers/available.string
Default model to use for this provider, e.g.
claude-opus-4-6 for Anthropic or gpt-5.5 for
OpenAI.object
Optional provider-specific configuration object (e.g. base URL overrides).
Response
Returns the saved provider record (id, provider, model, is_default, created_at). The create response omits the masked key and config — use GET /llm-providers to retrieve the masked record.
Update a provider
Update the API key, model, or config for an existing provider record.Path parameters
string
required
Provider record UUID.
Request body
string
New API key.
string
New default model.
object
Updated provider-specific configuration.
boolean
Set this provider as the default.
Response
Returns the updated provider record with the key masked. The update can return committed502 with the same reconciliation semantics described above.
Delete a provider
Remove a provider record from your account. Nora performs exact empty-state-aware reconciliation for running agents as part of the same request. If an affected runtime cannot be reconciled, Nora stops and quarantines it; if that containment cannot be confirmed, the deletion returns committed502.
Path parameters
string
required
Provider record UUID.
Response
boolean
true when the record was deleted.curl
Sync keys to agents
Push the current set of provider keys to all running agents, or to a single specified agent. This writes updatedauth-profiles.json credentials and sets the active model inside each agent runtime.
Request body
string
UUID of a specific agent to sync. When omitted, all running agents owned by you are synced.
Response
number
Number of agents that were successfully synced.
number
Total number of agents attempted.
object[]
Per-agent sync results.

