Webhooks d'application
En mode webhook (applyMode = 'webhook'), un import terminé est livré à votre backend sous forme
de POST HTTP — signé en HMAC, relancé durablement et enregistré dans un journal d’audit de
livraison.
La requête
Section intitulée « La requête »POST /your/apply-endpointx-import-event: import.appliedx-import-delivery-id: dlv_4f2…x-import-timestamp: 1717000000x-import-signature: t=…,v1=hmac_sha256(body)…content-type: application/json{ "event": "import.applied", "recordId": "rec_…", "action": "submit", "rowCount": 128, "mapping": { "Email": "person.email", "First name": "person.firstName" },}Vérifier la signature
Section intitulée « Vérifier la signature »Calculez un HMAC-SHA256 sur le corps brut de la requête avec votre secret de livraison, et
comparez-le en temps constant à la valeur v1 de x-import-signature. La valeur t= est
l’horodatage signé — rejetez les livraisons dont l’horodatage est trop ancien pour atténuer les
attaques par rejeu.
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(rawBody: string, header: string, secret: string): boolean { const parts = Object.fromEntries(header.split(',').map(kv => kv.split('='))); const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex'); const got = Buffer.from(parts.v1 ?? '', 'hex'); const exp = Buffer.from(expected, 'hex'); return got.length === exp.length && timingSafeEqual(got, exp);}Relances et idempotence
Section intitulée « Relances et idempotence »Les livraisons sont relancées avec backoff jusqu’à ce que votre endpoint renvoie 2xx. Utilisez
x-import-delivery-id (ou recordId) pour dédupliquer — le même import peut être livré plus
d’une fois.