Test
Build and test before you pay.
€0
- Test keys, simulator and webhooks
- Real emails to your own verified address
- No card and no time limit
One HTTP request sends your app's password resets, receipts and alerts. Every project sends in isolation, and every event reaches you signed. From €9 a month.
curl -X POST https://api.outstamp.dev/v1/emails \
-H "Authorization: Bearer $OUTSTAMP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: welcome-42" \
-d '{
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Welcome to Acme",
"html": "<p>Your account is ready.</p>"
}'const response = await fetch("https://api.outstamp.dev/v1/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OUTSTAMP_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": `welcome-${user.id}`
},
body: JSON.stringify({
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Welcome to Acme",
html: "<p>Your account is ready.</p>"
})
});
const email = await response.json(); // 202, { id, status: queued }import os, requests
response = requests.post(
"https://api.outstamp.dev/v1/emails",
headers={
"Authorization": f"Bearer {os.environ['OUTSTAMP_API_KEY']}",
"Idempotency-Key": f"welcome-{user.id}",
},
json={
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Welcome to Acme",
"html": "<p>Your account is ready.</p>",
},
)
email = response.json() # 202, { id, status: queued }202 Accepted
{
"id": "em_2n4k8x1q7c5m9r3t6v0w2y4a",
"object": "email",
"environment": "test",
"status": "queued",
"recipient_count": 1
}It comes with its own isolated sending tenant, a test environment and an os_test_ key.
Test key
os_test_a1b2c3d4_••••••••
Copy the DKIM, MAIL FROM and DMARC records. We check them and tell you which one is missing.
| CNAME | DKIM | Verified |
| CNAME | DKIM | Verified |
| CNAME | DKIM | Verified |
| MX | MAIL FROM | Verified |
| TXT | SPF | Verified |
| TXT | DMARC | Recommended |
POST /v1/emails answers 202 with an email id once the email is safely stored.
POST /v1/emails202
em_2n4k8x1q7c5m9r3t6v0w2y4aqueued
Every project starts with them switched on.
Mail sent with a test key never leaves Outstamp. Send to a simulator address and get the exact event you asked for, webhooks included.
| Send to | You get |
|---|---|
| delivered@simulator.outstamp.dev | email.delivered |
| bounce@simulator.outstamp.dev | email.bounced |
| transient@simulator.outstamp.dev | email.delivery_delayed |
| complaint@simulator.outstamp.dev | email.complained |
| suppressed@simulator.outstamp.dev | email.suppressed |
Every event is signed with HMAC-SHA256. A failed delivery is retried 10 times over 48 hours, and any event can be replayed for 30 days.
Outstamp-Id: whd_9r3t6v0w2y4a7c1e8g2j4l5n
Outstamp-Timestamp: 1789041600
Outstamp-Signature: v1=5d41402abc4b2a76b9719d91…
Delivery attempts over 48 hours
Each project sends from its own isolated tenant. If one project's bounce rate climbs, only that project slows down or pauses.
Acme app
Bounce rate 0.4% in 24 hours
Acme staging
Bounce rate 0.1% in 24 hours
Side project
Bounce rate 5.2% in 24 hours
Repeat a request with the same Idempotency-Key and you get the first answer back, not a second email.
One email sent.
Each provider's own public prices, side by side, in their own currency.
| Provider | 10,000/month | 50,000/month | 100,000/month | 500,000/month |
|---|---|---|---|---|
| Outstamp | €9Starter | €25Growth | €39Pro | €179Scale |
| Resend | US$20Pro | US$20Pro | US$35Pro | US$350Scale |
| Mailgun | US$15Basic | US$35Foundation | US$90Scale | Not shown |
| Postmark | US$15Basic | Not shown | Not shown | Not shown |
Sources: resend.com/pricing, mailgun.com/pricing, postmarkapp.com/pricing. "Not shown" means the pricing page does not state a price for that volume in its text.
A monthly plan, plus only the emails above what it includes. Testing is free.
Build and test before you pay.
€0
€9/month
Billed monthly
€25/month
Billed monthly
€39/month
Billed monthly
€179/month
Billed monthly
Your mail is sent from the European Union, from a tenant that belongs to your project alone.
Invoices are issued in Portugal, with your VAT number on them.
Every limit, retry schedule and retention period is published in the public docs, so you can check them before you sign up.
You talk to the person who builds Outstamp: @daminufe on X or df.pt.
Nobody can promise the inbox, and we don't. We set up what depends on us: DKIM, SPF, DMARC and MAIL FROM, checked automatically. And the events tell the truth: delivered means the recipient's server accepted the message.
No. You never run mail servers or build the pipelines that process bounces and complaints. Outstamp runs them for every project.
No. Test keys, the simulator and webhooks are free, and you can send real emails to your own verified address. You add a card when you start sending live.
You are not locked in. The API is plain REST with no SDK to adopt, and your DNS stays yours. Moving to another provider means changing one HTTP call.
We help you with DNS and the move. In return, we ask for an honest testimonial once you are happy.