---
title: "Update Settings"
method: PATCH
path: "/v1/settings"
tags: ["settings"]
---

# Update Settings

`PATCH /v1/settings`

Persist and apply runtime setting changes.

Each provided field is stored as an override (winning over config/env) and
applied to the running gateway immediately. Master-key gated: these change
how the gateway meters and lists models.

## Request body

- UpdateSettingsRequest — Change one or more runtime settings. Omitted fields are left unchanged. Only the hot-changeable subset is accepted; startup-only fields are not settable over the API (they are display-only in the dashboard).
  - `budget_estimate_default_output_tokens` integer, nullable
  - `default_pricing` boolean, nullable
  - `file_understanding_enabled` boolean, nullable
  - `model_cache_ttl_seconds` integer, nullable
  - `model_discovery` boolean, nullable
  - `model_discovery_negative_ttl_seconds` number, nullable
  - `model_discovery_timeout_seconds` number, nullable
  - `models_dev_cache_ttl_seconds` integer, nullable
  - `models_dev_metadata` boolean, nullable
  - `reject_user_mismatch` boolean, nullable
  - `require_pricing` boolean, nullable
  - `stream_missing_usage_policy` 'estimate' | 'fail' | 'allow_free', nullable
  - `vision_describe_max_tokens` integer, nullable
  - `vision_describe_model` string, nullable
  - `vision_strategy` 'describe' | 'ocr' | 'off', nullable

## Response `200`

Successful Response

- GatewaySettings — Operator-facing runtime settings surfaced to the dashboard. The top-level flags are kept for the callers that read them directly (pricing warnings, the models/providers pages); ``config`` is the full read-only view with the settable/startup-only marking.
  - `config` ConfigField[], required
    - `description` string, nullable
    - `exclusive_minimum` number, nullable
    - `group` string, required
    - `key` string, required
    - `minimum` number, nullable
    - `options` string[], nullable
    - `settable` boolean, required
    - `type` 'bool' | 'int' | 'float' | 'str' | 'list', required
    - `value` union, required
      - boolean
      - integer
      - number
      - string
      - string[]
  - `default_pricing` boolean, required
  - `master_key_source` 'configured' | 'generated', required — Whether the dashboard master key is configured at startup or generated and stored by Otari.
  - `mode` string, required
  - `model_discovery` boolean, required
  - `require_pricing` boolean, required
  - `secret_key_configured` boolean, required — Whether OTARI_SECRET_KEY is set on the server. Provider credentials are encrypted at rest with it, so the dashboard disables adding stored providers when it is unset.
  - `version` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/mozilla-ai/apis/otari.md) · [All operations](https://skmtc.net/mozilla-ai/apis/otari/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mozilla-ai/otari/revisions/c05befed4db4/schema)
