Webhook di apply
In modalità webhook (applyMode = 'webhook'), un’importazione completata viene consegnata al tuo
backend come POST HTTP — firmata in HMAC, ritentata in modo durevole e registrata in un log
di audit della consegna.
La richiesta
Sezione intitolata “La richiesta”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" },}Verifica la firma
Sezione intitolata “Verifica la firma”Calcola un HMAC-SHA256 sul corpo grezzo della richiesta usando il tuo secret di consegna, e
confrontalo in tempo costante con il valore v1 in x-import-signature. Il valore t= è il
timestamp firmato — rifiuta le consegne il cui timestamp è troppo vecchio per attenuare gli
attacchi replay.
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);}Ritentativi e idempotenza
Sezione intitolata “Ritentativi e idempotenza”Le consegne vengono ritentate con backoff finché il tuo endpoint non restituisce 2xx. Usa
x-import-delivery-id (o recordId) per deduplicare — la stessa importazione può essere
consegnata più di una volta.