Update Config
const url = 'https://example.com/config';const options = { method: 'PUT', headers: {'Content-Type': 'application/json'}, body: '{"ai_api_key":"example","ai_base_url":"example","ai_model":"example","ai_provider":"none","audit_retention_days":1,"grafana_url":"example","oidc_auto_provision":true,"oidc_client_id":"example","oidc_client_secret":"example","oidc_issuer":"example","price_api_key":"example","price_provider":"none","price_stale_days":1,"privacy_amount":true,"privacy_purchase":true,"session_idle_hours":1,"session_ttl_days":1,"sync_schedule":{"hour":1,"minute":1,"preset":"daily"},"transfer_auto_link":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://example.com/config \ --header 'Content-Type: application/json' \ --data '{ "ai_api_key": "example", "ai_base_url": "example", "ai_model": "example", "ai_provider": "none", "audit_retention_days": 1, "grafana_url": "example", "oidc_auto_provision": true, "oidc_client_id": "example", "oidc_client_secret": "example", "oidc_issuer": "example", "price_api_key": "example", "price_provider": "none", "price_stale_days": 1, "privacy_amount": true, "privacy_purchase": true, "session_idle_hours": 1, "session_ttl_days": 1, "sync_schedule": { "hour": 1, "minute": 1, "preset": "daily" }, "transfer_auto_link": true }'Request Bodyrequired
Section titled “Request Bodyrequired”Partial update: absent fields are untouched; null is accepted only for NULLABLE_KEYS (reset a key to its env default with DELETE).
object
User-facing SimpleFIN sync schedule (UTC).
Presets rather than raw cron. hour/minute apply to daily only;
the interval presets are anchored so every choice lands a fresh sync just
before the 06:45 UTC matching job, and hourly (24 runs/day) sits
exactly at the SimpleFIN Bridge budget — the per-connection fetch guard
fails soft beyond it.
Responses
Section titled “Responses”Successful Response
object
Read-only posture block (issue #123). Field-level Fernet encryption is mandatory (startup fails closed without a working key), so this mostly attests rather than warns. Since #137 the narrative layer (payee names, descriptions, memos, schedule names, audit/event payloads) is encrypted too; only the numeric skeleton (amounts, dates, statuses, ltree paths, ids) and the readmodel v2 views over it stay plaintext by design (decision 36). Storage-level encryption remains a deployment concern the app can’t attest.
object
User-facing SimpleFIN sync schedule (UTC).
Presets rather than raw cron. hour/minute apply to daily only;
the interval presets are anchored so every choice lands a fresh sync just
before the 06:45 UTC matching job, and hourly (24 runs/day) sits
exactly at the SimpleFIN Bridge budget — the per-connection fetch guard
fails soft beyond it.
Example
{ "values": { "sync_schedule": { "preset": "daily" } }}Validation Error
object
object
object
Example generated
{ "detail": [ { "ctx": {}, "input": "example", "loc": [ "example" ], "msg": "example", "type": "example" } ]}