Webhooks
Faites appeler votre propre endpoint HTTPS par Nudge à l'arrivée d'un lead, et vérifiez que chaque appel vient bien de Nudge.
Fonctionnement
Un webhook est une URL à vous que Nudge appelle en POST quand quelque chose se produit dans votre espace. Servez-vous-en pour pousser les nouveaux leads vers Zapier, Make, n8n, votre CRM ou votre backend, sans interroger Nudge en boucle.
- Un webhook = une URL + les événements écoutés + un secret de signature optionnel.
- Vous pouvez créer plusieurs webhooks, chacun avec ses événements.
- Chaque livraison est un corps JSON avec le nom de l'événement, un horodatage et les données. Voir la référence des événements.
Événements livrés aujourd'hui
Nudge livre actuellement l'événement lead_created. Les autres événements proposés dans le formulaire peuvent être cochés mais ne sont pas encore envoyés. Détails dans Événements.
Créer un webhook
Il vous faut la permission Manage API keys & webhooks (api.manage) pour créer, modifier ou supprimer un webhook, et l'accès à la page Intégrations (integrations.manage) pour atteindre le panneau.
Ouvrez le panneau des webhooks
Allez dans Intégrations et ouvrez la carte Zapier. Son panneau contient vos webhooks ; il fonctionne pour tout outil qui accepte un webhook, pas seulement Zapier.
Ajoutez l'endpoint
Cliquez sur Ajouter un webhook et renseignez :
- URL du endpoint : l'adresse
https://complète qui recevra les appels. - Événements : cochez au moins un événement, par exemple Lead created.
- Secret de signature (optionnel) : une longue chaîne aléatoire. Avec lui, chaque livraison est signée en HMAC-SHA256 et vous pouvez vérifier qu'elle vient de Nudge. Nous vous recommandons vivement d'en définir un.
Cliquez sur Créer.
Copiez le secret
Si vous avez défini un secret, Nudge l'affiche une seule fois dans un encadré Copiez votre secret de signature maintenant. Il ne réapparaît jamais : le webhook n'affiche plus ensuite qu'un badge Signé. Rangez-le dans les secrets de votre récepteur.
Chaque webhook de la liste a un interrupteur pour le mettre en pause ou le réactiver, une icône en forme d'œil qui ouvre ses Journaux de livraison, et un bouton de suppression.
Vous pouvez aussi gérer les webhooks depuis un assistant IA avec les outils MCP integrations__create_webhook, integrations__update_webhook, integrations__delete_webhook, integrations__list_webhooks et integrations__list_webhook_logs (voir la référence des outils MCP).
Exigences sur l'URL
À l'enregistrement, Nudge refuse toute URL qui :
- n'utilise pas
https://; - pointe vers
localhost, un nom en.localou.localhost, un hôte sans point, ou une adresse privée, de boucle locale ou link-local (par exemple10.x.x.x,192.168.x.x,169.254.x.x,::1).
À la livraison, Nudge ne suit pas les redirections : un endpoint qui répond 301 ou 302 échoue. Indiquez l'URL finale.
À quoi ressemble une livraison
POST /hooks/nudge HTTP/1.1
Host: example.com
Content-Type: application/json
User-Agent: Nudge-Webhook/1.0
X-Nudge-Signature: sha256=5d41402abc4b2a76b9719d911017c592...
{"event":"lead_created","timestamp":"2026-11-02T09:14:07.512Z","data":{"id":"6f0c…","email":"jane@example.com","lead_score":72,"form_id":"a1b2…"},"organization_id":"9e8d…"}| En-tête | Valeur |
|---|---|
Content-Type | application/json |
User-Agent | Nudge-Webhook/1.0 |
X-Nudge-Signature | sha256= suivi du HMAC-SHA256 hexadécimal du corps brut. Présent seulement si le webhook a un secret de signature. |
Vérifier la signature
Calculez un HMAC-SHA256 du corps brut de la requête, tel que reçu, avec votre secret de signature comme clé. Encodez-le en hexadécimal, préfixez-le par sha256= et comparez-le à X-Nudge-Signature avec une comparaison en temps constant. Rejetez la requête s'ils diffèrent.
Hachez toujours les octets bruts. Si votre framework analyse d'abord le JSON et que vous le resérialisez, les espaces ou l'ordre des clés peuvent changer et la signature ne correspondra plus.
import crypto from 'node:crypto'
import express from 'express'
const app = express()
const SECRET = process.env.NUDGE_WEBHOOK_SECRET
// Gardez le corps brut : la signature est calculée dessus.
app.post('/hooks/nudge', express.raw({ type: 'application/json' }), (req, res) => {
const received = req.get('X-Nudge-Signature') || ''
const expected = 'sha256=' + crypto.createHmac('sha256', SECRET).update(req.body).digest('hex')
const ok = received.length === expected.length
&& crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected))
if (!ok) return res.status(401).send('Invalid signature')
const { event, data } = JSON.parse(req.body.toString('utf8'))
if (event === 'lead_created') {
// Confiez le travail à une file et répondez vite.
console.log('New lead', data.email, data.lead_score)
}
res.sendStatus(200)
})
app.listen(3000)Le payload porte un timestamp. Pour limiter les rejeux, vous pouvez aussi rejeter les livraisons trop anciennes et ignorer un identifiant de lead déjà traité.
Livraison, délais et nouvelles tentatives
- Nudge envoie chaque événement une seule fois, juste après qu'il s'est produit, à chaque webhook actif abonné.
- Votre endpoint a 10 secondes pour répondre. Au-delà, la livraison est abandonnée.
- Dans les journaux de livraison, un statut
2xxapparaît comme un succès. Les autres statuts, les délais dépassés et les erreurs de connexion apparaissent comme des échecs. - Il n'y a pas de nouvelle tentative automatique. Une livraison échouée n'est pas renvoyée. Si vous ne pouvez pas vous permettre de perdre un lead, répondez vite (mettez le travail en file, puis renvoyez
200) et faites un rattrapage depuis Nudge quand votre endpoint a été indisponible, par exemple avec l'outil MCPcontacts__list_contacts. - Les livraisons d'un même événement vers plusieurs webhooks ne sont pas ordonnées, et un webhook lent ne retarde pas les autres.
- Les leads de test (aperçu et mode test) ne sont jamais livrés.
Journaux de livraison
Cliquez sur l'icône en forme d'œil d'un webhook pour ouvrir ses Journaux de livraison : les 20 dernières tentatives, chacune avec l'événement, l'heure et le statut HTTP renvoyé par votre endpoint (ou Erreur s'il n'a pas pu être joint). Les journaux sont supprimés avec le webhook.