Back to PostFrame
PostFrameIntegrations

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.

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.

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=<hex>) and recompute HMAC-SHA256 over "<timestamp>.<body>" 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.

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

Starter

$7save $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
MOST POPULAR

Growth

$19save $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

Pro

$55save $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

Enterprise

$119save $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

PostFrame is billed separately, on top of any EternalEngine plan.Every base tier (Team, Pro, Business) 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.