# Configuration Endpoints

Endpoints for global settings.

| Method | Path | Description |
|---|---|---|
| `GET` `POST` | `/v1/config/startup` | **local** — launch-on-login. `GET` returns `enabled` (the recorded setting) and `installed` (whether the launchd agent or systemd user unit exists). `POST` `{enable}` (required) writes or removes the launchd agent (macOS) or systemd user unit (Linux) and returns `{ok, enabled, installed, detail}`; it never starts or stops the running daemon, and takes effect at the next login |
| `GET` `POST` | `/v1/config/system` | **local** — reply language. `GET` returns `reply_lang` (`auto` by default) and `languages` (`{code, label}` options, `auto` first). `POST` `{reply_lang}` (required) canonicalizes the code, rejects values over 64 bytes or containing a line break, and writes `reply_lang` to `config.json` |
| `GET` | `/v1/config/reply_lang` | **local** — added in v1.0.11, read-only (a `POST` to this target returns 404). Returns the configured `reply_lang`, its resolved `name`, and the `directive` sentence injected into the system prompt — empty for `auto`, where the reply follows each message's own language |
| `GET` `POST` | `/v1/config/output_dir` | **local** — output directory. `GET` returns `output_dir` (the raw setting) and `resolved` (the directory in use; `~/Downloads` when unset and that folder exists). `POST` `{output_dir}` (required) expands `~`, creates the directory, and writes it to `config.json`; `""` restores the default |

Any other `:target` returns 404.
