. Create an API key under API keys.API reference · Customers
Privacy
Export or erase everything held about one person, and how long message content is kept.
Export the data of one person
/v1/privacy/contactExport everything held about one person (data-subject access request): consent and its history, contacts, messages (up to 5 000), inbox, assignments, blast participation, scheduled and recurring messages, satisfaction answers. Account owner or API key only.
Query parameters
phonestringrequiredInternational format+<country code><number>
Responses
- 200Everything held for that number
Response fields
exported_atstringrequiredphonestringrequiredconsentanyconsent_historyarray of anyrequiredcontactsarray of anyrequiredmessagesarray of anyrequiredmessages_truncatedbooleanrequiredinboxarray of anyrequiredchat_metadataarray of anyrequiredassignmentsarray of anyrequiredblast_participationarray of anyrequiredscheduled_messagesarray of anyrequiredrecurring_messagesarray of anyrequiredcsat_responsesarray of anyrequired
- 400
INVALID_NUMBER
curl "https://api.chatkomodo.com/v1/privacy/contact?phone=%2B447700900123" \
-H "Authorization: Bearer $CHATKOMODO_API_KEY"const res = await fetch('https://api.chatkomodo.com/v1/privacy/contact?phone=%2B447700900123', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CHATKOMODO_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.code}: ${data.error}`);
console.log(data);import os
import requests
res = requests.get(
"https://api.chatkomodo.com/v1/privacy/contact?phone=%2B447700900123",
headers={
"Authorization": f"Bearer {os.environ['CHATKOMODO_API_KEY']}",
},
timeout=30,
)
res.raise_for_status()
print(res.json())<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.chatkomodo.com/v1/privacy/contact?phone=%2B447700900123', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHATKOMODO_API_KEY'),
],
]);
print_r(json_decode((string) $res->getBody(), true));{
"exported_at": "string",
"phone": "+447700900123",
"consent": "string",
"consent_history": [
"string"
],
"contacts": [
"string"
],
"messages": [
"Hi Sam, your order has shipped."
],
"messages_truncated": true,
"inbox": [
"string"
],
"chat_metadata": [
"string"
],
"assignments": [
"string"
],
"blast_participation": [
"string"
],
"scheduled_messages": [
"Hi Sam, your order has shipped."
],
"recurring_messages": [
"Hi Sam, your order has shipped."
],
"csat_responses": [
"string"
]
}Erase the data of one person
/v1/privacy/contactErase everything held about one person (right to erasure). Irreversible. confirm must repeat the phone number, otherwise the call fails with 400 CONFIRMATION_REQUIRED. By default an opt-out record is kept so the person is not messaged again (keep_suppression: false removes it too). Account owner or API key only.
Request body
phonestringrequiredconfirmstringrequiredThe same phone number againkeep_suppressionbooleanDefaulttrue
Responses
- 200Erased
Response fields
okbooleanrequireddeletedobjectrequiredRows removed per data typesuppression_keptbooleanrequiredfailedarray of stringrequiredData types that could not be erased; empty when the erasure is complete
- 400
INVALID_NUMBERorCONFIRMATION_REQUIRED - 500
ERASURE_INCOMPLETE: some records could not be deleted (failedlists them); repeat the request or contact support
curl -X DELETE "https://api.chatkomodo.com/v1/privacy/contact" \
-H "Authorization: Bearer $CHATKOMODO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone": "+447700900123",
"confirm": "+447700900123",
"keep_suppression": true
}'const res = await fetch('https://api.chatkomodo.com/v1/privacy/contact', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CHATKOMODO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"phone": "+447700900123",
"confirm": "+447700900123",
"keep_suppression": true
}),
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.code}: ${data.error}`);
console.log(data);import os
import requests
res = requests.delete(
"https://api.chatkomodo.com/v1/privacy/contact",
headers={
"Authorization": f"Bearer {os.environ['CHATKOMODO_API_KEY']}",
},
json={
"phone": "+447700900123",
"confirm": "+447700900123",
"keep_suppression": True,
},
timeout=30,
)
res.raise_for_status()
print(res.json())<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$res = $client->request('DELETE', 'https://api.chatkomodo.com/v1/privacy/contact', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHATKOMODO_API_KEY'),
],
'json' => [
'phone' => '+447700900123',
'confirm' => '+447700900123',
'keep_suppression' => true,
],
]);
print_r(json_decode((string) $res->getBody(), true));{
"ok": true,
"deleted": {},
"suppression_kept": true,
"failed": [
"string"
]
}Get the message retention
/v1/privacy/retentionHow long message content is kept.
Responses
- 200Retention
Response fields
message_daysinteger | nullrequiredYour own setting;null= platform defaulteffective_daysintegerrequireddefault_daysintegerrequiredmin_daysintegerrequiredmax_daysintegerrequired
curl "https://api.chatkomodo.com/v1/privacy/retention" \
-H "Authorization: Bearer $CHATKOMODO_API_KEY"const res = await fetch('https://api.chatkomodo.com/v1/privacy/retention', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CHATKOMODO_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.code}: ${data.error}`);
console.log(data);import os
import requests
res = requests.get(
"https://api.chatkomodo.com/v1/privacy/retention",
headers={
"Authorization": f"Bearer {os.environ['CHATKOMODO_API_KEY']}",
},
timeout=30,
)
res.raise_for_status()
print(res.json())<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.chatkomodo.com/v1/privacy/retention', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHATKOMODO_API_KEY'),
],
]);
print_r(json_decode((string) $res->getBody(), true));{
"message_days": 1,
"effective_days": 1,
"default_days": 1,
"min_days": 1,
"max_days": 1
}Set the message retention
/v1/privacy/retentionDashboard loginSet the message retention period in days (between min_days and max_days), or null for the platform default. Account owner only.
Request body
message_daysinteger | nullrequired
Responses
- 200Saved
Response fields
message_daysinteger | nullrequiredeffective_daysintegerrequired
- 400Out of range (
VALIDATION_FAILED)
curl -X PUT "https://api.chatkomodo.com/v1/privacy/retention" \
-H "Authorization: Bearer $CHATKOMODO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message_days": 90
}'const res = await fetch('https://api.chatkomodo.com/v1/privacy/retention', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.CHATKOMODO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"message_days": 90
}),
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.code}: ${data.error}`);
console.log(data);import os
import requests
res = requests.put(
"https://api.chatkomodo.com/v1/privacy/retention",
headers={
"Authorization": f"Bearer {os.environ['CHATKOMODO_API_KEY']}",
},
json={
"message_days": 90,
},
timeout=30,
)
res.raise_for_status()
print(res.json())<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$res = $client->request('PUT', 'https://api.chatkomodo.com/v1/privacy/retention', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHATKOMODO_API_KEY'),
],
'json' => [
'message_days' => 90,
],
]);
print_r(json_decode((string) $res->getBody(), true));{
"message_days": 1,
"effective_days": 1
}