Todo lo necesario para recibir un email como una solicitud HTTP firmada.
Tu dirección
Cada cuenta recibe una dirección permanente con la forma inbox_ab12cd34ef@tempy.uk. No se puede cambiar y es la única que llega a tu webhook. Reenvíale correo desde cualquier proveedor, o da la dirección directamente.
inbox_7wgaav5mdb@tempy.uk
El payload
Un POST HTTPS por email, enviado como application/json. El cuerpo lleva el id del email, from, to, subject, los cuerpos de texto y HTML, todas las cabeceras originales y un array de adjuntos. Una cabecera que aparece una vez es una cadena; una cabecera repetida es un array de cadenas, en el orden en que venían en el mensaje.
Cada solicitud lleva una cabecera X-Mailhook-Signature: sha256= seguido del HMAC-SHA256 del cuerpo bruto, con tu secreto de firma como clave. Calcúlalo sobre los bytes que recibiste, antes de parsear el JSON, y compara en tiempo constante. Rechaza todo lo que no coincida.
Mientras dura una rotación, la firma principal se sigue calculando con tu secreto actual y el nuevo llega en X-Mailhook-Signature-Next. X-Mailhook-Secret-Version indica la versión que hay detrás de la cabecera principal. Despliega el secreto nuevo y luego actívalo: entre medias no se rompe nada.
Cualquier 2xx cuenta como entregado. Un 5xx, un 429 o un fallo de red se reintenta hasta cinco veces, con unos 30 segundos, 1 minuto, 2 minutos y 4 minutos de separación más jitter. Un 4xx distinto de 429 es permanente y no se reintenta nunca. Tu endpoint tiene 30 segundos para responder.
5×+30s+1m+2m+4m30s
Adjuntos
Los archivos no van dentro del JSON. Cada adjunto lleva su nombre, tipo de contenido, tamaño y una URL firmada válida durante 24 horas desde que llegó el email. Descarga lo que necesites dentro de esa ventana: después el archivo desaparece con el resto del contenido.
filename · content_type · size · url · expires_at
Límites
Un mensaje puede ocupar hasta 20 MB con los adjuntos incluidos; lo que pase de ahí se rechaza en la puerta para que el remitente reciba un rebote sobre el que pueda actuar. Las solicitudes de prueba y los reintentos manuales tienen límite por cuenta, y una solicitud de prueba lleva X-Mailhook-Test: true para que la distingas.
20 MB · X-Mailhook-Test: true
Idempotencia
Un reintento reenvía el mismo cuerpo con el mismo id de email, así que usa ese id como clave de deduplicación. Dos POST con un mismo id son el mismo email, no dos.