Do-not-contact records
curl --request GET \
--url https://api-production-a5d3.up.railway.app/v1/opt-outs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-production-a5d3.up.railway.app/v1/opt-outs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-production-a5d3.up.railway.app/v1/opt-outs', 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-production-a5d3.up.railway.app/v1/opt-outs",
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://api-production-a5d3.up.railway.app/v1/opt-outs"
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://api-production-a5d3.up.railway.app/v1/opt-outs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-production-a5d3.up.railway.app/v1/opt-outs")
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": [
{}
],
"pagination": {
"limit": 123,
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}Compliance
Do-not-contact records
Read this before contacting anyone through another channel. An opt-out here is permanent — no live code path clears it.
GET
/
opt-outs
Do-not-contact records
curl --request GET \
--url https://api-production-a5d3.up.railway.app/v1/opt-outs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-production-a5d3.up.railway.app/v1/opt-outs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-production-a5d3.up.railway.app/v1/opt-outs', 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-production-a5d3.up.railway.app/v1/opt-outs",
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://api-production-a5d3.up.railway.app/v1/opt-outs"
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://api-production-a5d3.up.railway.app/v1/opt-outs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-production-a5d3.up.railway.app/v1/opt-outs")
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": [
{}
],
"pagination": {
"limit": 123,
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"traceId": "<string>"
}
}Authorizations
Authorization: Bearer rk_live_…. Keys do not expire and are scoped to one account. The
secret is shown once at creation and stored only as a hash, so it cannot be recovered — if
you lose it, revoke it and generate another on the API keys page.
Query Parameters
Narrow to one campaign.
Page size. An oversized value is clamped rather than rejected.
Required range:
1 <= x <= 200Pass pagination.nextCursor from the previous page.

