Postmark (ActiveCampaign): Guia tecnica completa para el email transaccional
Por CaptainDNS
Publicado el 28 de enero de 2026

- Postmark, especializado en transaccional, adquirido por ActiveCampaign en 2022, apuesta por la entregabilidad excepcional con separacion estricta transaccional/broadcast via Message Streams.
- API REST simple en
api.postmarkapp.comcon headerX-Postmark-Server-Token, 50 destinatarios max por email, 500 mensajes por batch. - DKIM 1024 bits con selector timestamped (
[timestamp]pm._domainkey), rotacion manual trimestral recomendada. - Return-Path custom via CNAME
pm-bounces.captaindns.com→pm.mtasv.netpara alineacion SPF DMARC relaxed unicamente (no strict). - IP dedicada a 50$/mes a partir de 300K emails/mes, warm-up automatico en 3-6 semanas.
- Planes desde 15$/mes para 10K emails (Basic), plan Free Developer limitado a 100 emails/mes.
Introduccion
Postmark se ha forjado una reputacion de excelencia en el email transaccional, con una filosofia clara: la entregabilidad ante todo. Adquirido por ActiveCampaign en mayo de 2022, el servicio sigue siendo un producto autonomo, conservando su equipo y su ADN tecnico. La plataforma procesa miles de millones de emails con un enfoque exclusivo en lo transaccional (confirmaciones de pedido, restablecimientos de contrasena, notificaciones).
La particularidad de Postmark reside en su separacion estricta entre transaccional y broadcast via los Message Streams. Esta arquitectura garantiza que tus emails criticos nunca se vean impactados por campanas de marketing. El pool de IP compartido es monitoreado activamente para mantener una reputacion impecable.
Esta guia esta dirigida a desarrolladores, DevOps y arquitectos de sistemas que buscan integrar Postmark con una comprension completa de la infraestructura: configuracion DNS, eleccion API vs SMTP, gestion de IP, webhooks y limites tecnicos.
API REST vs SMTP Relay: arquitectura y eleccion de integracion
Postmark ofrece dos metodos de integracion, cada uno adaptado a casos de uso especificos.

Comparativo tecnico
| Criterio | API REST | SMTP Relay |
|---|---|---|
| Endpoint | POST https://api.postmarkapp.com/email | smtp.postmarkapp.com puertos 587/2525 |
| Autenticacion | Header X-Postmark-Server-Token | Username: API key / Password: API key |
| Destinatarios/email | 50 max (To + Cc + Bcc) | 50 max |
| Batch | 500 mensajes/llamada, 50 MB max | 1 email por conexion |
| Tamano max | 10 MB por email | 10 MB por email |
| Templates | Mustachio (similar a Handlebars) | Contenido inline unicamente |
| Scheduling | No soportado nativamente | No soportado nativamente |
| Tracking | Via parametros JSON | Via headers X-PM-* |
| Caso de uso ideal | Apps modernas, batch, templates | Legacy, CMS, servidores mail existentes |
Cuando elegir la API REST?
La API REST es el metodo recomendado para cualquier nueva integracion. Ofrece un control preciso sobre cada aspecto del envio.
Endpoint principal: POST https://api.postmarkapp.com/email
Headers requeridos:
Content-Type: application/json
Accept: application/json
X-Postmark-Server-Token: tu-server-token
Ejemplo de envio completo:
curl "https://api.postmarkapp.com/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: tu-server-token" \
-d '{
"From": "notifications@captaindns.com",
"To": "cliente@captaindns.com",
"Subject": "Tu analisis DNS esta listo",
"TextBody": "Hola, tu reporte DNS esta disponible.",
"HtmlBody": "<html><body><strong>Hola</strong>, tu reporte DNS esta disponible.</body></html>",
"Tag": "dns-report",
"TrackOpens": true,
"TrackLinks": "HtmlAndText",
"MessageStream": "outbound",
"Metadata": {
"report_id": "RPT-12345",
"user_id": "USR-789"
}
}'
Respuesta esperada (200 OK):
{
"To": "cliente@captaindns.com",
"SubmittedAt": "2026-01-28T10:30:00.1234567-05:00",
"MessageID": "b7bc2f4a-e38e-4336-af7d-e6c392c2f817",
"ErrorCode": 0,
"Message": "OK"
}
Limites clave:
- Rate limit: no publicado explicitamente, monitoreo interno
- Destinatarios: 50 max por email (To + Cc + Bcc)
- Batch: 500 mensajes por llamada, 50 MB total
- Tamano email: 10 MB max
SDKs oficiales: Ruby, .NET, Java, PHP, Node.js. No hay SDK Python oficial (usar postmarker o python-postmark).
Cuando elegir el SMTP Relay?
El SMTP Relay es ideal para sistemas legacy o aplicaciones que solo soportan SMTP.
Configuracion oficial:
# Transaccional
SMTP server: smtp.postmarkapp.com
Port: 587 (recomendado) o 2525 (fallback)
# Broadcast
SMTP server: smtp-broadcasts.postmarkapp.com
Port: 587 o 2525
# Autenticacion
Username: tu-server-api-token
Password: tu-server-api-token
Puertos disponibles:
| Puerto | Soporte | Notas |
|---|---|---|
| 25 | Si | SMTP estandar |
| 465 | No | Implicit TLS no soportado |
| 587 | Si | Recomendado - puerto submission |
| 2525 | Si | Puerto alternativo |
Metodos de autenticacion: CRAM-MD5 (recomendado), DIGEST-MD5, PLAIN, LOGIN.
Headers propietarios X-PM-*:
| Header | Uso | Ejemplo |
|---|---|---|
X-PM-Tag | Categorizacion | X-PM-Tag: password-reset |
X-PM-Message-Stream | Especificar el stream | X-PM-Message-Stream: outbound |
X-PM-Metadata-* | Metadatos custom | X-PM-Metadata-user-id: 12345 |
X-PM-TrackOpens | Tracking de apertura | X-PM-TrackOpens: true |
X-PM-TrackLinks | Tracking de enlaces | X-PM-TrackLinks: HtmlAndText |
Domain Authentication: DKIM, Return-Path y alineacion DMARC
La autenticacion de dominio en Postmark se basa en DKIM y un Return-Path personalizable. La configuracion se realiza en Sender Signatures o Domain Authentication.

Configuracion DKIM
Postmark genera una clave DKIM de 1024 bits con un selector unico basado en un timestamp.
Formato del selector: [timestamp]pm._domainkey.captaindns.com
Ejemplos de selectores:
20260128pm._domainkey.captaindns.comjan2026pm._domainkey.captaindns.com
Registro DNS a crear:
Type: TXT
Hostname: 20260128pm._domainkey.captaindns.com
Value: k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO...
Caracteristicas:
- Tamano de clave: 1024 bits (no 2048)
- Rotacion: manual, trimestral recomendada
- API rotacion:
POST /domains/{domainid}/rotatedkim
La rotacion utiliza el sistema de dos selectores: Postmark prepara el nuevo selector antes de cambiar, garantizando una transicion sin interrupcion.
SPF: requerido o no?
SPF ya no es requerido para Postmark. Aqui esta el por que:
Por defecto, Postmark usa su propio dominio para el Return-Path:
Return-Path: <pm_bounces@pm.mtasv.net>
Los servidores receptores verifican SPF contra el dominio Return-Path (pm.mtasv.net), no contra tu dominio From (captaindns.com). Tus emails pasan automaticamente SPF sin modificacion DNS de tu lado.
Include opcional (si quieres ser explicito):
v=spf1 a mx include:spf.mtasv.net ~all
Return-Path custom y alineacion DMARC
Para obtener la alineacion SPF DMARC, debes configurar un Return-Path personalizado.
Registro DNS requerido:
Type: CNAME
Hostname: pm-bounces.captaindns.com
Value: pm.mtasv.net
Despues de la configuracion:
Return-Path: <pm_bounces@pm-bounces.captaindns.com>
Impacto en la alineacion DMARC:
| Configuracion | SPF Pass | Alineacion DMARC |
|---|---|---|
| Return-Path por defecto | Si (dominio Postmark) | No - Falla |
| Return-Path custom | Si (subdominio cliente) | Si - Relaxed unicamente |
Punto critico: la alineacion strict (aspf=s) no es posible con Postmark porque el Return-Path siempre usa un subdominio (pm-bounces.captaindns.com ≠ captaindns.com).
Estrategia recomendada: apoyarse en DKIM para la alineacion DMARC, que soporta el modo strict (adkim=s).
Tabla resumen DNS completa
| Registro | Tipo | Hostname | Valor | Obligatorio |
|---|---|---|---|---|
| DKIM | TXT | [timestamp]pm._domainkey.captaindns.com | k=rsa; p=[clave-publica] | Si - Recomendado |
| Return-Path | CNAME | pm-bounces.captaindns.com | pm.mtasv.net | Para alineacion DMARC |
| Link Tracking | CNAME | [custom].captaindns.com | [valor-postmark] | Opcional |
| SPF | TXT | captaindns.com | v=spf1 include:spf.mtasv.net ~all | No - No requerido |
Message Streams: transaccional vs broadcast
Postmark impone una separacion estricta entre emails transaccionales y broadcast via los Message Streams. Esta arquitectura protege la reputacion de tus emails criticos.
Arquitectura de los streams
| Aspecto | Transaccional | Broadcast |
|---|---|---|
| Uso | Emails disparados por usuario | Emails bulk (newsletters) |
| SMTP host | smtp.postmarkapp.com | smtp-broadcasts.postmarkapp.com |
| Enlace unsubscribe | Opcional | Requerido |
| Infraestructura | Pool IP dedicado | Pool IP separado |
| Stream por defecto | outbound | broadcast |
Enlace unsubscribe obligatorio (Broadcast)
Para los streams Broadcast, el enlace de desuscripcion es obligatorio:
<a href="{{{ pm:unsubscribe }}}">Darse de baja</a>
Gestion de desuscripciones:
UnsubscribeHandlingType: "Postmark": gestionado automaticamenteUnsubscribeHandlingType: "None": a gestionar manualmente
Limites de los Message Streams
| Recurso | Limite |
|---|---|
| Streams por Server | 10 max (contactar soporte para mas) |
| Inbound Streams por Server | 1 unicamente |
| Nombre de stream | 100 caracteres max |
| Streams archivados | Eliminados despues de 45 dias |
IP compartida vs IP dedicada
Pool IP compartido (todos los planes)
Por defecto, todos los clientes Postmark usan un pool de IP compartido de alta reputacion.
Filosofia Postmark: "Un pool IP de alta calidad y alta reputacion ofrece una entregabilidad mejor y mas confiable" para la mayoria de los remitentes.
Caracteristicas:
- Pool monitoreado activamente
- Alertas de blacklist automaticas
- No requiere warm-up
- Adaptado para la mayoria de los volumenes
IP dedicada
Para grandes volumenes, Postmark ofrece IP dedicadas.
| Criterio | Valor |
|---|---|
| Volumen minimo | 300 000 emails/mes |
| Costo | 50$/IP/mes (sin cargo de setup) |
| IP adicional | 100 000+ mensajes/dia requeridos |
| Warm-up | Automatico, 3-6 semanas |
| Overflow | Enrutado via pool compartido durante warm-up |
Warm-up automatico:
- Limites diarios definidos por Postmark
- Ajuste segun la respuesta de los receptores
- Volumen excedente enviado via pool compartido
- Monitoreo continuo por el equipo Postmark
Re-warmup requerido: si el volumen baja de 20 000 mensajes/semana durante 4 semanas consecutivas.
Reverse DNS: gestionado por Postmark (no personalizable por el cliente).
Precios 2026
Planes y precios
| Plan | Precio/mes (10K) | Overage /1000 | Servers | Domains | Streams | IP dedicada |
|---|---|---|---|---|---|---|
| Free Developer | 0$ | N/A | 10 | 10 | 30 | No |
| Basic | 15$ | 1,80$ | 5 | 5 | 15 | No |
| Pro | 16,50$ | 1,30$ | 10 | 10 | 30 | Si (300K+) |
| Platform | 18$ | 1,20$ | Ilimitado | Ilimitado | Ilimitado | Si (300K+) |
Limites del plan Free Developer:
- 100 emails/mes (limite estricto)
- No hay overage posible
- Ideal para pruebas y desarrollo
Escalamiento por volumen
| Volumen mensual | Tarifa aproximada |
|---|---|
| 10 000 | 15-18$/mes |
| 50 000 | 50-60$/mes |
| 125 000 | ~100$/mes |
| 300 000 | ~200$/mes |
| 700 000 | ~400$/mes |
| 5 000 000+ | Precios personalizados |
Add-ons opcionales
| Add-on | Precio |
|---|---|
| IP dedicada | 50$/mes/IP |
| Custom Activity Retention | Desde 5$/mes |
| DMARC Digests | Desde 14$/mes/dominio |
Reglas de conteo
- Cada mensaje enviado = 1 email
- Cada direccion Cc/Bcc = 1 email adicional
- Mensajes sandbox = contabilizados
- Emails no utilizados = no se transfieren
Webhooks y eventos
Postmark ofrece un sistema de webhooks completo para seguir el ciclo de vida de tus emails.

Eventos disponibles
| Evento | Descripcion |
|---|---|
| Delivery | Email entregado al servidor receptor |
| Bounce | Email rebotado (hard, soft, transient) |
| Open | Destinatario abrio el email |
| Click | Destinatario hizo clic en un enlace |
| SpamComplaint | Email marcado como spam |
| SubscriptionChange | Alta/baja de la lista Suppression |
| Inbound | Email inbound recibido y parseado |
Ejemplo de payload Bounce
{
"RecordType": "Bounce",
"ID": 692560173,
"Type": "HardBounce",
"TypeCode": 1,
"Name": "Hard bounce",
"Tag": "dns-report",
"MessageID": "2c1b63fe-43f2-4db5-91b0-8bdfa44a9316",
"ServerID": 23,
"MessageStream": "outbound",
"Description": "The server was unable to deliver your message",
"Email": "invalido@captaindns.com",
"From": "notifications@captaindns.com",
"BouncedAt": "2026-01-28T16:09:19Z",
"Inactive": true,
"CanActivate": true
}
Politica de retry
| Tipo webhook | Politica retry |
|---|---|
| Bounce, Inbound | 1 min → 5 min → 10 min (x3) → 15 min → 30 min → 1h → 2h → 6h = 10 retries en ~10,5h |
| Click, Open, Delivery | 1 min → 5 min → 15 min = 3 retries |
Importante: una respuesta HTTP 403 detiene inmediatamente los retries.
Seguridad: firma HMAC-SHA256
Cada webhook esta firmado con el header X-Postmark-Signature.
Verificacion (Node.js):
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const computedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('base64');
return crypto.timingSafeEqual(
Buffer.from(computedSignature),
Buffer.from(signature)
);
}
Configuracion via API
curl "https://api.postmarkapp.com/webhooks" \
-X POST \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: tu-server-token" \
-d '{
"Url": "https://captaindns.com/webhooks/postmark",
"MessageStream": "outbound",
"Triggers": {
"Delivery": { "Enabled": true },
"Bounce": { "Enabled": true, "IncludeContent": false },
"SpamComplaint": { "Enabled": true },
"Open": { "Enabled": true, "PostFirstOpenOnly": true },
"Click": { "Enabled": true }
}
}'
Limites tecnicos y cuotas
Tamano de los mensajes
| Limite | Valor |
|---|---|
| Tamano max email (API) | 10 MB total |
| Tamano max batch (Batch API) | 50 MB total |
| TextBody / HtmlBody | 5 MB cada uno |
| Almacenamiento mensaje | 1 MB (truncado mas alla) |
Cuotas API
| Recurso | Limite |
|---|---|
| Destinatarios por email | 50 max (To + Cc + Bcc) |
| Mensajes por batch | 500 max |
| URLs webhook por stream | 10 max |
| Tamano Tag | 1 000 caracteres |
| Busqueda bounces/mensajes | 10 000 resultados max |
Retencion de datos
| Tipo | Duracion |
|---|---|
| Retencion por defecto | 45 dias |
| Retencion minima | 7 dias |
| Retencion maxima | 365 dias (add-on) |
| Bounce dumps | 30 dias max |
| Estadisticas agregadas | Indefinidamente |
| Lista supresiones | Indefinidamente |
Templates con Mustachio
Postmark utiliza Mustachio, un lenguaje de templating basado en Mustache con mejoras especificas.
Sintaxis basica
<!-- Variable con escape HTML -->
{{ nombre }}
<!-- Variable sin escape (raw) -->
{{{ html_content }}}
<!-- Notacion punto -->
{{ pedido.numero }}
Condiciones (bloques truthy/falsy)
{{#has_discount}}
<p>Tu descuento: {{ discount_amount }}</p>
{{/has_discount}}
{{^has_discount}}
<p>Ningun descuento aplicado</p>
{{/has_discount}}
Bucles
{{#each items}}
<li>{{ name }} - {{ price }} $</li>
{{/each}}
Limites:
- No hay sintaxis if/else explicita
- Logica compleja no soportada
- Tags
<link>prohibidos en<head> - CSS automaticamente inlineado al enviar
Seguridad y cumplimiento
Certificaciones
| Certificacion | Detalle |
|---|---|
| SOC 2 Type 2 | No - certificaciones a nivel data center (AWS, Deft) |
| ISO 27017/27018 | Via AWS |
| PCI DSS Level 1 | Via Stripe (pagos) |
RGPD
| Aspecto | Detalle |
|---|---|
| DPA disponible | Si - con SCCs |
| URL DPA | https://postmarkapp.com/dpa |
| Localizacion datos | US (sin opcion EU) |
| Representante EU | EU-REP.Global |
HIPAA
| Aspecto | Detalle |
|---|---|
| Cumple HIPAA | NO |
| BAA disponible | NO |
Postmark declara explicitamente: "Postmark is not HIPAA-compliant so we do not recommend using our platform if you need to send HIPAA-compliant emails".
Autenticacion de cuenta
| Funcionalidad | Disponibilidad |
|---|---|
| 2FA | Si - Todos los planes |
| SSO/SAML | No - No disponible |
Plan de accion: integrar Postmark paso a paso
- Crear una cuenta en https://account.postmarkapp.com/sign_up
- Solicitar la aprobacion via "Request approval" (~24h de revision manual)
- Verificar tu dominio (Sender Signature individual o dominio completo)
- Configurar los registros DNS:
- DKIM: TXT
[timestamp]pm._domainkey.captaindns.com - Return-Path: CNAME
pm-bounces.captaindns.com→pm.mtasv.net
- DKIM: TXT
- Crear un Server API Token en Settings → API Tokens
- Probar con el token test: usar
POSTMARK_API_TESTcomo token para validar sin enviar - Configurar los webhooks para bounces y spam complaints
- Monitorear via el Activity Feed y las estadisticas
Guias tecnicas: otras plataformas de email transaccional
Descubre nuestras guias completas para otras soluciones de email transaccional:
- SendGrid: autenticacion de dominio y Web API v3 - DKIM 2048 bits con rotacion, IP dedicada desde 50k/mes
- Mailgun: DKIM con rotacion automatica - Return-Path nativo, rotacion DKIM 120 dias
- Amazon SES: Easy DKIM y Custom MAIL FROM - $0.10/1000 emails, 7 regiones EU
- Mailjet: API v3.1 y configuracion DKIM - DKIM 2048/4096 bits, adquisicion Sinch
- Mandrill: integracion Mailchimp transaccional - Requisito Mailchimp Standard, bloques de 25k emails
- Brevo: configuracion DKIM y SPF - 300 emails/dia gratis, DKIM TXT o CNAME
FAQ
Es Postmark adecuado para email marketing?
No, Postmark esta especializado en email transaccional. Los emails broadcast (newsletters, anuncios) son soportados via Message Streams separados, pero la plataforma no ofrece funcionalidades de marketing avanzadas (segmentacion, A/B testing, automatizacion). Para marketing, considera soluciones dedicadas o la plataforma madre ActiveCampaign.
Cual es la diferencia entre Postmark y SendGrid?
Postmark se concentra exclusivamente en la entregabilidad transaccional con un pool IP muy controlado. SendGrid ofrece mas flexibilidad (DKIM 2048 bits, rate limits publicados, mas SDKs) pero con un posicionamiento mas generalista. Postmark usa claves DKIM de 1024 bits y no publica sus rate limits explicitamente.
Se puede usar Postmark con una politica DMARC estricta?
Si, via DKIM. La alineacion DKIM soporta el modo strict (adkim=s). En cambio, la alineacion SPF solo funciona en modo relaxed (aspf=r) porque el Return-Path usa un subdominio. Configura tu politica DMARC para apoyarse en DKIM: p=reject; adkim=s; aspf=r.
Cuanto cuesta una IP dedicada en Postmark?
50$/mes por IP, sin cargo de setup. Condicion: enviar al menos 300 000 emails/mes. El warm-up es automatico en 3-6 semanas. Para una IP adicional, hay que superar 100 000 mensajes/dia.
Hay un SDK Python oficial para Postmark?
No, Postmark no mantiene un SDK Python oficial. Las alternativas comunitarias recomendadas son postmarker y python-postmark. Los SDKs oficiales cubren Ruby, .NET, Java, PHP y Node.js.
Es Postmark conforme a HIPAA?
No. Postmark rechaza explicitamente firmar BAAs (Business Associate Agreements). Si necesitas enviar PHI (Protected Health Information), usa otra solucion conforme a HIPAA.
Glosario
- Message Stream: flujo de envio separado que permite aislar los emails transaccionales de los broadcasts, cada uno con su propio pool de IP y sus metricas
- Sender Signature: verificacion de una direccion email remitente individual, alternativa a la verificacion de dominio completo
- Return-Path: direccion de rebote (Envelope From) usada por los servidores receptores para SPF y las notificaciones de bounce
- Mustachio: lenguaje de templating de Postmark basado en Mustache, con soporte de condiciones, bucles y variables


