Sending
Connect Postmark
Postmark is the fastest transactional email provider for delivery-critical messages. One server token, and you are sending.
Overview
Postmark separates transactional and broadcast streams at the server level. Every Postmark server has a message stream— transactional streams get priority delivery infrastructure; broadcast streams are for newsletters and marketing. Nudgel defaults to the server's default transactional stream, but you can point it at any stream you've created.
Get your credentials
- Log in to account.postmarkapp.com
- Go to Servers and select the server you want to use (or create a new one)
- Click API Tokens in the server's left nav
- Copy the Server API token — it starts with a long hex string
- Decide on a from address: it must use a verified sender signature or a verified domain
SENDER SIGNATURES
Add the provider in Nudgel
- Go to Settings → Providers
- Click Add a provider
- Pick Postmark
- Fill in the fields:
| Field | Required | Notes |
|---|---|---|
from_email | Yes | The verified from address, e.g. noreply@mail.acme.co.ke |
from_name | Yes | Display name, e.g. Acme Payments |
message_stream | No | Defaults to outbound (the server's default transactional stream). Set to a broadcast stream ID for newsletters. |
server_token | Yes | From Postmark → Server → API Tokens. Encrypted before it leaves the form. |
ENCRYPTED ON SUBMIT
Test the connection
After saving, send a test message from the Nudgel dashboard (Compose → Email) or via the API. Use your own email as the recipient so you can confirm delivery.
curl -X POST https://api-raven-cloud.autotribes.app/v1/messages \
-H "X-Raven-Key: rk_live_a3f7b2c1_..." \
-H "Content-Type: application/json" \
-d '{
"channel": "email",
"to": "you@example.com",
"from": "noreply@mail.acme.co.ke",
"subject": "Nudgel test — Postmark",
"bodyHtml": "<p>If you can read this, Postmark is wired up.</p>",
"bodyText": "If you can read this, Postmark is wired up."
}'Check your Postmark server's activity log — you should see the message appear within seconds.
Set up webhooks
Postmark can POST delivery events back to Nudgel so your message timeline updates automatically (delivered, bounced, spam complaint, unsubscribed). Configure this in Postmark under Server → Message Streams → [your stream] → Webhooks.
Point each event type at:
https://api-raven-cloud.autotribes.app/v1/webhooks/email/postmark/{YOUR_TENANT_ID}Enable at minimum: Delivery, Bounce, Spam Complaint. Hard bounces and spam complaints are automatically added to your suppression list. See the webhooks guide for full details.
Verify your sending domain at Postmark
To send from your own domain (e.g. mail.example.co.ke) through Postmark, publish DKIM records Postmark generates for you. Nudgel orchestrates this from one dashboard.
- In Nudgel dashboard, go to
Settings → Sending domains → Add domain, enter your domain. - On the next screen, select Postmark. Nudgel calls Postmark's domain registration API using your credentials and shows you the DNS records to publish.
- Publish the records at your DNS host (Cloudflare, Route 53, etc.).
- Nudgel polls every 30 seconds for the first 10 minutes, then hourly. Verification surfaces in the dashboard automatically.
Add this to your SPF record
include:spf.mtasv.net to your existing SPF record (or create a new v=spf1 include:spf.mtasv.net -allif you don't have one).Postmark-specific notes
- Verification typically completes within minutes once the DKIM TXT record propagates.
- Postmark also generates a Return-Path CNAME for bounce processing — publish both the DKIM TXT and the Return-Path CNAME for full deliverability.
Full setup walkthrough: Sending domains setup
Troubleshooting
| Symptom | Most likely cause |
|---|---|
failed — "Sender signature not found" | The from address is not verified in Postmark. Add it under Sender Signatures. |
failed — "Invalid API token" | Server token is wrong. Regenerate in Postmark → Server → API Tokens and update the provider. |
failed — "Message stream not found" | The message_stream ID you set does not exist in this Postmark server. Leave blank to use the default. |
Message stuck at queued | Worker is not running. Check Redis connectivity. |
| Emails land in spam | Verify your sending domain (DKIM + SPF). See sending domains. |