Supressões
A lista de endereços que não recebem mais e-mails do seu time.
A lista de supressão guarda endereços que não devem mais receber e-mails do seu time. Bounces permanentes (bounce) e reclamações de spam (complaint) entram sozinhos; você também pode adicionar endereços (manual). Destinatários suprimidos são removidos do envio e geram o evento email.suppressed. Nos endpoints com {id}, você pode usar o ID ou o próprio endereço de e-mail.
#Listar supressões
GET/suppressions
Aceita limit, after e before. source_id é o e-mail que gerou o bounce ou a reclamação.
cURL
curl https://api.postal.so/suppressions \
-H "Authorization: Bearer $POSTAL_API_KEY"
Node.js
const response = await fetch('https://api.postal.so/suppressions', {
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
},
});
const data = await response.json();
Python
import os
import requests
response = requests.get(
"https://api.postal.so/suppressions",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->get('suppressions', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
]);
$data = json_decode($response->getBody(), true);
{
"object": "list",
"has_more": false,
"data": [
{
"object": "suppression",
"id": "019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b",
"email": "[email protected]",
"origin": "bounce",
"source_id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b",
"created_at": "2026-10-20T09:12:00.000000Z"
}
]
}
#Adicionar um endereço
POST/suppressions
Adiciona o endereço com origem manual. Se ele já estiver na lista, devolve o registro existente com status 200. Dispara suppression.added.
Corpo da requisição
emailstringobrigatórioEndereço de e-mail, até 320 caracteres.
Erros
- 422
validation_errorAlgum campo é inválido. A mensagem diz qual.
cURL
curl -X POST https://api.postal.so/suppressions \
-H "Authorization: Bearer $POSTAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]"
}'
Node.js
const response = await fetch('https://api.postal.so/suppressions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: '[email protected]',
}),
});
const data = await response.json();
Python
import os
import requests
response = requests.post(
"https://api.postal.so/suppressions",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
json={
"email": "[email protected]",
},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->post('suppressions', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
'json' => [
'email' => '[email protected]',
],
]);
$data = json_decode($response->getBody(), true);
{
"object": "suppression",
"id": "019a1c20-8f90-7aa1-8b2c-3d4e5f6a7b8c",
"email": "[email protected]",
"origin": "manual",
"source_id": null,
"created_at": "2026-10-20T09:12:00.000000Z"
}
#Adicionar em lote
POST/suppressions/batch/add
Corpo da requisição
emailsstring[]obrigatórioDe 1 a 100 endereços.
Erros
- 422
validation_errorAlgum campo é inválido. A mensagem diz qual.
cURL
curl -X POST https://api.postal.so/suppressions/batch/add \
-H "Authorization: Bearer $POSTAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"emails": ["[email protected]", "[email protected]"]
}'
Node.js
const response = await fetch('https://api.postal.so/suppressions/batch/add', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
emails: ['[email protected]', '[email protected]'],
}),
});
const data = await response.json();
Python
import os
import requests
response = requests.post(
"https://api.postal.so/suppressions/batch/add",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
json={
"emails": ["[email protected]", "[email protected]"],
},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->post('suppressions/batch/add', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
'json' => [
'emails' => ['[email protected]', '[email protected]'],
],
]);
$data = json_decode($response->getBody(), true);
{
"data": [
{
"object": "suppression",
"id": "019a1c21-0a1b-7c2d-9e3f-4a5b6c7d8e9f"
},
{
"object": "suppression",
"id": "019a1c21-0a1c-7d3e-8f4a-5b6c7d8e9f0a"
}
]
}
#Remover em lote
POST/suppressions/batch/remove
Remove por endereço ou por ID (um dos dois). Itens que não estão na lista são ignorados.
Corpo da requisição
emailsstring[]De 1 a 100 endereços.idsstring[]De 1 a 100 IDs. Use no lugar deemails.
Erros
- 422
validation_errorNenhum dos dois campos, ou os dois juntos.
cURL
curl -X POST https://api.postal.so/suppressions/batch/remove \
-H "Authorization: Bearer $POSTAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"emails": ["[email protected]"]
}'
Node.js
const response = await fetch('https://api.postal.so/suppressions/batch/remove', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
emails: ['[email protected]'],
}),
});
const data = await response.json();
Python
import os
import requests
response = requests.post(
"https://api.postal.so/suppressions/batch/remove",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
json={
"emails": ["[email protected]"],
},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->post('suppressions/batch/remove', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
'json' => [
'emails' => ['[email protected]'],
],
]);
$data = json_decode($response->getBody(), true);
{
"data": [
{
"object": "suppression",
"id": "019a1c21-0a1b-7c2d-9e3f-4a5b6c7d8e9f",
"deleted": true
}
]
}
#Obter uma supressão
GET/suppressions/{id}
Parâmetros de caminho
idstringobrigatórioID ou endereço de e-mail.
Erros
- 404
not_foundO recurso não existe ou é de outro time.
cURL
curl https://api.postal.so/suppressions/[email protected] \
-H "Authorization: Bearer $POSTAL_API_KEY"
Node.js
const response = await fetch('https://api.postal.so/suppressions/[email protected]', {
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
},
});
const data = await response.json();
Python
import os
import requests
response = requests.get(
"https://api.postal.so/suppressions/[email protected]",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->get('suppressions/[email protected]', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
]);
$data = json_decode($response->getBody(), true);
{
"object": "suppression",
"id": "019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b",
"email": "[email protected]",
"origin": "bounce",
"source_id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b",
"created_at": "2026-10-20T09:12:00.000000Z"
}
#Remover um endereço
DELETE/suppressions/{id}
O endereço volta a receber e-mails. Se ele foi suprimido por bounce, confirme antes que o problema foi resolvido. Dispara suppression.removed.
Parâmetros de caminho
idstringobrigatórioID ou endereço de e-mail.
Erros
- 404
not_foundO recurso não existe ou é de outro time.
cURL
curl -X DELETE https://api.postal.so/suppressions/019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b \
-H "Authorization: Bearer $POSTAL_API_KEY"
Node.js
const response = await fetch('https://api.postal.so/suppressions/019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
},
});
const data = await response.json();
Python
import os
import requests
response = requests.delete(
"https://api.postal.so/suppressions/019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b",
headers={"Authorization": f"Bearer {os.environ['POSTAL_API_KEY']}"},
timeout=10,
)
data = response.json()
PHP
$client = new \GuzzleHttp\Client(['base_uri' => 'https://api.postal.so']);
$response = $client->delete('suppressions/019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b', [
'headers' => ['Authorization' => 'Bearer '.getenv('POSTAL_API_KEY')],
]);
$data = json_decode($response->getBody(), true);
{
"object": "suppression",
"id": "019a1530-6d7e-7f80-9a1b-2c3d4e5f6a7b",
"deleted": true
}