Skip to content

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

typescript
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. 1

    Verify your domain

    Add the SPF and DKIM records PostStack shows you. Most DNS providers take a few minutes.

  2. 2

    Create an API key

    Start with an sk_test_ key: requests are checked and webhooks fire, but nothing reaches a mail server.

  3. 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.