Tudo que você precisa para receber um email como uma requisição HTTP assinada.
Seu endereço
Toda conta recebe um endereço permanente no formato inbox_ab12cd34ef@tempy.uk. Ele não pode ser alterado e é o único endereço que chega ao seu webhook. Encaminhe email para ele de qualquer provedor, ou informe o endereço direto.
inbox_7wgaav5mdb@tempy.uk
O payload
Um POST HTTPS por email, enviado como application/json. O corpo traz o id do email, from, to, subject, os corpos texto e HTML, todos os cabeçalhos originais e um array de anexos. Um cabeçalho que aparece uma vez é uma string; um cabeçalho repetido é um array de strings, na ordem em que vieram na mensagem.
Toda requisição traz um cabeçalho X-Mailhook-Signature: sha256= seguido do HMAC-SHA256 do corpo bruto, com o seu segredo de assinatura como chave. Calcule sobre os bytes recebidos, antes de qualquer parse de JSON, e compare em tempo constante. Rejeite tudo que não bater.
Durante uma troca, a assinatura principal continua sendo calculada com o segredo atual e o novo chega em X-Mailhook-Signature-Next. O X-Mailhook-Secret-Version informa a versão por trás do cabeçalho principal. Publique o segredo novo e depois ative — no meio do caminho nada quebra.
Qualquer 2xx conta como entregue. Um 5xx, um 429 ou uma falha de rede é repetido até cinco vezes, com cerca de 30 segundos, 1 minuto, 2 minutos e 4 minutos de intervalo, mais jitter. Um 4xx que não seja 429 é permanente e nunca é repetido. Seu endpoint tem 30 segundos para responder.
5×+30s+1m+2m+4m30s
Anexos
Os arquivos não vão embutidos no JSON. Cada anexo traz nome, tipo de conteúdo, tamanho e uma URL assinada válida por 24 horas a partir da chegada do email. Baixe o que precisar dentro dessa janela — depois o arquivo some junto com o resto do conteúdo.
filename · content_type · size · url · expires_at
Limites
Uma mensagem pode ter até 20 MB com anexos; acima disso ela é recusada na porta, para que o remetente receba um retorno em que possa agir. Requisições de teste e tentativas manuais têm limite por conta, e a requisição de teste traz X-Mailhook-Test: true para você diferenciar.
20 MB · X-Mailhook-Test: true
Idempotência
Uma nova tentativa reenvia o mesmo corpo com o mesmo id de email, então use esse id como chave de deduplicação. Dois POSTs com um mesmo id são o mesmo email, não dois.