curl --request PUT \
--url https://api.aws53.cloud/v1/data/suppression-rules \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"rules": [
{
"type": "domain",
"value": "mycompany.com"
},
{
"type": "domain",
"value": "subsidiary.com"
}
],
"types": [
"domain"
]
}
'import requests
url = "https://api.aws53.cloud/v1/data/suppression-rules"
payload = {
"rules": [
{
"type": "domain",
"value": "mycompany.com"
},
{
"type": "domain",
"value": "subsidiary.com"
}
],
"types": ["domain"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rules: [
{type: 'domain', value: 'mycompany.com'},
{type: 'domain', value: 'subsidiary.com'}
],
types: ['domain']
})
};
fetch('https://api.aws53.cloud/v1/data/suppression-rules', 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.aws53.cloud/v1/data/suppression-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'rules' => [
[
'type' => 'domain',
'value' => 'mycompany.com'
],
[
'type' => 'domain',
'value' => 'subsidiary.com'
]
],
'types' => [
'domain'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.aws53.cloud/v1/data/suppression-rules"
payload := strings.NewReader("{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.put("https://api.aws53.cloud/v1/data/suppression-rules")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aws53.cloud/v1/data/suppression-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"added": 123,
"removed": 123,
"duplicates": 123,
"rejectedCount": 123,
"rejected": [
{
"index": 123,
"type": "<string>",
"value": "<string>",
"reason": "<string>"
}
],
"total": 123
}
}Replace the suppression list
Destructive sync: every existing rule is deleted and replaced by the submitted set, in one transaction. This is the endpoint to point at a source-of-truth file — re-post the whole list on every run and the stored list matches it exactly. Rules removed here stop suppressing from the next sync cycle onward. Pass types to replace only some rule types and leave the rest untouched (e.g. sync your email list without disturbing industry rules); send an empty rules array with types to clear a category. Up to 25,000 rules per call — a list longer than that cannot be replaced atomically, so build it with POST instead. Authenticates via X-API-Key header.
curl --request PUT \
--url https://api.aws53.cloud/v1/data/suppression-rules \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"rules": [
{
"type": "domain",
"value": "mycompany.com"
},
{
"type": "domain",
"value": "subsidiary.com"
}
],
"types": [
"domain"
]
}
'import requests
url = "https://api.aws53.cloud/v1/data/suppression-rules"
payload = {
"rules": [
{
"type": "domain",
"value": "mycompany.com"
},
{
"type": "domain",
"value": "subsidiary.com"
}
],
"types": ["domain"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rules: [
{type: 'domain', value: 'mycompany.com'},
{type: 'domain', value: 'subsidiary.com'}
],
types: ['domain']
})
};
fetch('https://api.aws53.cloud/v1/data/suppression-rules', 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.aws53.cloud/v1/data/suppression-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'rules' => [
[
'type' => 'domain',
'value' => 'mycompany.com'
],
[
'type' => 'domain',
'value' => 'subsidiary.com'
]
],
'types' => [
'domain'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.aws53.cloud/v1/data/suppression-rules"
payload := strings.NewReader("{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.put("https://api.aws53.cloud/v1/data/suppression-rules")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aws53.cloud/v1/data/suppression-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rules\": [\n {\n \"type\": \"domain\",\n \"value\": \"mycompany.com\"\n },\n {\n \"type\": \"domain\",\n \"value\": \"subsidiary.com\"\n }\n ],\n \"types\": [\n \"domain\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"added": 123,
"removed": 123,
"duplicates": 123,
"rejectedCount": 123,
"rejected": [
{
"index": 123,
"type": "<string>",
"value": "<string>",
"reason": "<string>"
}
],
"total": 123
}
}Authorizations
Organization API key (sk_...). Get yours from Settings > API Keys in the dashboard.
Body
25000Show child attributes
Show child attributes
Restrict the replace to these rule types. Rules of other types are left alone, and submitting a rule whose type is not listed is an error.
1 - 4 elementsemail, domain, company_domain, industry Response
List replaced
Show child attributes
Show child attributes
Was this page helpful?