Transactional email from your own domain, sent by our own mail stack in the EU. DKIM, SPF and DMARC under your control.
POST /v1/emailsBearer token + JSON. Same shape on staging and production — no SDK lock-in, no hidden middleware.
# send an email, get a message_id back -X POST "https://api.postfly.app/v1/emails" \ -H "Authorization: Bearer pf_live_…" \ -H "Content-Type: application/json" \ -d '{ "from": "noreply@yourdomain.com", "to": "user@example.com", "subject": "Welcome", "html": "<p>Thanks for signing up.</p>", "tag": "welcome" }' # 202 Accepted # { "id": "m_8h2qf09sx", "status": "queued", "createdAt": "..." }
Transactional email from your own domain, sent by our own mail stack in the EU. DKIM, SPF and DMARC under your control.
Postfix + opendkim + opendmarc + rspamd. No black box — every header you see is signed and logged by us.
Sign outbound mail with d=yourdomain.com. The visible From: aligns with the cryptographic identity — no shared signing domain.
Mail servers, database and queue run in the EU.
Every event (sent, delivered, bounced, complained) fires a webhook. Failed deliveries are retried with exponential backoff.
Apps that only speak SMTP send over port 587 with STARTTLS; the API key is the password.
A cron re-verifies SPF/DKIM/DMARC about once a day. If something drifts we email you once — no spam, alert resets on recovery.
Paste DNS records from the dashboard. We verify SPF, DKIM and DMARC and surface what is missing.
Scoped to the domains you added, and rotatable without a redeploy. Test keys carry a "pf_test_" prefix.
JSON in, JSON out. The response carries an id to query the state or match webhook events.