API v1.0

SendPigeon Documentation

Everything you need to send transactional emails. SDKs for Node.js, Python, Go, PHP and REST API.

Suppressions

Manage bounced and complained email addresses.

How It Works

When an email bounces or receives a complaint, the address is automatically added to your suppression list. Future sends to that address are skipped.

ReasonCause
hard_bouncePermanent delivery failure (invalid address)
complaintRecipient marked email as spam

List Suppressions

cURLbash
curl https://api.sendpigeon.dev/v1/suppressions \
-H "Authorization: Bearer sp_live_xxx"
Responsejson
{
"data": [
{
"email": "bounced@example.com",
"reason": "hard_bounce",
"createdAt": "2025-01-15T10:00:00Z",
"sourceEmailId": "em_abc123"
},
{
"email": "complained@example.com",
"reason": "complaint",
"createdAt": "2025-01-14T09:00:00Z",
"sourceEmailId": "em_def456"
}
],
"hasMore": false
}

SDK Usage

TypeScripttypescript
// List suppressions
const { data } = await pigeon.suppressions.list();
console.log(data); // [{ email, reason, createdAt, sourceEmailId }]
 
// With pagination
const { data: page2 } = await pigeon.suppressions.list({
cursor: data.cursor,
limit: 50
});

Remove Suppression

If an address was suppressed incorrectly, you can remove it:

cURLbash
curl -X DELETE "https://api.sendpigeon.dev/v1/suppressions/bounced@example.com" \
-H "Authorization: Bearer sp_live_xxx"
TypeScripttypescript
// SDK
await pigeon.suppressions.delete("bounced@example.com");

Suppressed Response

When you send to a suppressed address, the API returns success but indicates the email was skipped:

Responsejson
{
"id": "em_abc123",
"status": "sent",
"suppressed": ["bounced@example.com"]
}

Best practice: Check the suppressed array in responses. If addresses are frequently suppressed, clean your mailing list.