Todo lo que hay entre tu app y la bandeja de entrada.
Envío, configuración de dominios, eventos, webhooks y las salvaguardas que los rodean, operados por nosotros.
Qué le pasa a un email.
POST /v1/emails con una clave de servidor.202.Envíos que resisten los reintentos.
Solo recibes un id de email después de que el email se haya guardado. Si no se puede guardar, recibes un 503 que puedes reintentar, nunca un id inventado.
- Emails individuales, o lotes de hasta 100 por petición
- Programación con entre 1 minuto y 30 días de antelación, con cancelación y reprogramación
- Hasta 50 destinatarios por email
- Adjuntos de hasta 15 MB cada uno y 40 MB por mensaje en los planes de pago
Idempotency-Keyconservado durante al menos 24 horas
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": "Te damos la bienvenida a Acme",
"html": "<p>Tu cuenta está lista.</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: "Te damos la bienvenida a Acme",
html: "<p>Tu cuenta está lista.</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": "Te damos la bienvenida a Acme",
"html": "<p>Tu cuenta está lista.</p>",
},
)
email = response.json() # 202, { id, status: queued }Dominios, configurados contigo.
Te mostramos los registros exactos, los comprobamos por ti y te decimos qué falta.
- Se requieren tres registros DKIM; MAIL FROM y DMARC son recomendados
- Un dominio solo con DKIM ya puede enviar, marcado como parcialmente verificado
- Comprobaciones automáticas durante 72 horas y, después, revisiones periódicas
- Notas para Cloudflare, Route 53, Namecheap y GoDaddy
| CNAME | DKIM | Verificado |
| CNAME | DKIM | Verificado |
| CNAME | DKIM | Verificado |
| MX | MAIL FROM | Verificado |
| TXT | SPF | Verificado |
| TXT | DMARC | Recomendado |
Eventos sobre los que puedes construir.
El envío, la entrega y las quejas son hechos independientes, así que un evento que llega tarde nunca sobrescribe uno más reciente.
- Firma HMAC-SHA256 sobre el id de la entrega, la marca de tiempo y el cuerpo en bruto
- 10 intentos de entrega durante 48 horas, y reenvío durante 30 días
- Entrega al menos una vez y sin orden, por diseño: deduplica por el id del evento
- Al rotar el secreto, las entregas llevan ambas firmas durante 24 horas
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(request, rawBody, secret) {
const id = request.headers["outstamp-id"];
const timestamp = request.headers["outstamp-timestamp"];
const header = request.headers["outstamp-signature"] ?? "";
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${id}.${timestamp}.${rawBody}`)
.digest("hex");
return header.split(",")
.map((part) => part.trim().replace(/^v1=/, ""))
.some((candidate) => candidate.length === expected.length &&
timingSafeEqual(Buffer.from(candidate, "hex"), Buffer.from(expected, "hex")));
}Tipos de evento a los que te puedes suscribir
- email.accepted
- email.scheduled
- email.queued
- email.sent
- email.delivered
- email.delivery_delayed
- email.bounced
- email.complained
- email.rejected
- email.failed
- email.suppressed
- email.opened
- email.clicked
- email.canceled
- email.submission_unknown
- domain.created
- domain.status_changed
- domain.deleted
- suppression.created
- suppression.deleted
- project.quota_warning
- project.reputation_warning
- project.sending_paused
- project.sending_resumed
Prueba y producción, por separado.
Claves distintas, prefijos distintos y correo de prueba que nunca llega a internet.
- Claves
os_test_yos_live_que distingues de un vistazo - Direcciones del simulador para entrega, rebote, retraso, queja, supresión, rechazo, fallo y respuesta perdida
- Los envíos de prueba producen los mismos eventos y webhooks que los de producción, y nunca se facturan
- Antes de que tu dominio esté listo, emails reales a miembros verificados de tu espacio de trabajo, 10 al día
| Envía a | Recibes |
|---|---|
| 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 |
Salvaguardas, activadas por defecto.
Las comprobaciones que haría un operador de correo cuidadoso, aplicadas a cada proyecto.
- Los rebotes permanentes y las quejas se suprimen automáticamente
- Tasa de rebote: aviso al 3%, acción al 5%. Tasa de quejas: aviso al 0,05%, acción al 0,1%
- Los límites de envío crecen con tu historial de entregas
- Las direcciones suprimidas se comprueban antes de cada envío
- Enviando
App de Acme
Tasa de rebote del 0,4% en 24 horas
- Enviando
Acme staging
Tasa de rebote del 0,1% en 24 horas
- En pausa
Proyecto personal
Tasa de rebote del 5,2% en 24 horas
Un panel para todo el equipo.
Lo que necesitan desarrollo, soporte y finanzas, sin compartir un mismo acceso.
Registro de emails
Encuentra cualquier email y consulta su línea de tiempo completa, sus destinatarios y su contenido mientras la retención lo permita.
Dominios y claves
Estado DNS por registro, y claves limitadas por permiso y por dominio.
Webhooks
Cada intento de entrega con su respuesta, un botón de prueba y reenvío.
Supresiones
Por qué está bloqueada una dirección, y una forma de quitarla con confirmación.
Uso
Emails y destinatarios por día, frente a tu plan y tus límites.
Equipo y seguridad
Roles de propietario, administrador, desarrollador, analista y facturación, con llaves de acceso y apps de autenticación.
Tus datos, por poco tiempo.
Una retención más corta es un ajuste, no un extra de pago.
| Datos | Se conservan | Ajustable a |
|---|---|---|
| Metadatos de entrega y eventos | 30 días | Fijo |
| Direcciones de destinatarios y asunto | 30 días | 0, 1, 7 o 30 días |
| Cuerpos HTML y de texto | 7 días | 0, 1, 7 o 30 días |
| Adjuntos | Hasta la entrega, más hasta 24 h | Se borran justo después del envío |
| Cuerpos de las peticiones a la API | 7 días | Desactivado |
| Eventos e intentos de webhook | 30 días | Fijo |
- Sin entrenamiento de modelos con tus emails, y sin publicidad
- El acceso de soporte al contenido queda auditado, y puedes desactivarlo
- Desactivar el almacenamiento del contenido no cuesta nada
Todavía no disponible.
Para que decidas antes de registrarte, no después.
Plantillas
Envía el HTML y el texto que generas tú. Las plantillas almacenadas aún no están disponibles.
Relay SMTP
Outstamp es una API HTTP. Todavía no hay endpoint SMTP.
SDK oficiales
REST normal con un esquema OpenAPI: funciona con cualquier cliente HTTP.
Envía tu primer email en modo de prueba.
Sin tarjeta y sin DNS. Añade tu dominio cuando estés listo.
- Sin tarjeta para probar
- Precios en euros, sin IVA