curl --request PATCH \
--url https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"retention_days": 1825
}
'import requests
url = "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings"
payload = { "retention_days": 1825 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({retention_days: 1825})
};
fetch('https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'retention_days' => 1825
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings"
payload := strings.NewReader("{\n \"retention_days\": 1825\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"retention_days\": 1825\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"retention_days\": 1825\n}"
response = http.request(request)
puts response.read_body{
"org_id": "<string>",
"retention_days": 1825,
"enforcement_active": true,
"updated_by": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}Update this org's Customer Voice retention settings
Upserts the org’s Aletheia Customer Voice retention configuration (feedback_retention_settings, migration 464).
curl --request PATCH \
--url https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"retention_days": 1825
}
'import requests
url = "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings"
payload = { "retention_days": 1825 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({retention_days: 1825})
};
fetch('https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'retention_days' => 1825
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings"
payload := strings.NewReader("{\n \"retention_days\": 1825\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"retention_days\": 1825\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mnemom.ai/v1/orgs/{org_id}/customer-voice/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"retention_days\": 1825\n}"
response = http.request(request)
puts response.read_body{
"org_id": "<string>",
"retention_days": 1825,
"enforcement_active": true,
"updated_by": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}Authorizations
Supabase JWT token in Authorization: Bearer header
Path Parameters
Organization identifier (e.g. org-abc12345)
Body
Retention window in days, or null to retain indefinitely.
1 <= x <= 3650Response
The updated Customer Voice retention settings.
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.
Organization identifier (e.g. org-abc12345).
Retention window in days, or null to retain indefinitely.
1 <= x <= 3650Always false today (honest-voice, MNE-440/MNE-443): retention configuration is stored and audited but not yet enforced by any deletion cron.
User id that last wrote this setting, or null if never set.
When this setting was last written, or null if never set.