---
title: "Update Decision Settings"
method: PUT
path: "/snapshots/{snapshot_id}/decisions/settings"
tags: ["dashboard"]
---

# Update Decision Settings

`PUT /snapshots/{snapshot_id}/decisions/settings`

Merge a patch into the repository's capture policy and return the result.

Only the snapshot owner may edit, matching the page-notes rule: a public
ownerless snapshot is readable but not configurable.

The patch is sparse. Keys nobody set stay unset and keep resolving from the
preset, so a stored policy does not freeze today's defaults.

`etag` is checked when the client sends one. The shared panel autosaves, so
two people on the same settings page would otherwise overwrite each other
with nothing to show that anything was lost.

## Path parameters

- `snapshot_id` string, required

## Request body

- DecisionSettingsUpdate — A sparse patch onto the stored policy. Absent keys stay unset.
  - `preset` string, nullable
  - `enabled` boolean, nullable
  - `llm` boolean, nullable
  - `sources` object, nullable
  - `discovery` object, nullable
  - `etag` string, nullable

## Response `200`

Successful Response

- DecisionSettingsResponse — The resolved capture policy, as the shared settings panel expects it. Resolved rather than stored: the column holds only the keys somebody set, and the engine's resolver fills the rest from the preset on every read. So a repository never silently acquires a capture source because a default moved, and never silently keeps one either. ``provider_available`` is false on hosted. LLM-backed decision capture is off here, so each source reports its deterministic stage running and its model stage skipped, with the reason. That is the honest rendering; a model toggle that looked active would be the dishonest one. ``etag`` is the concurrency token. The panel sends it back on write and a stale one is refused, so two people editing the same policy cannot silently overwrite each other.
  - `enabled` boolean, required
  - `llm` boolean, required
  - `preset` string, required
  - `discovery` object, required
  - `sources` object[], required
  - `provider_available` boolean
  - `warnings` string[]
  - `legacy_keys` string[]
  - `etag` string

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/repowise/apis/repowise-hosted-api.md) · [All operations](https://skmtc.dev/repowise/apis/repowise-hosted-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/repowise/repowise-hosted-api/revisions/1e57283a9737/schema)
