skills/sales-postmark/SKILL.md
Postmark platform help — transactional email delivery via REST API (`POST /email`, `POST /email/batch`), SMTP relay, Message Streams (transactional vs broadcast isolation), Handlebars Templates with layout inheritance, Inbound Email parsing, Webhooks (bounce, delivery, open, click, spam complaint, subscription change, inbound), DMARC Monitoring, Bounce Management (Rebound), Suppressions, Statistics, Bulk API, Sender Signatures, and domain authentication. Use when transactional emails aren't arriving, Postmark bounce rates are climbing, unsure how to separate transactional from broadcast streams, templates aren't rendering correctly, inbound email parsing is broken, webhooks aren't firing, or DMARC reports show authentication failures. Do NOT use for general email marketing strategy (use /sales-email-marketing), cross-platform email deliverability (use /sales-deliverability), email open/click tracking strategy (use /sales-email-tracking), or SendGrid-specific questions (use /sales-sendgrid).
npx skillsauth add sales-skills/sales sales-postmarkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Help the user with Postmark (ActiveCampaign) platform questions — from transactional email via the REST API and SMTP relay through Message Streams, Handlebars Templates, Inbound Email, Webhooks, DMARC Monitoring, Bounce Management, Suppressions, Statistics, and integrations. Postmark is laser-focused on transactional email with best-in-class deliverability (98.7% inbox placement), originally built by Wildbit (Natalie & Chris Nagele) and acquired by ActiveCampaign in 2022.
If references/learnings.md exists, read it first for accumulated knowledge.
Ask the user:
What area of Postmark do you need help with?
POST /email, POST /email/batch), SDKsWhat's your role?
What are you trying to accomplish? (describe your specific goal or question)
If the user's request already provides most of this context, skip directly to the relevant step. Lead with your best-effort answer using reasonable assumptions (stated explicitly), then ask only the most critical 1-2 clarifying questions at the end — don't gate your response behind gathering complete context.
Note: If the user needs a specialized skill, route them there with a brief explanation of why that skill is a better fit.
If the request maps to a specialized skill, route:
/sales-email-marketing/sales-deliverability/sales-email-tracking/sales-sendgrid/sales-integration/sales-funnelOtherwise, answer directly from platform knowledge using the reference below.
Read references/platform-guide.md for detailed module documentation, pricing, integrations, and data model.
You no longer need the platform guide details — focus on the user's specific situation.
Based on the user's specific question:
Sending transactional email via the API:
npm install postmark for Node.js)const client = new postmark.ServerClient("YOUR_SERVER_TOKEN")From, To, Subject, HtmlBody/TextBody (or use TemplateId + TemplateModel)ErrorCode: 0 (success) or specific error codesPOSTMARK_API_TEST as the server token during development to test without sending real emailSetting up Message Streams for transactional and broadcast:
"MessageStream": "your-broadcast-stream-id" to route to the broadcast streamSetting up Handlebars templates with layout inheritance:
{{{@content}}} placeholder where content templates will be injectedLayoutTemplate field{{variable}}, {{#if condition}}, {{#each items}}POST /templates/{id}/validate) with sample dataProcessing inbound email:
10 inbound.postmarkapp.comSetting up DMARC monitoring:
v=DMARC1; p=none; rua=mailto:[email protected]p=none -> p=quarantine -> p=reject as you confirm all legitimate senders are authenticatedBest-effort from research — verify details against current Postmark documentation.
dmarc.postmarkapp.com with its own authentication tokens and endpoints. Do not try to use your Postmark server or account token for DMARC API calls — they are different systems with different credentials, even though both are Postmark products.https://user:pass@host/hook), IP allowlisting to Postmark's published ranges, and HTTPS. Retries fire on any non-200 response (Bounce/Inbound back off up to 6 hours; Open/Click/Delivery/Subscription Change retry at 1/5/15 min), and a 403 response stops all retries — so make handlers idempotent on MessageID.references/learnings.md with today's date./sales-email-marketing — Email marketing strategy and best practices (platform-agnostic)/sales-deliverability — Cross-platform email deliverability — SPF/DKIM/DMARC, warmup, inbox placement/sales-email-tracking — Email open and click tracking strategy/sales-sendgrid — SendGrid platform help — if you need SendGrid-specific guidance instead/sales-integration — Connect Postmark to other tools via Zapier, Make, or API/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-doUser says: "I need to send order confirmation and shipping notification emails from my Rails app using Postmark." Skill does:
smtp.postmarkapp.com, port 587, token as username and password)postmark-rails gem for native API integration instead of SMTP for better error handling{{order_number}}, {{items}}) and one for shipping notification (with {{tracking_url}})User says: "We're sending both password resets and a weekly newsletter through Postmark. Our newsletter unsubscribes are hurting our transactional delivery." Skill does:
"MessageStream": "newsletter" in API callsUser says: "We want customers to reply to support emails and have those replies automatically create or update tickets in our system." Skill does:
support.company.com) pointing to inbound.postmarkapp.com*@support.company.com)Symptom: API calls return error code 406 "You tried to send to a recipient that has been marked as inactive" for addresses that should be valid
Cause: The recipient previously hard-bounced or filed a spam complaint, and Postmark automatically added them to the suppression list for that message stream. Postmark blocks further sends to protect your sender reputation.
Solution: Check the suppression list for the relevant message stream via the API (GET /message-streams/{stream}/suppressions/dump) or in the UI under Suppressions. If the underlying issue has been resolved (e.g., the recipient's mailbox was full but is now fixed), reactivate the address by deleting the suppression (POST /message-streams/{stream}/suppressions/delete with the email address in the body). For hard bounces, verify the address is valid before reactivating — sending to an address that bounces again will re-suppress it.
Symptom: Your webhook endpoint processes the same event multiple times, causing duplicate records or actions in your system
Cause: Postmark retries webhook delivery if your endpoint does not return a 2xx status code within the timeout window, or if there is a network interruption during delivery. The retry fires the same event payload again.
Solution: Make your webhook handler idempotent — use the MessageID field in the webhook payload as a deduplication key. Before processing, check if you have already handled an event for that MessageID and event type. Store processed event IDs in a cache or database. Ensure your endpoint returns a 200 status code quickly (within a few seconds) — move heavy processing to a background queue. If you are seeing excessive retries, check your endpoint's response time and error rate.
Symptom: Sent emails show literal {{variable_name}} text instead of the rendered values
Cause: The template model data is not being passed correctly in the API call, or the variable names in the template do not match the keys in the TemplateModel object. Another common cause is using POST /email (raw send) instead of POST /email/withTemplate (template send).
Solution: Verify you are using the template send endpoint (POST /email/withTemplate) and passing TemplateId (or TemplateAlias) plus TemplateModel with the correct variable names. Variable names are case-sensitive — {{OrderNumber}} requires "OrderNumber" in the model, not "orderNumber". Use the template validation endpoint (POST /templates/{id}/validate) to test rendering with sample data before sending. Check the Postmark Activity log for the rendered message to see what was actually sent versus what you expected.
tools
Wizlogo (wizlogo.com) platform help — a budget online logo maker (template/style-variation, marketed as "AI") plus a hub of FREE branding tools (business-name, blog-name and slogan generators, business-card maker, invoice generator, color converter, domain search). The pricing traps: the FREE logo is PERSONAL-USE-ONLY; the two cheap paid tiers are RASTER PNG/JPG only — Single (~€39.99 one-time) and Unlimited (~€3.99 per WEEK, recurring) — and VECTOR (SVG/PDF/EPS) is gated to the ~€299.99 Enterprise tier, which also bundles human designer edits and a social kit. Transparent PNG is on all paid plans. Use when making a Wizlogo logo, understanding free-vs-paid or personal-vs-commercial use, which tier unlocks vector/SVG for print, the weekly-subscription billing trap, its free name/slogan generators, or whether it has an API (UI-only — no public API, webhooks, Zapier or MCP). Do NOT use to just generate the business name (use /sales-namelix) or to compare/validate branding tools (use /sales-idea-validation).
tools
VistaPrint platform help (vistaprint.com, a Cimpress company) — the small-business design + print + digital-marketing platform: a free AI Logomaker (4 generations, 60 more after free sign-up) exporting SVG/PNG/PDF at 4000x4000 with no watermark, a free Brand Kit, business cards/flyers/signage/apparel/promo print, and a website builder. THE RIGHTS TRAP: VistaPrint states NO intellectual-property rights transfer on an AI-generated logo — you get usage rights but CANNOT register it for trademark or copyright; only its human designer service transfers full IP. Use when making a VistaPrint logo, asking if you own or can trademark it, running out of AI logo credits, printed colors not matching the screen, bleed/DPI/font file-prep rejections, or asking whether VistaPrint has an API (the consumer site does not — automation runs through the parent Cimpress Open partner-fulfilment API). Do NOT use for Vista Social scheduling (use /sales-vistasocial) or comparing logo tools market-wide (use /sales-idea-validation).
tools
Turbologo (turbologo.com) platform help — a budget AI/DIY logo maker: enter a business name + industry, pick icons and colors, and it proposes logo concepts you refine in an in-browser editor, then pay a one-time fee to download (designing is free, previews are watermarked, downloading is the paywall). Vector SVG/PDF is gated to the mid tier and up; the top tier adds a brand kit (business cards, letterheads, email signatures, social assets). Use when generating a logo in Turbologo, choosing which download tier to buy, vector SVG vs raster PNG, removing the free watermark, the time-limited edit-after-purchase window, pay-to-download pricing questions, whether an AI logo is yours to trademark, or whether Turbologo has an API to bulk-generate logos (it is UI-only — no public API, webhooks, Zapier, or MCP). Do NOT use to generate the business name (use /sales-namelix), compare or validate branding tools across the market (use /sales-idea-validation), or build wider marketing creative (use /sales-canva).
tools
Online Logo Maker (onlinelogomaker.com) platform help — a long-standing free/freemium DIY logo maker: build the mark yourself from icons, shapes, text, and fonts — MANUAL/template-based, NOT enter-a-name-get-AI-concepts. The free pack downloads a LOW-RES 300px PNG with a background; vector SVG, transparent PNG, and 2000px high-res are gated to a one-time lifetime Premium pack (not a subscription). The free tier's commercial-use rights are disputed by reviewers — clean ownership effectively needs Premium, and a shared-icon mark can be non-distinctive. Use for building/editing a logo here, free download vs Premium, vector SVG or transparent PNG, one-time pricing, commercial-use/trademark terms, near-namesake confusion (NOT LogoMaker.com / LogoMakr / Logomakerr.ai), or whether it has an API (UI-only — no API, webhooks, Zapier, MCP). Do NOT use to generate the business name (use /sales-namelix), compare branding tools across the market (use /sales-idea-validation), or build wider creative (use /sales-canva).