# email.bounced — Webhooks — PostFrame — EternalEngine

Triggered when an email cannot be delivered — includes bounce classification, the SMTP error code, and the diagnostic message from the receiving server.

[Back to Webhooks](https://eternalengineos.io/features/postframe/webhooks/)

Webhook Event

# email.bounced

Fires when the receiving server refuses the message. The payload names the bounce as hard, soft or undetermined, carries the provider's sub-type and diagnostic code, and the address is suppressed when the rule says so.

[Start free](https://app.eternalengineos.io/signup?plan=free&interval=annual)[All webhook events](https://eternalengineos.io/features/postframe/webhooks/)

## Bounce Classification

Hard vs soft classification

Hard bounces are permanent failures, soft bounces are temporary — PostFrame classifies both automatically

SMTP diagnostics

Full SMTP error code and diagnostic string from the receiving server included in the payload

Suppression by rule

A hard bounce suppresses the address at once; a soft bounce suppresses after three in seven days

Sub-type from the provider

The provider's bounce sub-type travels with the event for programmatic handling

Payload Fields

bounce_type

hard, soft or undetermined

bounce_sub_type

The provider's sub-type, e.g. General, NoEmail, MailboxFull

diagnostic_code

The receiving server's diagnostic text, when the provider passes it on

provider

Which provider reported it. Every event also carries data.email_id, message_id, from, to, subject, status, tags and created_at

## Keep exploring PostFrame

[### Bounce detection Hard and soft bounces, and the three-in-seven rule. Open Bounce detection →](https://eternalengineos.io/features/postframe/tracking/bounce-detection/)[### email.complained Fires on a spam complaint. Open email.complained →](https://eternalengineos.io/features/postframe/webhooks/email-complained/)[### email.delivered Fires when the receiving server accepts the message. Open email.delivered →](https://eternalengineos.io/features/postframe/webhooks/email-delivered/)

Questions

## Common questions, straight answers.

What is in the email.bounced payload?

The common fields — email_id, message_id, from, to, subject, status, tags, created_at — plus bounce_type (hard, soft or undetermined), bounce_sub_type, diagnostic_code and the provider name.

How do I verify the webhook came from PostFrame?

Every delivery carries an X-PostFrame-Signature header of the form v1=. It is an HMAC-SHA256 of "." using the endpoint's signing secret, which you can rotate from the dashboard at any time.

What happens if my endpoint is down?

PostFrame retries five times with exponential backoff — 10, 20, 40, 80 and 160 seconds — and records every attempt, with the HTTP status and timing, in the endpoint's delivery log.

Can I try the endpoint before real traffic arrives?

Yes. Each webhook endpoint has a Test action that sends a sample event to your URL. Emails sent in test mode never dispatch webhooks, so your integration tests do not fire production hooks.

## Run your business from one place.

Five plans, seventeen launch apps, one dashboard. Set up in under 5 minutes — change tiers any time.

[Start free$0 forever &bull; No card &bull; Upgrade any time](https://app.eternalengineos.io/signup?plan=free&interval=annual)[Talk to Sales](https://eternalengineos.io/contact/)

From $0 · Basic $9.95/mo · Save 20% on annual billing · Upgrade or downgrade any time
