Retour à l'accueilDocs

Documentation

Tout ce qu'il faut pour recevoir un email sous forme de requête HTTP signée.

Votre adresse

Chaque compte reçoit une adresse permanente de la forme inbox_ab12cd34ef@tempy.uk. Elle n'est pas modifiable et c'est la seule qui atteigne votre webhook. Transférez-y du courrier depuis n'importe quel fournisseur, ou communiquez-la directement.

inbox_7wgaav5mdb@tempy.uk

Le payload

Un POST HTTPS par email, envoyé en application/json. Le corps contient l'id de l'email, from, to, subject, les corps texte et HTML, tous les en-têtes d'origine et un tableau de pièces jointes. Un en-tête présent une seule fois est une chaîne ; un en-tête répété est un tableau de chaînes, dans l'ordre du message.

Payload
{
  "id": "em_wnrppxfrp5p9wvv1",
  "from": "you@gmail.com",
  "to": "inbox_7wgaav5mdb@tempy.uk",
  "subject": "Your verification code",
  "text": "Your code is 482913",
  "html": "<p>Your code is <b>482913</b></p>",
  "headers": {
    "message-id": "<…@mail.gmail.com>"
  },
  "attachments": [],
  "received_at": "2026-09-03T10:42:11Z"
}

Vérifier la signature

Chaque requête porte un en-tête X-Mailhook-Signature : sha256= suivi du HMAC-SHA256 du corps brut, calculé avec votre secret de signature. Calculez-le sur les octets reçus, avant tout parsing JSON, et comparez en temps constant. Rejetez tout ce qui ne correspond pas.

X-Mailhook-Signature: sha256=8f1c4e9a…

Vérifier la signatureNode.jsPython

Changer de secret

Pendant une rotation, la signature principale reste calculée avec votre secret actuel et le nouveau arrive dans X-Mailhook-Signature-Next. X-Mailhook-Secret-Version indique la version derrière l'en-tête principal. Déployez le nouveau secret, puis activez-le : rien ne casse entre les deux.

X-Mailhook-SignatureX-Mailhook-Signature-NextX-Mailhook-Secret-Version

Relances et délais

Tout 2xx compte comme livré. Un 5xx, un 429 ou une erreur réseau est relancé jusqu'à cinq fois, à environ 30 secondes, 1 minute, 2 minutes et 4 minutes d'intervalle, avec du jitter. Un 4xx autre que 429 est définitif et n'est jamais relancé. Votre endpoint a 30 secondes pour répondre.

5×+30s+1m+2m+4m30s

Pièces jointes

Les fichiers ne sont pas inclus dans le JSON. Chaque pièce jointe porte son nom, son type de contenu, sa taille et une URL signée valable 24 heures à compter de l'arrivée de l'email. Récupérez ce dont vous avez besoin dans cette fenêtre : ensuite le fichier disparaît avec le reste du contenu.

filename · content_type · size · url · expires_at

Limites

Un message peut peser jusqu'à 20 Mo, pièces jointes comprises ; au-delà il est rejeté à la porte pour que l'expéditeur reçoive un refus exploitable. Les requêtes de test et les relances manuelles sont limitées par compte, et une requête de test porte X-Mailhook-Test : true pour que vous puissiez la distinguer.

20 MB · X-Mailhook-Test: true

Idempotence

Une relance renvoie le même corps avec le même id d'email : servez-vous de cet id comme clé de déduplication. Deux POST portant un même id, c'est un seul email, pas deux.

X-Mailhook-Id: em_wnrppxfrp5p9wvv1