El modelo
Test mode SÍ envía emails realesEl email sale de verdad y llega al inbox del destinatario. Puedes probar deliverability, render visual y comportamiento de los clientes de email igual que en producción. La diferencia está en métricas y routing de webhooks, no en el envío. Por eso, los envíos test también consumen cuota mensual.
Cómo se decide el modo
El modo viaja en la key. No hay parámetromode, ni headers especiales, ni flag por endpoint:
- Live
- Test
webhook_url
→ payload con is_test: false
→ actividad visible en las métricas de producciónWebhook routing
Cada proyecto tiene cuatro URLs configurables (en pares outbound/inbound, una para cada modo):Si la URL _dev está vacía
Fallback a la URL de liveSi tu proyecto no tiene
webhook_url_dev y envías con sk_test_*, los eventos caen a webhook_url. El payload llega con is_test: true para distinguirlos. Si ambas URLs están vacías, el evento no se entrega, pero el email sigue saliendo al inbox real. Ver el detalle en Webhooks.is_test en el payload
Todos los webhooks (outbound e inbound) incluyen is_test: boolean en el body. Si quieres, recibe todo en una sola URL (webhook_url) y filtra lado-cliente, dejando webhook_url_dev vacío:
Caso de uso: setup multi-environment
- Local dev
- Staging
- Production
sk_test_. Los emails que mandes en desarrollo:- Llegan al inbox real (pruebas render, deliverability)
- Quedan marcados con
is_test: true— no mezclan métricas con prod - Webhooks funcionan idéntico (si configuras
webhook_url_devapuntando a un ngrok o servicio de testing)
Tu código no necesita saber el modoEl modo depende solo de qué env var lees. Los call sites a la API son idénticos. El switch vive en las variables de entorno de tu hosting, no en código donde es fácil olvidar un flag.
Casos extremos
Suppression list
Es compartida entre live y test. Si un destinatario se dio de baja por un envío live, los envíos test al mismo recipient también se omiten. En/v1/send-template-email recibes 200 con skipped: true; en /v1/send-email la supresión se aplica en segundo plano y la actividad queda con estado suppressed. Así, los tests de QA no reactivan la entrega a usuarios que ya no quieren tus emails.
Rate limit
Live y test comparten el rate limit y la cuota mensual de tu proyecto. Un spike de tests consume cuota real y afecta tu envío productivo.Regenerar keys
Live y test se regeneran independientemente desde el dashboard: regenerar una no afecta la otra. La key anterior queda invalidada al instante.Próximos pasos
- API Keys — referencia completa con ejemplos de idempotency y dry-run.
- Webhooks — formato de payload y verificación HMAC.
- Quickstart — primer envío end-to-end con
sk_test_*.