curl --request POST \
--url https://api.sendpost.io/api/v1/subaccount/suppression \
--header 'Content-Type: application/json' \
--header 'X-SubAccount-ApiKey: <api-key>' \
--data '
{
"hardBounce": [
{
"email": "invalid-user@deleted-domain.com"
}
],
"manual": [
{
"email": "contact-support@company.com"
}
],
"unsubscribe": [
{
"email": "opted-out-user@example.com"
}
],
"spamComplaint": [
{
"email": "complained-user@example.com"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/subaccount/suppression"
payload = {
"hardBounce": [{ "email": "invalid-user@deleted-domain.com" }],
"manual": [{ "email": "contact-support@company.com" }],
"unsubscribe": [{ "email": "opted-out-user@example.com" }],
"spamComplaint": [{ "email": "complained-user@example.com" }]
}
headers = {
"X-SubAccount-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-SubAccount-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
hardBounce: [{email: 'invalid-user@deleted-domain.com'}],
manual: [{email: 'contact-support@company.com'}],
unsubscribe: [{email: 'opted-out-user@example.com'}],
spamComplaint: [{email: 'complained-user@example.com'}]
})
};
fetch('https://api.sendpost.io/api/v1/subaccount/suppression', 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.sendpost.io/api/v1/subaccount/suppression",
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([
'hardBounce' => [
[
'email' => 'invalid-user@deleted-domain.com'
]
],
'manual' => [
[
'email' => 'contact-support@company.com'
]
],
'unsubscribe' => [
[
'email' => 'opted-out-user@example.com'
]
],
'spamComplaint' => [
[
'email' => 'complained-user@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-SubAccount-ApiKey: <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.sendpost.io/api/v1/subaccount/suppression"
payload := strings.NewReader("{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-SubAccount-ApiKey", "<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.post("https://api.sendpost.io/api/v1/subaccount/suppression")
.header("X-SubAccount-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/subaccount/suppression")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-SubAccount-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": 37,
"reason": 2,
"email": "jackbarker@hooli.com",
"created": 1567512491588025000
},
{
"id": 39,
"reason": 2,
"email": "bighead@hooli.com",
"created": 1567512491588025000
},
{
"id": 40,
"reason": 0,
"email": "russhannelman@gmail.com",
"created": 1567512491588025000
},
{
"id": 44,
"reason": 1,
"email": "jared@piedpiper.com",
"created": 1567512491588026600
},
{
"id": 57,
"reason": 3,
"email": "gilfoyle@piedpiper.com",
"created": 1567512491588028200
}
]Create Suppressions
Add email addresses to your suppression list to prevent future emails from being sent. This is essential for maintaining sender reputation and compliance.
When to Use Each Type:
| Type | Use When |
|---|---|
hardBounce | You know an address is permanently invalid |
manual | Processing do-not-contact requests from support |
unsubscribe | Syncing unsubscribes from external systems |
spamComplaint | Importing complaints from other providers |
Common Use Cases:
- Migration: Import suppression list from previous email provider
- CRM Sync: Add unsubscribes from your marketing platform
- Bulk Cleanup: Add known invalid addresses from data cleaning
- Support Tickets: Honor do-not-contact requests
Best Practices:
- Import historical bounce data when migrating providers
- Sync unsubscribes immediately when received from external sources
- Process support-requested suppressions within 24 hours
- Use
manualfor addresses you want to suppress without categorization
curl --request POST \
--url https://api.sendpost.io/api/v1/subaccount/suppression \
--header 'Content-Type: application/json' \
--header 'X-SubAccount-ApiKey: <api-key>' \
--data '
{
"hardBounce": [
{
"email": "invalid-user@deleted-domain.com"
}
],
"manual": [
{
"email": "contact-support@company.com"
}
],
"unsubscribe": [
{
"email": "opted-out-user@example.com"
}
],
"spamComplaint": [
{
"email": "complained-user@example.com"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/subaccount/suppression"
payload = {
"hardBounce": [{ "email": "invalid-user@deleted-domain.com" }],
"manual": [{ "email": "contact-support@company.com" }],
"unsubscribe": [{ "email": "opted-out-user@example.com" }],
"spamComplaint": [{ "email": "complained-user@example.com" }]
}
headers = {
"X-SubAccount-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-SubAccount-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
hardBounce: [{email: 'invalid-user@deleted-domain.com'}],
manual: [{email: 'contact-support@company.com'}],
unsubscribe: [{email: 'opted-out-user@example.com'}],
spamComplaint: [{email: 'complained-user@example.com'}]
})
};
fetch('https://api.sendpost.io/api/v1/subaccount/suppression', 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.sendpost.io/api/v1/subaccount/suppression",
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([
'hardBounce' => [
[
'email' => 'invalid-user@deleted-domain.com'
]
],
'manual' => [
[
'email' => 'contact-support@company.com'
]
],
'unsubscribe' => [
[
'email' => 'opted-out-user@example.com'
]
],
'spamComplaint' => [
[
'email' => 'complained-user@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-SubAccount-ApiKey: <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.sendpost.io/api/v1/subaccount/suppression"
payload := strings.NewReader("{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-SubAccount-ApiKey", "<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.post("https://api.sendpost.io/api/v1/subaccount/suppression")
.header("X-SubAccount-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/subaccount/suppression")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-SubAccount-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"hardBounce\": [\n {\n \"email\": \"invalid-user@deleted-domain.com\"\n }\n ],\n \"manual\": [\n {\n \"email\": \"contact-support@company.com\"\n }\n ],\n \"unsubscribe\": [\n {\n \"email\": \"opted-out-user@example.com\"\n }\n ],\n \"spamComplaint\": [\n {\n \"email\": \"complained-user@example.com\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": 37,
"reason": 2,
"email": "jackbarker@hooli.com",
"created": 1567512491588025000
},
{
"id": 39,
"reason": 2,
"email": "bighead@hooli.com",
"created": 1567512491588025000
},
{
"id": 40,
"reason": 0,
"email": "russhannelman@gmail.com",
"created": 1567512491588025000
},
{
"id": 44,
"reason": 1,
"email": "jared@piedpiper.com",
"created": 1567512491588026600
},
{
"id": 57,
"reason": 3,
"email": "gilfoyle@piedpiper.com",
"created": 1567512491588028200
}
]Authorizations
This api key can be used only for sub account level operations
Body
Email addresses with known permanent delivery issues (invalid, non-existent domains).
Show child attributes
Show child attributes
Email addresses to suppress without specific categorization (do-not-contact requests, etc.).
Show child attributes
Show child attributes
Email addresses of users who opted out via external unsubscribe mechanisms.
Show child attributes
Show child attributes
Email addresses that reported spam via external feedback loops.
Show child attributes
Show child attributes
Response
A list of created suppressions
Unique identifier for the suppression record
35
The suppressed email address
"bounced@example.com"
Reason code for the suppression:
0= Manual (added via API or dashboard)1= Unsubscribe (recipient clicked unsubscribe link)2= Hard Bounce (permanent delivery failure)3= Spam Complaint (recipient marked as spam)4= Hard Bounce (detected by post-send validation)
0, 1, 2, 3, 4 2
Human-readable suppression reason
manual, unsubscribe, hardBounce, spamComplaint "hardBounce"
SMTP error message from the receiving server (only for hard bounce suppressions). Useful for diagnosing delivery issues.
"550 5.1.1 The email account that you tried to reach does not exist"
UUID of the message whose bounce/complaint caused this suppression. Empty for manually added suppressions. Useful for tracing the origin.
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
UNIX epoch timestamp in nanoseconds when the suppression was added
1704067200000000000
Was this page helpful?