Webhooks
Les webhooks sortants informent vos systèmes (CRM, outil d’e-mailing, entrepôt de données) de ce qui se passe dans un workspace.
Configuration
Section intitulée « Configuration »Studio → Paramètres → Webhooks, ou POST /workspaces/{ws}/webhooks : URL HTTPS, événements souhaités, en-têtes
supplémentaires éventuels. Le secret de signature est généré par Remizo ; il peut être renouvelé avec une période de
recouvrement de 24 heures pendant laquelle l’ancien et le nouveau secret sont acceptés.
Événements disponibles
Section intitulée « Événements disponibles »transaction.committed, transaction.cancelled, transaction.refunded, offer.applied, offer.published, offer.suspended,
offer.budget_exhausted, coupon.issued, coupon.rendered, coupon.redeemed, coupon.expired, coupon.cancelled,
points.earned, points.burnt, points.expired, points.adjusted, customer.created, customer.merged,
customer.anonymized, customer.event, segment.computed, sync.run_finished, backup.finished, alert.raised, et ping
pour les tests.
Requête envoyée
Section intitulée « Requête envoyée »POST https://crm.example.com/remizoContent-Type: application/jsonX-Remizo-Event: coupon.issuedX-Remizo-Delivery: 0193a1b2-6c3e-7a10-9f00-5a1e2b3c4d5eX-Remizo-Signature: t=1762681333,v1=5f1c…
{ "id": "…", "type": "coupon.issued", "version": 1, "workspace": "acme", "occurredAt": "2026-11-09T09:42:13.120Z", "source": "remizo-acme-engine-1", "data": { … } }Vérifier la signature
Section intitulée « Vérifier la signature »v1 = HMAC-SHA256 hexadécimal du secret sur la chaîne t + "." + corps brut.
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(secret, header, rawBody, toleranceSeconds = 300) { const parts = Object.fromEntries(header.split(',').map((p) => p.split('='))); if (Math.abs(Date.now() / 1000 - Number(parts.t)) > toleranceSeconds) return false; const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex'); return timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));}Livraison et reprises
Section intitulée « Livraison et reprises »- Réponse attendue : un statut 2xx dans le délai imparti (10 s par défaut).
- Sinon, nouvelles tentatives avec un délai exponentiel ; après la dernière tentative, la livraison passe à l’état
deadet reste consultable (et relançable) dans le studio. - Les livraisons peuvent arriver en double ou dans le désordre : dédupliquez sur
X-Remizo-Delivery/idet utilisezoccurredAtpour l’ordre.