curl --request GET \
--url https://app.famulor.io/api/v1/contacts/memory \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/contacts/memory"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/contacts/memory', 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://app.famulor.io/api/v1/contacts/memory",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/contacts/memory"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/contacts/memory")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/contacts/memory")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": "workspace",
"variables": {},
"source_channels": [
"voice"
],
"interaction_count": 1,
"revision": 2,
"consent_status": "unknown",
"assistant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assistant_name": "<string>",
"summary": "<string>",
"preferences": {},
"consent_at": "2023-11-07T05:31:56Z",
"consent_source": "<string>",
"last_read_at": "2023-11-07T05:31:56Z",
"last_written_at": "2023-11-07T05:31:56Z",
"retention_until": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"phone": "<string>",
"email": "jsmith@example.com",
"avatar_url": "<string>",
"sources": [
"<string>"
]
},
"identities": [
{
"type": "<string>",
"hint": "<string>",
"channel": "<string>",
"confidence": 0.5,
"verified_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
}
]
}
],
"meta": {
"pagination": {
"limit": 123,
"offset": 123,
"total": 123
}
}
}List customer memories
Lists one consent- and retention-aware memory entry per contact with exact channel identities. Private assistant content is never exposed in the list. Required scope: leads:read or calls:read.
curl --request GET \
--url https://app.famulor.io/api/v1/contacts/memory \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/contacts/memory"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/contacts/memory', 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://app.famulor.io/api/v1/contacts/memory",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/contacts/memory"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/contacts/memory")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/contacts/memory")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": "workspace",
"variables": {},
"source_channels": [
"voice"
],
"interaction_count": 1,
"revision": 2,
"consent_status": "unknown",
"assistant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assistant_name": "<string>",
"summary": "<string>",
"preferences": {},
"consent_at": "2023-11-07T05:31:56Z",
"consent_source": "<string>",
"last_read_at": "2023-11-07T05:31:56Z",
"last_written_at": "2023-11-07T05:31:56Z",
"retention_until": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"phone": "<string>",
"email": "jsmith@example.com",
"avatar_url": "<string>",
"sources": [
"<string>"
]
},
"identities": [
{
"type": "<string>",
"hint": "<string>",
"channel": "<string>",
"confidence": 0.5,
"verified_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
}
]
}
],
"meta": {
"pagination": {
"limit": 123,
"offset": 123,
"total": 123
}
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.
Query Parameters
unknown, granted, denied Case-insensitive search across contact name, phone, email, and the currently visible shared summary. Applied before pagination together with the consent filter. Private, expired, and stale memory content is not searched.
200Page size (1–200).
1 <= x <= 200Number of items to skip.
x >= 0