# Webhook Events — PostFrame — EternalEngine

Get real-time notifications for email delivery, bounces, opens, clicks, and complaints. PostFrame webhooks integrate with any system.

[Back to PostFrame](https://eternalengineos.io/features/postframe/)Integrations

# Real-time webhook events

Subscribe an endpoint to any of ten events — delivered, opened, clicked, bounced, complained, unsubscribed, queued, sent, deferred, failed — and get a signed JSON payload with five retries behind it.

[Start free](https://app.eternalengineos.io/signup?plan=free&interval=annual)[PostFrame overview](https://eternalengineos.io/features/postframe/)

Webhook Payload — email.opened

`{
 "event": "email.opened",
 "timestamp": 1772116200,
"data": {
"email_id": "9b2c…",
"message_id": "msg_abc123",
"to": ["sara@globaltech.io"],
"subject": "Q1 Proposal Ready",
"status": "opened",
"tags": ["proposal"],
"user_agent": "Mozilla/5.0 … AppleWebKit",
"ip": "203.0.113.42"
}
}`

## Supported event types

Subscribe to the events you care about — these six, plus email.queued, email.sent, email.deferred and email.failed. Every payload carries the email's ID, message ID, recipients, subject, status and tags.

[email.delivered Email accepted by recipient server](https://eternalengineos.io/features/postframe/webhooks/email-delivered/)[email.opened Recipient opened the email](https://eternalengineos.io/features/postframe/webhooks/email-opened/)[email.clicked Recipient clicked a tracked link](https://eternalengineos.io/features/postframe/webhooks/email-clicked/)[email.bounced Hard or soft bounce detected](https://eternalengineos.io/features/postframe/webhooks/email-bounced/)[email.complained Marked as spam by recipient](https://eternalengineos.io/features/postframe/webhooks/email-complained/)[email.unsubscribed Recipient opted out via unsubscribe](https://eternalengineos.io/features/postframe/webhooks/email-unsubscribed/)

## Built for reliability

Signed payloads, five retries with exponential backoff, a delivery log per endpoint, and a test button and secret rotation from the dashboard.

Exponential backoff retries

Failed deliveries retry five times — 10, 20, 40, 80 and 160 seconds apart — each attempt logged with its HTTP status

HMAC signature verification

X-PostFrame-Signature: v1=… is an HMAC-SHA256 of "timestamp.body" with the endpoint's secret, which you can rotate any time

Delivery logs

Every attempt for every endpoint, with the event type, HTTP status, timing and attempt number — and a Test action to fire a sample event

Webhook Delivery Log

email.delivered200 OK45ms

email.opened200 OK38ms

email.clicked500 ERRretry in 10s

email.clicked (retry 1)200 OK52ms

Questions

## Webhooks, answered

How do I verify a webhook came from PostFrame?

Read the X-PostFrame-Signature header (v1=) and recompute HMAC-SHA256 over "." with the endpoint's signing secret. Compare in constant time. The dashboard shows ready-made Node and Python snippets.

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 HTTP status and timing, in the endpoint's delivery log.

Which events can I subscribe to?

Any of ten: queued, sent, delivered, opened, clicked, bounced, complained, failed, deferred and unsubscribed. Pick them per endpoint, and change the list later without recreating it.

Do test emails fire webhooks?

No. Emails sent in test mode — for example with a pf_test_ API key — never dispatch webhooks. Use the endpoint's Test action to send a sample event instead.

## 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

MonthlyAnnual — Save 20%

### Starter

$9$7/mosave $22/yr

Get started with transactional email.

- 5,000 emails / month
- 1 sending domain
- SPF, DKIM & DMARC verification
- Open & click tracking
- 7-day data retention
- Ticket support

[Choose Starter](https://app.eternalengineos.io/signup?addon=postframe&tier=0)

MOST POPULAR

### Growth

$24$19/mosave $58/yr

For growing teams and products.

- 10,000 emails / month
- 3 sending domains
- SPF, DKIM & DMARC verification
- Open & click tracking
- Webhooks & API access
- 14-day data retention
- Ticket support

[Choose Growth](https://app.eternalengineos.io/signup?addon=postframe&tier=1)

### Pro

$69$55/mosave $166/yr

For high-volume senders.

- 50,000 emails / month
- Unlimited sending domains
- SPF, DKIM & DMARC verification
- Open & click tracking
- Webhooks & API access
- 30-day data retention
- Dedicated IP add-on
- Priority support

[Choose Pro](https://app.eternalengineos.io/signup?addon=postframe&tier=2)

### Enterprise

$149$119/mosave $358/yr

For organizations at scale.

- 200,000 emails / month
- Unlimited sending domains
- SPF, DKIM & DMARC verification
- Open & click tracking
- Webhooks & API access
- 90-day data retention
- 1 dedicated IP included
- Custom SLA
- Priority support

[Choose Enterprise](https://app.eternalengineos.io/signup?addon=postframe&tier=3)

**PostFrame is billed separately, on top of any EternalEngine plan.**Every base tier ([Team](https://app.eternalengineos.io/signup?plan=starter&interval=annual), [Pro](https://app.eternalengineos.io/signup?plan=professional&interval=annual), [Business](https://app.eternalengineos.io/signup?plan=business&interval=annual)) ships with PostFrame at sensible defaults. The add-on tiers above buy higher email volume, longer retention, and dedicated IPs.

Prices shown do not include applicable tax.
