# Update an LLM provider

Source: <https://everruns.com/docs/api/operations/update_provider/>

PATCH

/v1/providers/{id}

Select code samplecURL (shell:curl)

```js
const url = 'https://app.everruns.com/api/v1/providers/example';
const options = {
  method: 'PATCH',
  headers: {'Content-Type': 'application/json'},
  body: '{"api_key":"example","base_url":"https://api.openai.com/v1","credentials":"example","name":"OpenAI Development","provider_type":"example","request_options":{"cache_diagnostics":true,"headers":[{"name":"example","value":"example"}]},"status":"active","trace":{"enabled":true,"generation_url_template":"example","session_url_template":"example"}}'
};


try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```sh
curl --request PATCH \
  --url https://app.everruns.com/api/v1/providers/example \
  --header 'Content-Type: application/json' \
  --data '{ "api_key": "example", "base_url": "https://api.openai.com/v1", "credentials": "example", "name": "OpenAI Development", "provider_type": "example", "request_options": { "cache_diagnostics": true, "headers": [ { "name": "example", "value": "example" } ] }, "status": "active", "trace": { "enabled": true, "generation_url_template": "example", "session_url_template": "example" } }'
```

* Production APIapp.everruns.com/api/v1/providers/{id}

## Parameters

### Path Parameters

**id**

required

string

Provider ID (prefixed, e.g., prov\_…)

## Request Bodyrequired

Media typeapplication/json

Request to update an LLM provider. Only provided fields will be updated.

object

**api\_key**

API key for authenticating with the provider. Will be encrypted at rest if encryption is configured.

Single-field convenience for simple providers and programmatic clients. Multi-field drivers (Bedrock, MAI) should send `credentials` instead.

string | null

**base\_url**

Base URL for the provider’s API.

string | null

##### Example

```plaintext
https://api.openai.com/v1
```

**credentials**

Typed credential fields keyed by the driver’s declared credential-schema field names. Validated against the schema and assembled into the stored credential document. Takes precedence over `api_key` when present.

object | null

**name**

Display name for the provider.

string | null

##### Example

```plaintext
OpenAI Development
```

**provider\_type**

One of:

* string

  The type of LLM provider (e.g., openai, anthropic).

  string

* null

  null

**request\_options**

One of:

* object

  Extra headers and diagnostics options applied to every request sent to this provider. Replaces the stored options wholesale; omit to leave them unchanged.

  object

  **cache\_diagnostics**

  Ask the provider to explain unexpected prompt-cache misses. Honored by drivers with a diagnostics protocol (today: Anthropic’s `cache-diagnosis` beta); ignored elsewhere.

  boolean

  **headers**

  Extra HTTP headers added to every request to this provider. They override the driver’s and the connection’s own headers by name, but connection-level headers (`host`, `content-length`, …) are ignored.

  Array\<object>

  One extra HTTP header sent with every request to a provider connection.

  object

  **name**

  required

  Header name, e.g. `x-gateway-tenant`.

  string

  **value**

  required

  Header value, sent verbatim.

  string

* null

  null

**status**

One of:

* string

  The status of the provider. Set to “inactive” to disable.

  string

  Allowed values: active disabled

* null

  null

**trace**

One of:

* object

  Trace/observability link configuration override. Merged into the provider’s stored settings, preserving other settings keys.

  object

  **enabled**

  required

  Whether trace links should be shown for this provider. Defaults to `false`: vendors typically do not retain trace content unless logging is explicitly enabled, so the org opts in once that is set up.

  boolean

  **generation\_url\_template**

  URL template for a single generation’s trace, e.g. `"https://openrouter.ai/logs?id={response_id}"`.

  string | null

  **session\_url\_template**

  URL template for a session’s grouped trace, e.g. `"https://openrouter.ai/logs"`.

  string | null

* null

  null

## Responses

### 200

Provider updated

Media typeapplication/json

Wrapper that adds API and UI links to a serialized resource.

Uses `self_url` (not `url`) for the API link to avoid collision with resources that already have a `url` field (e.g. McpServer). The `allowed_actions` array carries state-aware hypermedia links — empty (and omitted from the wire shape) until the underlying resource opts into the convention by overriding `ResourceUrlable::allowed_actions`.

object

**api\_key\_set**

required

Whether an API key is configured. The key itself is never returned.

boolean

**base\_url**

Custom base URL for self-hosted / proxied providers. `None` means use the provider’s default endpoint.

string | null

**created\_at**

required

Timestamp when this provider was created (RFC 3339).

string format: date-time

**id**

required

Prefixed public identifier. See [ID Schema](https://everruns.com/docs/advanced/id-schema/).

string

**last\_synced\_at**

Timestamp of the most recent successful model sync from the provider’s API (RFC 3339).

string | null format: date-time

**managed**

required

Whether this provider is host-managed (EVE-810). A managed provider is provisioned by the host/embedder; the OSS API rejects tenant PATCH/DELETE on it (403). Read-only to org admins. Defaults to `false`.

boolean

**models\_reviewed\_at**

When someone last reviewed this provider’s discovered models (RFC 3339). A discovered model created later that is still disabled is reported as `is_new` on the model. `None` means never reviewed.

string | null format: date-time

**name**

required

Human-readable provider name. Safe to render in user-facing messages.

string

**provider\_type**

required

Provider implementation type (OpenAI, Anthropic, Gemini, etc.).

string

**request\_options**

One of:

* object

  Extra headers and diagnostics options applied to every request sent to this provider. `None` when the org configured nothing.

  object

  **cache\_diagnostics**

  Ask the provider to explain unexpected prompt-cache misses. Honored by drivers with a diagnostics protocol (today: Anthropic’s `cache-diagnosis` beta); ignored elsewhere.

  boolean

  **headers**

  Extra HTTP headers added to every request to this provider. They override the driver’s and the connection’s own headers by name, but connection-level headers (`host`, `content-length`, …) are ignored.

  Array\<object>

  One extra HTTP header sent with every request to a provider connection.

  object

  **name**

  required

  Header name, e.g. `x-gateway-tenant`.

  string

  **value**

  required

  Header value, sent verbatim.

  string

* null

  null

**status**

required

Current lifecycle status of this provider.

string

Allowed values: active disabled

**trace**

One of:

* object

  Resolved trace/observability link configuration: the driver’s default templates overlaid with this provider’s stored overrides. `None` when the driver exposes no dashboard and the org configured nothing.

  object

  **enabled**

  required

  Whether trace links should be shown for this provider. Defaults to `false`: vendors typically do not retain trace content unless logging is explicitly enabled, so the org opts in once that is set up.

  boolean

  **generation\_url\_template**

  URL template for a single generation’s trace, e.g. `"https://openrouter.ai/logs?id={response_id}"`.

  string | null

  **session\_url\_template**

  URL template for a session’s grouped trace, e.g. `"https://openrouter.ai/logs"`.

  string | null

* null

  null

**updated\_at**

required

Timestamp when this provider was last updated (RFC 3339).

string format: date-time

**allowed\_actions**

State-aware hypermedia actions the caller can take on this resource next (e.g. `cancel`, `events`, `update`). Omitted from the wire shape when empty so resources that haven’t opted into the convention don’t grow their payloads.

Array\<object>

Agent-actionable link describing a follow-up the caller can take. Used in two contexts:

* **Error recovery** — `ErrorResponse.allowed_actions` carries `rel`s like `retry`, `retry-later`, `unarchive`, `get-existing` so the agent knows the right next call after a 4xx/429.
* **Entity hypermedia** — `WithUrls<T>.allowed_actions` carries state-aware `rel`s like `cancel`, `events`, `self`, `update` on the entity itself so the agent can follow links instead of reconstructing routes from prose.

The shape is intentionally identical across both contexts; the closed `rel` vocabulary distinguishes them.

object

**hint**

Short, agent-readable hint (e.g. “Shorten ‘name’ to <= 200 chars.”, “Cancel the active turn for this session.”).

string | null

**href**

Absolute (preferred) or relative URL the caller may invoke directly. **Always present on entity hypermedia actions** (`WithUrls<T>.allowed_actions`); **optional on error-recovery actions** (`ErrorResponse.allowed_actions`) where the matching `operation_id` is enough and the URI is implicit from the failed call.

string | null

**method**

HTTP method to use against `href`. Required for entity hypermedia actions; usually omitted on error-recovery actions where the same operation is retried with its original method.

string | null

**operation\_id**

OpenAPI `operationId` the caller should invoke. Lets an MCP client resolve the call without parsing `href`.

string | null

**rel**

required

Link relation describing the action. Examples: `self`, `cancel`, `pause`, `resume`, `events`, `retry`, `retry-later`, `unarchive`, `get-existing`, `delete`, `update`.

string

**schema\_ref**

OpenAPI `$ref` to the request-body schema, when the action takes one (e.g. `#/components/schemas/UpdateSessionRequest`). Lets a tool-calling agent fetch the input shape without scanning the whole spec.

string | null

**self\_url**

required

Full API endpoint URL for this resource.

string

**ui\_link**

required

Alias for `view_url`, used by command and MCP outputs.

string

**view\_url**

required

Full UI URL for viewing this resource.

string

##### Example

```json
{
  "id": "provider_01933b5a00007000800000000000001",
  "status": "active",
  "allowed_actions": [
    {
      "method": "POST"
    }
  ]
}
```

### 400

Invalid provider ID

### 404

Provider not found