A spam complaint is recorded when a user clicks This is Spam or Mark as Spam from email clients like Yahoo, Hotmail, AOL, etc... from their inbox. While you should not have any spam complaints, they do happen. Once a spam complaint is recorded, Postmark will deactivate this address and will not let you reactivate it.
In the email industry, spam complaints are a clear metric to determine abuse and poor sending practices. It’s important that we take these reports seriously to ensure the best delivery for all customers. If you feel a spam complaint has a reason for being reactivated, please contact Postmark support directly.
In your Postmark account — select a Server, Message Stream, and navigate to the Webhooks settings tab. Add a new webhook with your URL and toggle the Spam Complaint type. You can also use the API.
Using the API
Set Triggers.SpamComplaint.Enabled to true to enable this event type when you create or edit webhooks. Whichever method you choose, verify everything works as expected before real events start flowing.
An example of the full JSON document that would be POSTed to your webhook URL is to the right. A brief description of some of the more interesting fields is below:
{
"RecordType": "SpamComplaint",
"MessageStream": "outbound",
"ID": 692560174,
"Type": "SpamComplaint",
"TypeCode": 100001,
"Name": "Spam complaint",
"Tag": "welcome-email",
"MessageID": "883953f4-6105-42a2-a16a-77a8eac79483",
"Metadata": {
"PropA": "some value",
"PropB": "some value"
},
"ServerID": 23,
"Description": "The subscriber explicitly marked this message as spam.",
"Details": "Test spam complaint details",
"Email": "margareth@nasa.com",
"From": "alanturing@computers.com",
"BouncedAt": "2026-11-05T16:33:54.9070259Z",
"DumpAvailable": true,
"Inactive": true,
"CanActivate": false,
"Subject": "Saying Hello!",
"Content": "<Abuse report dump>"
}
If you’re developing on your local machine or don’t have a public URL for your API, the cURL request example below sends a test webhook to your service. Replace <your-webhook-url>, run the command, and verify it accepts and processes the event as expected.
curl <your-webhook-url> \
-X POST \
-H "Content-Type: application/json" \
-d '{
"RecordType": "SpamComplaint",
"MessageStream": "outbound",
"ID": 692560174,
"Type": "SpamComplaint",
"TypeCode": 100001,
"Name": "Spam complaint",
"Tag": "welcome-email",
"MessageID": "883953f4-6105-42a2-a16a-77a8eac79483",
"Metadata": {
"PropA": "some value",
"PropB": "some value"
},
"ServerID": 23,
"Description": "The subscriber explicitly marked this message as spam.",
"Details": "Test spam complaint details",
"Email": "margareth@nasa.com",
"From": "alanturing@computers.com",
"BouncedAt": "2026-11-05T16:33:54.9070259Z",
"DumpAvailable": true,
"Inactive": true,
"CanActivate": false,
"Subject": "Saying Hello!",
"Content": "<Abuse report dump>"
}'