Update Project Retention Policy
Endpoint
PUT https://api.verifik.co/v2/projects/{id}/data-retention
Configures a project-level data retention override. When saved, enrollments and validations conducted under this project will honor these settings instead of account defaults.
[!NOTE] Lower-level overrides cannot loosen strict compliance settings set at the account level (e.g. if an account is configured for
none, a project cannot switch back tostore).
Headers
| Name | Value |
|---|---|
Content-Type | application/json |
Authorization | Bearer <token> |
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The unique identifier of the project |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
mode | string | No | Override storage mode (store, ephemeral, none) |
types | object | No | Granular settings for documentImages, faceImages, ocrExtraction, and documentLiveness |
webhookHoldHours | number | No | Webhook hold duration (24 to 72 hours) |
allowManualDelete | boolean | No | Whether manual erasure routes are enabled for this project |
Request
- Node.js
- Python
const fetch = require("node-fetch");
async function updateProjectRetention() {
const projectId = "6266193db77ccc8111730c90";
const payload = {
mode: "ephemeral",
types: {
documentImages: { mode: "ephemeral", retentionHours: null },
faceImages: { mode: "ephemeral", retentionHours: null },
ocrExtraction: { mode: "store", retentionHours: null },
documentLiveness: { mode: "none", retentionHours: null }
},
webhookHoldHours: 24,
allowManualDelete: true
};
const res = await fetch(`https://api.verifik.co/v2/projects/${projectId}/data-retention`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.VERIFIK_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload)
});
console.log(await res.json());
}
updateProjectRetention();
import os, requests
project_id = "6266193db77ccc8111730c90"
url = f"https://api.verifik.co/v2/projects/{project_id}/data-retention"
headers = {
"Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}",
"Content-Type": "application/json"
}
payload = {
"mode": "ephemeral",
"types": {
"documentImages": {"mode": "ephemeral", "retentionHours": None},
"faceImages": {"mode": "ephemeral", "retentionHours": None},
"ocrExtraction": {"mode": "store", "retentionHours": None},
"documentLiveness": {"mode": "none", "retentionHours": None}
},
"webhookHoldHours": 24,
"allowManualDelete": True
}
response = requests.put(url, json=payload, headers=headers)
print(response.json())
Response
- 200
- 403
{
"data": {
"mode": "ephemeral",
"types": {
"documentImages": { "mode": "ephemeral", "retentionHours": null },
"faceImages": { "mode": "ephemeral", "retentionHours": null },
"ocrExtraction": { "mode": "store", "retentionHours": null },
"documentLiveness": { "mode": "none", "retentionHours": null }
},
"webhookHoldHours": 24,
"allowManualDelete": true
}
}
{
"message": "Cannot loosen account-level compliance retention policy",
"code": "Forbidden"
}