---
title: "Update this org's Customer Voice retention settings"
method: PATCH
path: "/orgs/{org_id}/customer-voice/settings"
tags: ["Organizations"]
---

# Update this org's Customer Voice retention settings

`PATCH /orgs/{org_id}/customer-voice/settings`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings`
- Auth: HTTP bearer

Upserts the org's Aletheia Customer Voice retention configuration (`feedback_retention_settings`, migration 464). `retention_days` must be an integer in `[1, 3650]`, or `null` to retain indefinitely; anything else is rejected with `400`. `enforcement_active` is always `false` in the response today (honest-voice — see the GET description). `owner`/`admin` only. Every write is recorded to the governance audit trail with a before/after diff.

## Path parameters

- `org_id` string, required

## Request body

- object
  - `retention_days` integer, nullable, required: Retention window in days, or `null` to retain indefinitely.

## Response `200`

The updated Customer Voice retention settings.

- RetentionSettings: Aletheia Customer Voice retention configuration for an org (MNE-2407, `feedback_retention_settings`). `retention_days` is a caller-configured retention window (1-3650) or `null` to retain indefinitely (the default for an org with no configured row yet). `enforcement_active` is ALWAYS `false` today — this build ships configuration + storage + audit only; no cron yet reads `retention_days` to auto-erase aged submissions (tracked follow-up, MNE-440/MNE-443). Returned by both `GET` and `PATCH .../customer-voice/settings`.
  - `org_id` string, required: Organization identifier (e.g. org-abc12345).
  - `retention_days` integer, nullable, required: Retention window in days, or `null` to retain indefinitely.
  - `updated_by` string, nullable: User id that last wrote this setting, or `null` if never set.
  - `updated_at` string, date-time, nullable: When this setting was last written, or `null` if never set.
  - `enforcement_active` boolean, required: Always `false` today (honest-voice, MNE-440/MNE-443): retention configuration is stored and audited but not yet enforced by any deletion cron.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
