Transactional email
Transactional email that arrives in seconds
The emails your users are waiting for — sign-in links, password resets, receipts — sent from European infrastructure with one API call, signed with your own domain.
- 3,000 emails a month free
- No credit card
- Hosted in Finland
- REST, SMTP and MCP
One request to send
POST JSON with a Bearer key, or use the TypeScript, Python or Go SDK. Anything that only speaks SMTP can use the relay with the same key.
Safe to retry
Pass an idempotency key and a retried request returns the original email instead of sending it twice. Transient delivery failures are retried with backoff for up to three days.
Know what happened
Delivered, bounced, opened, clicked and complained events arrive as signed webhooks, and every message has its own event history in the API and the dashboard.
What you can send
- Sign-in and security
- Magic links, one-time codes, password resets and new-device alerts — short messages that have to land in seconds.
- Receipts and invoices
- Order confirmations, payment receipts and invoices with PDF attachments, sent from the moment the payment succeeds.
- Account lifecycle
- Welcome emails, email verification, trial reminders and plan changes, rendered from a template with per-user variables.
- Notifications
- Comment replies, mentions, failed-job alerts and weekly digests — triggered by your app, one recipient at a time.
Send a password reset
import { PostStack } from '@poststack.dev/sdk';
const poststack = new PostStack(process.env.POSTSTACK_API_KEY);
await poststack.emails.send({
from: 'Acme <security@acme.com>',
to: [user.email],
subject: 'Reset your password',
html: `<a href="${resetUrl}">Choose a new password</a>`,
// Retrying with the same key returns this email, not a second one.
idempotency_key: `reset-${resetToken.id}`,
});Set it up in three steps
- 1
Verify your domain
Add the SPF and DKIM records PostStack shows you. Most DNS providers take a few minutes.
- 2
Create an API key
Start with an
sk_test_key: requests are checked and webhooks fire, but nothing reaches a mail server. - 3
Send from your code
Swap in an
sk_live_key when you are ready. The request is the same.
What you’ll use
In the docs
Frequently asked questions
What is a transactional email?
An email your application sends to one person because of something they did or something that happened to their account: a password reset, a receipt, a sign-in link. Unlike a newsletter, the recipient expects it, and it usually needs no unsubscribe link.
How fast are transactional emails delivered?
The API accepts the message and queues it, and delivery to the receiving server is dispatched within seconds. If the receiver defers it (greylisting, a full mailbox), PostStack retries with backoff for up to three days and tells you through the email.delivery_delayed and email.bounced events.
Do I need SMTP or the API?
Either. The REST API gives you idempotency keys, tags and typed SDKs. SMTP is for software that already sends mail and only needs a host, a port and a password — the same API key is the password.
Where is my email processed?
In a Hetzner data centre in Helsinki, Finland, operated by a Danish company. Sending, queuing, logs and backups stay in the EU.
How much does it cost?
3,000 emails a month free, no credit card. Paid plans start at €5 a month for 10,000 emails, one flat price per tier.
More use cases
Send your first email today
3,000 emails a month free, forever. No credit card, and about five minutes from sign-up to the first message in your inbox.