---
title: X
description: If you changed one config key through the API — say the timeout — with PATCH, every other key you had not repeated (authentication, headers, transport mode…
canonical: https://watchfor.io/changelog/2026-09-05-api-config-patch-keeps-settings
---

[All updates](/changelog/page/5#2026-09-05-api-config-patch-keeps-settings) 🐛 Fixed Sep 5, 2026 · v 6.8.1

# API: a partial config update no longer wipes the rest of the config

If you changed one config key through the API — say the timeout — with PATCH, every other key you had not repeated (authentication, headers, transport mode, IP version, body) was silently dropped. That was our bug, and it could break a monitor with one innocent call. PATCH config is now a true partial update: omitted keys are kept, a key sent as null is removed, and lists or objects you send replace the stored value whole. The MCP update_monitor tool and the SDKs inherit the fix; the dashboard's Settings form still saves the whole form as before.

## What went wrong

A monitor's config holds everything that makes the check work: authentication, request headers, the request body, transport mode, IP version. A PATCH with { "config": { "timeoutSeconds": 9 } } replaced that whole object with the one key you sent. The next check went out without its credentials, got a 401, and the monitor went down.

## How a config update works now

You send Result

a key with a value that key changes

nothing for a key it stays as it was

a key set to null it is removed

a list or object, such as requestHeaders it replaces the stored one whole

The merged config is then validated for the monitor's type, like a create. A bad value is refused with a 400 that names the key, and the monitor is left untouched.

## Example

Raise the timeout and drop all custom headers in one call:

curl -X PATCH https://watchfor.io/api/v1/monitors/0b0f6a41-… \
-H "Authorization: Bearer wf_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "config": { "timeoutSeconds": 9, "requestHeaders": null } }'

To change one header, send the whole requestHeaders list with that header edited.

The MCP update_monitor tool and the SDKs behave the same way. The dashboard's Settings form still saves the whole form, because it always shows every field. Details in [Update a monitor](/docs/api/monitors#update-a-monitor).

Since then: an update with an unknown top-level field is refused instead of ignored ([unknown fields refused](/changelog/2026-09-30-api-patch-unknown-fields)).

Share this update

---

Canonical page: https://watchfor.io/changelog/2026-09-05-api-config-patch-keeps-settings · Site guide: https://watchfor.io/llms.txt
