PineMail
PricingBusinessDevelopers

PineMail is in beta. Card payment is not open yet, and we raise an account's limits on request. See the limits

Sending API

Transactional email from your own domain, at €0.30 per 1,000.

Receipts, sign-in links, invoices and notices from your app. A project, a verified domain, a key and one POST. Delivery, bounces and spam reports come back as events and signed webhooks.

Set up in minutes

Everything below can be done in the browser or over the API. Nothing needs us.

  1. Create a project

    A project is an app. Its keys, domains, webhooks and send log stay apart from your other projects.

  2. Add your domain

    PineMail shows the DNS records: DKIM, SPF, a MAIL FROM host and DMARC. On Cloudflare, send a token once and the records are published for you. The check runs by itself every two minutes, and you get a notice when the domain is verified. To try first, send right away from your @pinemail.app address.

  3. Make a sending key

    A sending key can only send, and only from the domain and addresses you choose. If it leaks, that is all it can do.

  4. POST /v1/emails

    Bearer token, JSON, an optional Idempotency-Key. 202 means queued. Then watch the send log, or let your app hear each delivery through a webhook.

Sending one email
ts
const res = await fetch("https://pinemail.app/v1/emails", { method: "POST", headers: { Authorization: "Bearer pm_live_...", "Content-Type": "application/json", "Idempotency-Key": "welcome-42", }, body: JSON.stringify({ from: "Acme <hello@example.com>", to: ["ada@example.com"], subject: "Welcome", html: "<p>Hello from your app.</p>", }), }); // 202 { id, status: "queued" }

What it costs

€0.30 per 1,000 recipients and €1 a month for the account, whatever the volume. No plan to pick, no step where the price jumps.

Recipients a monthA month, including VAT
3,000€1.90
20,000€7.00
50,000€16.00
100,000€31.00
500,000€151.00
1,000,000€301.00

A developer with 5 apps on 5 domains, sending 2,000 emails a month between them, pays €1.60 a month.

  • A free account sends to 100 recipients a month through the API, from one domain of your own.
  • Pay as you go has no monthly ceiling: you pay per 1,000 recipients. Sending is held to a pace per minute, and is paused when too much of it bounces or is reported as spam.
  • Domains cost nothing extra: one app per domain, or one domain per customer, up to 50 on pay as you go.
  • Card payment is not open yet, so pay as you go is not sold today. A free account works now, and these are the prices it moves to.

In the price, on every account

There is one price per 1,000 recipients. What else an app needs is not a plan or an add-on.

Up to 50 domains

One domain per app, or one per customer. No extra cost on pay as you go; a free account has one.

Receiving as well

Real mailboxes on the same domains, read in the browser, in Apple Mail or Outlook, or over the API. No fee per mailbox.

Templates, scheduling and batches

Saved templates with variables, sends scheduled up to 30 days ahead, up to 100 emails in one call, and attachments up to 30 MB.

Webhooks without a cap

As many endpoints as you need, signed, and retried for about 17 hours when your app is down. Failed events can be sent again.

A suppression list that keeps itself

A hard bounce or a spam report stops further sends to that address, for the whole project. You can list it, add to it and take addresses off.

An agent can send too

The same API is an MCP server: an AI agent sends, reads the log and checks domains with a key you give it, and nothing more.

What you see

Every email in the log with its outcome, and templates you write once and fill in when you send.

The project's send log: each email with its recipient, sender, subject and status.
The project's send log: each email with its recipient, sender, subject and status.
The project's send log: each email with its recipient, sender, subject and status.
A template with variables, and the preview with the values filled in.
A template with variables, and the preview with the values filled in.
A template with variables, and the preview with the values filled in.

How it gets delivered

No mail service can promise the inbox. What PineMail does is the part that is in our hands.

Through Amazon SES in Stockholm

PineMail queues the message and hands it to Amazon SES, which sends from its own reputation-managed pools. Your app never talks to AWS.

Signed and aligned

Every message is DKIM-signed for your domain, the envelope sender is on a MAIL FROM host of yours so SPF aligns, and PineMail gives you a DMARC record to publish.

You see what happened

Each message shows queued, sent, delivered, bounced or reported as spam, in the send log and as email.delivered, email.bounced and email.complained webhooks.

Limits that protect the sender

Send limits are per account and per month, and a mailbox can get a daily cap of its own. One spammer cannot spend the reputation everyone sends under.

Keys that can only send

A sending key is locked to one domain, and to listed addresses if you want. The key in your app cannot read mail or change your account.

Content stays in Sweden and Finland

Message content is stored on our servers in Finland and Sweden; Amazon SES in Stockholm handles it to send it. The data processing agreement and the list of sub-processors are public.

Everything over the API

What you can do in the browser you can do with a key, from a script or a deploy pipeline.

  • Send one email or up to 100 in a call, now or scheduled, and move or cancel a scheduled one
  • Templates with variables and a version history, written in the browser or over the API, and attachments
  • SMTP for apps that cannot call an API, with a key as the password, and an SDK for JavaScript and TypeScript
  • Domains: add, read the DNS records, verify, and publish the records to Cloudflare
  • Senders and mailboxes on a domain
  • Sending keys locked to a domain or an address, and full project keys; rename and narrow a key without changing it in your app
  • Webhooks with signatures, a test call, the delivery history, and failed events sent again
  • The suppression list, and the send log, message by message

Your first email in a few minutes.

A free account sends from your @pinemail.app address at once, and from your own domain when the records are in place.

Create a free account