> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-exo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Settings

> Per-subject preferences, read, patched and reset.

## What this family does

Settings are small and deliberately so: `qualityMode` and `learnModeDefault`. A subject that has never written settings reads the server defaults rather than an empty object.

Patching is an upsert over the fields you send. Resetting restores the server defaults and returns them.

## Routes

| Method  | Path                                                           | Scope   | What it does    |
| ------- | -------------------------------------------------------------- | ------- | --------------- |
| `GET`   | [`/v1/settings`](/api-reference/settings/get-settings)         | `read`  | Get settings    |
| `PATCH` | [`/v1/settings`](/api-reference/settings/patch-settings)       | `write` | Update settings |
| `POST`  | [`/v1/settings/reset`](/api-reference/settings/reset-settings) | `write` | Reset settings  |

## Headers that apply here

Neither header is declared as an OpenAPI parameter, so neither appears in the generated schema tables.

* **`X-Exo-Subject`** selects which subject the call acts for on the subject-aware routes above. Omit it to act as the key owner. See [Subjects](/api-reference/subjects).
* **`Idempotency-Key`** makes a retry safe on `POST /v1/settings/reset`. See [Idempotency](/platform/idempotency).

## The shape of a call

Read settings.

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  curl https://api.get-exo.com/v1/settings \
    -H "X-Exo-API-Key: $EXO_KEY"
  ```

  ```python Python theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  import httpx

  response = httpx.get(
      "https://api.get-exo.com/v1/settings",
      headers={"X-Exo-API-Key": EXO_KEY},
  )
  ```

  ```typescript TypeScript theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
  const response = await fetch("https://api.get-exo.com/v1/settings", {
    headers: { "X-Exo-API-Key": process.env.EXO_KEY! },
  });
  ```
</CodeGroup>

The response:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
{
  "qualityMode": "balanced",
  "learnModeDefault": false
}
```

## Traps

**An unknown field is a 422, not a silent no-op.** The patch body is validated, so a typo fails loudly.

**Settings operations are not metered.** Reads and patches are free. A reset is recorded for audit.

## Related

<Columns cols={2}>
  <Card title="API reference" icon="book-open" href="/api-reference/overview">
    Base URL, authentication, and the conventions every route shares.
  </Card>

  <Card title="Errors" icon="circle-alert" href="/platform/errors">
    The problem envelope and the full code catalogue.
  </Card>
</Columns>
