AWS SNS · event: Notification ·
content type: text/plain; charset=UTF-8
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into AWS SNS's webhook settings to capture a real delivery. No signup.
content-type: text/plain; charset=UTF-8 user-agent: Amazon Simple Notification Service Agent x-amz-sns-message-type: Notification x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe x-amz-sns-topic-arn: arn:aws:sns:us-east-1:123456789012:orders x-amz-sns-subscription-arn: arn:aws:sns:us-east-1:123456789012:orders:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
{
"Type": "Notification",
"MessageId": "da41e39f-ea4d-435a-b922-c6aae3915ebe",
"TopicArn": "arn:aws:sns:us-east-1:123456789012:orders",
"Subject": "order.created",
"Message": "{\"order_id\":\"ord_8412\",\"total_cents\":2058,\"currency\":\"USD\"}",
"Timestamp": "2026-08-29T07:30:00.000Z",
"SignatureVersion": "1",
"Signature": "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
"SigningCertURL": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
"UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:orders:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}
text/plain —
JSON body-parsers that gate on the header silently drop it (your handler sees an empty
body and returns 200). This is the #1 SNS integration bug.Message is a string containing JSON — you parse the
envelope, then parse Message again. (If you enable "raw message delivery"
you get only the inner payload, and none of these envelope fields.)SubscriptionConfirmation
with a SubscribeURL you must fetch — a capture bin is the zero-code way to
grab it: SNS stuck in
PendingConfirmation.SignatureVersion: "1" means SHA1 — switch the topic to version 2 for
SHA256. Verify by fetching SigningCertURL (check it's a real
sns.*.amazonaws.com URL) — this is X.509, not an HMAC you can test with a
generic tool.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: text/plain; charset=UTF-8' \
-H 'user-agent: Amazon Simple Notification Service Agent' \
-H 'x-amz-sns-message-type: Notification' \
-H 'x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe' \
-H 'x-amz-sns-topic-arn: arn:aws:sns:us-east-1:123456789012:orders' \
-H 'x-amz-sns-subscription-arn: arn:aws:sns:us-east-1:123456789012:orders:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55' \
-d '{
"Type": "Notification",
"MessageId": "da41e39f-ea4d-435a-b922-c6aae3915ebe",
"TopicArn": "arn:aws:sns:us-east-1:123456789012:orders",
"Subject": "order.created",
"Message": "{\"order_id\":\"ord_8412\",\"total_cents\":2058,\"currency\":\"USD\"}",
"Timestamp": "2026-08-29T07:30:00.000Z",
"SignatureVersion": "1",
"Signature": "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
"SigningCertURL": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
"UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:orders:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}'
← All payload examples · Related guide · Signature debugger · Docs