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.
| Reason | Cause |
|---|---|
| hard_bounce | Permanent delivery failure (invalid address) |
| complaint | Recipient 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 suppressionsconst { data } = await pigeon.suppressions.list();console.log(data); // [{ email, reason, createdAt, sourceEmailId }] // With paginationconst { 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
// SDKawait 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.