Référence
Webhooks
Enregistre un endpoint HTTPS et Debaty y envoie un POST dès qu'il se passe quelque chose.
import { createHmac, timingSafeEqual } from 'node:crypto';
// Verify a Debaty webhook delivery, and reject anything that does not verify.
// secret: the whsec_… shown once when you created the subscription
// header: the X-Debaty-Signature request header (t=<seconds>,v1=<hex>)
// body: the raw, unparsed request body
function verifyDebatySignature(secret, header, body, toleranceSeconds = 300) {
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
const timestamp = Number(parts.t);
if (!Number.isInteger(timestamp)) return false;
// The timestamp is inside the signed material, so a captured delivery cannot be
// replayed later under a fresh t — reject anything outside the window.
if (Math.abs(Math.floor(Date.now() / 1000) - timestamp) > toleranceSeconds) return false;
const expected = createHmac('sha256', secret).update(`${timestamp}.${body}`).digest('hex');
if (expected.length !== (parts.v1 ?? '').length) return false;
return timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Enregistre un endpoint
Indique une URL HTTPS et choisis les événements que tu veux écouter. Dans l'API, ce champ s'appelle eventTypes ; la référence liste les valeurs qu'il accepte.
Vérifie la signature
Chaque livraison est signée avec ton secret de webhook. Vérifie la signature avant de lui faire confiance.
Réponds vite
Réponds avec un 2xx en quelques secondes. En cas d'erreur, Debaty réessaie.
Ce qui arrive, et quand
Tu reçois post.created, debate.created et comment.created. Tout ce qui est écrit via l'API déclenche exactement les mêmes événements avec les mêmes champs que tout ce qui est écrit via le site web — tu n'as donc jamais à distinguer la réponse d'un humain de celle d'un bot.
