curl --request POST \
--url https://app.famulor.io/api/v1/suppression-list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"reason": "Unsubscribe request"
}
'import requests
url = "https://app.famulor.io/api/v1/suppression-list"
payload = {
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"reason": "Unsubscribe request"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
phone: '+4930123456',
email: 'contact@example.com',
reason: 'Unsubscribe request'
})
};
fetch('https://app.famulor.io/api/v1/suppression-list', 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/suppression-list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'phone' => '+4930123456',
'email' => 'contact@example.com',
'reason' => 'Unsubscribe request'
]),
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://app.famulor.io/api/v1/suppression-list"
payload := strings.NewReader("{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.io/api/v1/suppression-list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/suppression-list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"identity_type": "phone",
"identity": "<string>",
"scope": "all",
"origin_channel": "voice",
"purpose": "marketing",
"reason": "Unsubscribe request",
"source": "<string>",
"mode_at_opt_out": "universal",
"created_at": "2023-11-07T05:31:56Z"
}
}Add a suppression entry
Records a marketing opt-out for a contact identified by contact ID, phone, or email. The current workspace consent mode determines whether the resulting scope is universal or limited to the originating channel. Required scope: suppression:write.
curl --request POST \
--url https://app.famulor.io/api/v1/suppression-list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"reason": "Unsubscribe request"
}
'import requests
url = "https://app.famulor.io/api/v1/suppression-list"
payload = {
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"reason": "Unsubscribe request"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
phone: '+4930123456',
email: 'contact@example.com',
reason: 'Unsubscribe request'
})
};
fetch('https://app.famulor.io/api/v1/suppression-list', 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/suppression-list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'phone' => '+4930123456',
'email' => 'contact@example.com',
'reason' => 'Unsubscribe request'
]),
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://app.famulor.io/api/v1/suppression-list"
payload := strings.NewReader("{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.io/api/v1/suppression-list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/suppression-list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"phone\": \"+4930123456\",\n \"email\": \"contact@example.com\",\n \"reason\": \"Unsubscribe request\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"phone": "+4930123456",
"email": "contact@example.com",
"identity_type": "phone",
"identity": "<string>",
"scope": "all",
"origin_channel": "voice",
"purpose": "marketing",
"reason": "Unsubscribe request",
"source": "<string>",
"mode_at_opt_out": "universal",
"created_at": "2023-11-07T05:31:56Z"
}
}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.
Body
- Option 1
- Option 2
- Option 3
Existing workspace contact/lead ID.
Phone number in E.164 format. Separators are stripped.
"+4930123456"
Contact email address.
"contact@example.com"
Channel where the opt-out occurred. When omitted, phone defaults to voice and email defaults to email.
voice, sms, email, telegram, slack, messenger, teams, discord, gchat, x, whatsapp, freshdesk, gmail, outlook, zendesk, servicenow, intercom, zoho_mail, agent_mail, instagram, zulip Optional reason (max 500 characters).
500"Unsubscribe request"
Response
The created entry.
Show child attributes
Show child attributes