29 événements de prospection, signés et relancés.
Chaque événement coché part en POST JSON signé vers votre adresse https : une réponse LinkedIn, un rendez-vous pris, un statut qui change. Si votre serveur ne répond pas par un code 2xx en 10 secondes, la livraison est relancée jusqu’à cinq fois, sur près de trois heures.
- Signature HMAC-SHA256 horodatée
- 5 relances sur près de 3 heures
- Jusqu’à 10 webhooks par compte
Compte gratuit (sans CB) · Webhooks dès Essentiel, 29 € par mois · Déjà client : Paramètres › API
Mis à jour le
Un webhook en place, en quatre gestes.
Un webhook FantomHunt envoie un POST JSON signé à l’adresse https de votre choix, pour chaque événement coché. Il se crée dans Paramètres › API, sans clé API, et il est inclus dès Essentiel, 29 € par mois. La section reste visible, verrouillée, avec un compte gratuit.
Créer le webhook, puis l’essayer
- Dans Paramètres › API, bloc Webhooks, cliquez sur Ajouter un webhook et collez l’adresse de votre serveur, ou celle d’un déclencheur Zapier, Make ou n8n. Elle doit être en https, sur le port 443, et publique.
- Cochez vos événements : « Réponse reçue » et « Rendez-vous pris » le sont d’office. Pour n’en recevoir qu’une partie, réglez Seulement pour.
- Cliquez sur Envoyer un test : votre adresse reçoit
test.ping, signé comme une vraie livraison, et l’écran affiche « Test reçu » avec le code renvoyé par votre serveur. Les champs de la fiche arrivent avec le premier vrai événement. - Cliquez sur Secret sous votre webhook et copiez la valeur (
whsec_…), puis vérifiez la signature de chaque livraison.
Pas de connecteur à installer : Zapier, Make ou n8n reçoivent la livraison comme n’importe quel webhook. Voir la recette pas à pas pour Zapier et ce qui se branche, outil par outil.
{
"evenement": "test.ping",
"cree_le": "2026-09-22T07:58:00.000Z",
"donnees": { "message": "Bonjour de FantomHunt : votre webhook fonctionne." }
}Ce qu’il faut pour recevoir vos événements
- Une offre payanteEssentiel ou Croissance : les webhooks n’ont pas besoin de clé API.
- Essentiel : 29 € par mois, sans engagement
- Jusqu’à 10 webhooks par compte
- Section visible, verrouillée, en Découverte
- L’extension, pour LinkedIn et WhatsAppRéponses, invitations acceptées et messages LinkedIn ou WhatsApp remontent par l’extension, navigateur ouvert.
- Votre session, sans mot de passe à confier
- Les emails, eux, sont lus par nos serveurs
- Les livraisons partent toujours de nos serveurs
Ce que reçoit votre serveur, champ par champ.
L’enveloppe et les en-têtes
Chaque livraison est un objet JSON à trois clés : evenement (le code), cree_le (le moment de l’événement, en UTC) et donnees. Trois en-têtes l’accompagnent : Content-Type: application/json, User-Agent: FantomHunt-Webhooks/1.0 et X-Fantomhunt-Signature. L’ordre des clés n’est pas celui de nos exemples : lisez-les par leur nom.
{
"evenement": "reponse.recue",
"cree_le": "2026-09-30T09:13:58.000Z",
"donnees": {
"canal": "linkedin",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "replied",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T09:13:58.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": null,
"etiquettes": ["Chaud"],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}Content-Type: application/json
User-Agent: FantomHunt-Webhooks/1.0
X-Fantomhunt-Signature: t=1790759640,v1=0a5df15b006908b98c9fcbe714012b372ac71e178ee74a9238b7cac6e0bc7076La fiche d’un prospect LinkedIn
Ce sont les mêmes fiches que l’API, avec deux différences : les étiquettes y sont des noms, et la note n’y figure jamais. La fiche est lue quand la livraison est préparée, au plus une minute après l’événement, puis figée : une relance renvoie la même.
| Champ | Ce que vous recevez |
|---|---|
id | L’identifiant stable de la fiche : gardez-le pour éviter les doublons. |
nom, entreprise, poste, url_linkedin, localisation | La personne et son profil. |
email, telephone | Quand ils ont été trouvés ou débloqués par votre compte ou votre équipe ; sinon null. |
email_score | Un indice de fiabilité de l’email, le plus souvent vide (null). |
statut | Le statut en code (les valeurs sont dans la référence de l’API). |
score | ✦ Le Score IA, de 0 à 100, quand le profil est noté ; sinon null. |
source, recherche_id | D’où vient la fiche. |
offre_id, offre, etiquettes, campagnes | L’offre, vos étiquettes (en noms) et les campagnes en cours. |
cree_le, modifie_le, contacte_le, connecte_le, repondu_le, rdv_le | La date de chaque étape, ou null. |
La fiche d’un contact WhatsApp ou email
Un contact arrive sous contact, avec une fiche courte : id, nom, telephone (WhatsApp) ou email, prospect_id (la fiche LinkedIn liée, ou null), statut, offre, repondu_le, rdv_le, derniere_activite_le, cree_le, etiquettes et campagnes (celles de la fiche LinkedIn liée). Ni entreprise, ni poste, ni Score IA.
{
"evenement": "statut.change",
"cree_le": "2026-09-24T10:12:44.000Z",
"donnees": {
"canal": "whatsapp",
"statut": "rdv",
"statut_precedent": "actif",
"contact": {
"id": "8a1c…",
"nom": "Julie Fontaine",
"telephone": "+33 6 11 22 33 44",
"prospect_id": "5d0e…",
"statut": "rdv",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"repondu_le": "2026-09-23T17:40:00.000Z",
"rdv_le": "2026-09-26T09:00:00.000Z",
"derniere_activite_le": "2026-09-24T10:12:00.000Z",
"cree_le": "2026-09-20T08:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}Le texte des réponses reçues
Cochez Joindre le texte des réponses reçues sur un webhook (décochée par défaut) : reponse.recue porte alors message, avec objet pour un email, texte coupé à 5 000 caractères et recu_le. Chaque webhook reçoit sa propre version. Sans cette case, seule la fiche part ; les événements message.envoye, invitation.envoyee (sa note) et reponse_ia.a_valider portent, eux, leur texte.
{
"message": {
"objet": "Re: votre offre",
"texte": "Oui, appelons-nous jeudi.",
"recu_le": "2026-09-30T09:13:58.000Z"
}
}Doublons et ordre d’arrivée
Une même livraison peut arriver deux fois : si votre serveur répond après 10 secondes alors qu’il a déjà traité l’événement, ou si le nôtre redémarre pendant l’envoi. Une relance renvoie exactement le même corps, avec une signature neuve. FantomHunt n’envoie pas d’identifiant de livraison : dédoublonnez sur evenement, cree_le et l’identifiant de la fiche, jamais sur la signature. L’ordre d’arrivée n’est pas garanti : triez sur cree_le, et traitez chaque événement de façon idempotente (sans effet s’il est rejoué).
Vérifiez la signature, avant de lire le corps.
Chaque livraison porte l’en-tête X-Fantomhunt-Signature: t=<horodatage>,v1=<signature>. v1 est le HMAC-SHA256, en hexadécimal, de la chaîne t, un point, puis le corps brut, calculé avec le secret de votre webhook.
La vérification, pas à pas
- Lisez le corps brut, avant tout analyseur JSON (avec Express :
express.raw({ type: 'application/json' })). Un corps relu puis réécrit change d’octets, et la signature ne correspond plus. - Séparez
tetv1dans l’en-tête. - Recalculez le HMAC-SHA256 de
t.corpsavec le secret (whsec_…, dans Paramètres › API, bouton Secret) et comparez-le àv1en temps constant. - Refusez un horodatage trop éloigné de votre heure : nous conseillons 5 minutes.
test l’heure de l’envoi, pas celle de l’événement : une relance arrive avec un horodatage frais.
const crypto = require('crypto');
// corpsBrut : le corps reçu tel quel (chaîne ou Buffer), avant tout JSON.parse.
function verifier(enteteSignature, corpsBrut, secret, maintenant = Date.now() / 1000) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(enteteSignature || '');
if (!m) return false;
const [, t, v1] = m;
if (Math.abs(maintenant - Number(t)) > 300) return false; // tolérance : 5 minutes
const attendu = crypto.createHmac('sha256', secret)
.update(t + '.' + corpsBrut)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(attendu));
}Le vecteur de test
whsec_4f1c9e2a…X-Fantomhunt-Signature: t=1790759640,v1=0a5df15b006908b98c9fcbe714012b372ac71e178ee74a9238b7cac6e0bc7076{"cree_le":"2026-09-30T09:13:58.000Z","donnees":{"canal":"linkedin","prospect":{"id":"3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22","nom":"Camille Roussel","score":92,"statut":"replied","entreprise":"Skova"}},"evenement":"reponse.recue"}1790759642 (2 secondes après l’envoi)1790759640.{"cree_le":"2026-09-30T09:13:58.000Z","donnees":…0a5df15b006908b98c9fcbe714012b372ac71e178ee74a9238b7cac6e0bc70762 s ≤ 300 sVecteur de test : avec le secret whsec_4f1c9e2a7b3d8e6f0a5c1b9d2e7f3a8c6b0d4e1f9a2c7b5e, l’en-tête t=1790759640,v1=0a5df15b006908b98c9fcbe714012b372ac71e178ee74a9238b7cac6e0bc7076 et le corps brut de l’exemple ci-dessus, votre code doit répondre vrai en passant l’heure 1790759642, et faux si un seul caractère du corps change.
Si votre outil sans code ne vérifie pas la signature, gardez son adresse de réception pour vous seul : c’est elle qui protège le circuit. Un serveur à vous vérifie toujours. Le secret est stocké chiffré et reste consultable dans Paramètres › API : comment vos secrets et vos clés sont gardés.
Si votre serveur tombe, vous êtes prévenu.
Répondez par un code 2xx en moins de 10 secondes, puis traitez l’événement de votre côté. Tout autre code, une redirection ou un délai dépassé compte comme un échec.
Relances, échec définitif et pause
https://exemple.fr/webhooks/fantomhunt En panne- Essai 10 s
- Essai 230 s
- Essai 32 min 30 s
- Essai 412 min 30 s
- Essai 542 min 30 s
- Essai 62 h 42 min 30 s
Six essais sur près de trois heures, puis l’échec définitif. À la troisième livraison d’affilée en échec définitif, le webhook se met en pause et un email vous prévient.
- Une livraison en échec est relancée après 30 secondes, 2 minutes, 10 minutes, 30 minutes, puis 2 heures. Après ce sixième essai, elle passe en échec définitif.
- Après trois échecs définitifs d’affilée, le webhook se met en pause : les livraisons en attente sont abandonnées, vous recevez l’email « Votre webhook FantomHunt est en pause » et Paramètres › API affiche « En panne ». Une livraison réussie remet le compteur à zéro.
- Corrigez votre serveur, puis cliquez sur Réactiver : les nouveaux événements repartent ; ceux de la pause ne sont pas rejoués.
- Votre adresse est revérifiée à chaque envoi : https, port 443, adresse publique, aucune redirection suivie.
Ce que dit le journal des livraisons
Paramètres › API garde les 50 dernières livraisons de chaque webhook, 14 jours : « reçue (HTTP 200) », « en attente de relance (essai 2) » ou « échec définitif », avec le code et l’erreur.
Un webhook par client, grâce aux filtres.
Avec une offre par client et un webhook par client, réglé sur « Seulement pour » cette offre, les réponses et les rendez-vous d’un client n’arrivent que dans l’outil de ce client.
- Un webhook peut se limiter à des canaux (LinkedIn, WhatsApp, email), à une campagne, à une offre ou à une étiquette. Vide, un filtre laisse tout passer.
- Un filtre ne trie que les événements qui portent sa donnée : le canal sur tout événement qui en a un (une recherche compte pour LinkedIn), la campagne, l’offre et l’étiquette sur les événements d’une personne, l’offre aussi sur les recherches.
- Les autres, comme « Crédits IA bas » ou « Affaire créée », partent toujours, puisque vous les avez cochés.
- La campagne d’un contact WhatsApp ou email est celle de sa fiche LinkedIn liée.
- Un webhook se modifie (événements, filtres, texte des réponses) sans changer d’adresse ni de secret.
- En équipe, chaque membre a ses propres webhooks : un événement part vers ceux de la personne à qui il appartient.
Pour les agences : un webhook par client, pour les agences.
Recettes sans code, prêtes à brancher.
Pour recevoir les événements FantomHunt dans Zapier, Make ou n8n, créez-y un déclencheur par webhook, copiez son adresse de réception, puis collez-la dans Paramètres, onglet API, section Webhooks, et cochez vos événements. Le bouton « Envoyer un test » confirme la connexion. Chaque événement sur un prospect LinkedIn livre sa fiche complète : nom, entreprise, poste, lien LinkedIn, email, statut et Score IA.
Aucune application FantomHunt à installer dans ces outils : une simple adresse suffit. Avec Zapier, ce déclencheur demande une offre Zapier payante, selon l’aide de Zapier sur le déclencheur par webhook (relue le 1er octobre 2026) ; Make et n8n reçoivent les mêmes webhooks. Voir aussi tous les outils que FantomHunt relie, et par quel chemin.
Remplir HubSpot ou Pipedrive dès qu’un prospect répond
- Dans Zapier, créez un Zap dont le déclencheur est « Webhooks by Zapier », événement « Catch Hook ». Copiez l’adresse fournie.
- Dans FantomHunt, ouvrez Paramètres › API, section Webhooks, « Ajouter un webhook » : collez l’adresse et cochez vos événements, par exemple « Réponse reçue » et « Rendez-vous pris ».
- Cliquez sur « Envoyer un test » : Zapier reçoit un message de bienvenue, preuve que la connexion marche. Pour que Zapier découvre les champs de la fiche, déclenchez ensuite un vrai événement (par exemple, changez le statut d’un prospect si vous avez coché « Statut changé »), puis rechargez l’exemple dans Zapier.
- Ajoutez l’action de votre outil (créer ou mettre à jour un contact) et faites correspondre les champs : chaque livraison de ces événements contient la fiche complète, avec le nom, l’entreprise, le poste, l’adresse LinkedIn, l’email et, quand il est connu, son indice de fiabilité, le téléphone, le statut, le Score IA quand il est noté, l’offre, les étiquettes et les campagnes en cours. Un événement WhatsApp ou email porte, sous
contact, une fiche plus courte : nom, numéro ou email, statut, offre, étiquettes et campagnes. - Activez le Zap. Votre outil se remplit tout seul, à chaque événement coché.
Exemple fictif : la ligne du journal des livraisons de Paramètres › API, quand Zapier a bien reçu l’événement.
Prévenir votre équipe dans Slack
Même déclencheur « Catch Hook », avec l’événement « Réponse reçue » coché, puis l’action Slack qui publie un message dans un canal : « Camille Roussel (Skova) a répondu sur LinkedIn ». L’équipe est prévenue dès qu’un prospect répond, sans ouvrir FantomHunt.
Un registre Google Sheets qui se tient à jour
Cochez « Prospect ajouté » et branchez l’action Google Sheets qui ajoute une ligne : chaque nouvelle fiche devient une ligne, quelle que soit la façon dont elle est arrivée ; pour un prospect LinkedIn, avec son entreprise, sa source et son Score IA s’il est déjà noté. Pour un rapport hebdomadaire, interrogez plutôt GET /v1/stats depuis le tableur.
Une affaire gagnée dans votre outil, gagnée dans FantomHunt
Déclencheur « affaire gagnée » de votre outil, puis une action « Webhooks by Zapier », événement « Custom Request », méthode PATCH : PATCH /v1/affaires/:id avec { "statut": "gagnee" }, sous une clé qui a le droit « Modifier le CRM ». L’affaire passe en gagnée, comme dans l’application ; une affaire perdue demande aussi motif_de_perte. Gardez l’identifiant de l’affaire dans votre outil dès sa création : l’événement « Affaire créée » vous le livre, et GET /v1/affaires les liste.
curl -X PATCH "https://api.fantomhunt.com/v1/affaires/:id" \
-H "Authorization: Bearer fh_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "statut": "gagnee" }'29 événements, rangés comme dans l’application.
Les six familles et les libellés sont ceux que vous cochez dans Paramètres › API. Chaque événement ci-dessous donne le code reçu dans evenement, le moment où il part et le contenu de donnees.
Quatre événements partent dès que FantomHunt les voit : reponse.recue, invitation.acceptee, prospect.extrait et coordonnee.trouvee. Un statut ou un rendez-vous changé à la main sur une fiche part aussi tout de suite. Les autres passent par une file relevée chaque minute. Ce qui se passe sur LinkedIn ou WhatsApp (réponse, invitation acceptée, message envoyé) remonte par l’extension, navigateur ouvert. Les emails sont lus par nos serveurs, sans navigateur : aussitôt si vous avez utilisé FantomHunt dans les 7 derniers jours, sinon toutes les 15 minutes.
« Aussitôt » : la livraison part dès que FantomHunt voit l’événement ; « file » : elle part à la relève suivante, chaque minute ; « aussitôt si changé à la main » : quand le changement est fait à la main sur la fiche.
Prospects
prospect.ajoute
Quand il part : Une fiche entre, quelle que soit la source : extraction, import, ajout par son lien LinkedIn (une fois la fiche lue), nouveau contact WhatsApp ou email. Un contact WhatsApp ou email déjà rattaché à un prospect LinkedIn ne le déclenche pas.
Contenu de donnees : canal, et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "prospect.ajoute",
"cree_le": "2026-09-22T08:10:00.000Z",
"donnees": {
"canal": "linkedin",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": null,
"email_score": null,
"telephone": null,
"statut": "nouveau",
"score": null,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-22T08:10:00.000Z",
"contacte_le": null,
"connecte_le": null,
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": []
}
}
}prospect.extrait
Quand il part : Un prospect entre par une extraction ou un import de l’extension.
Contenu de donnees : prospect
{
"evenement": "prospect.extrait",
"cree_le": "2026-09-22T08:10:00.000Z",
"donnees": {
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": null,
"email_score": null,
"telephone": null,
"statut": "nouveau",
"score": null,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-22T08:10:00.000Z",
"contacte_le": null,
"connecte_le": null,
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": []
}
}
}statut.change
Quand il part : Le statut d’une fiche change, quel que soit le chemin : à la main, par une campagne, par l’extension ou par une action groupée.
Contenu de donnees : statut, statut_precedent, canal, et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "statut.change",
"cree_le": "2026-09-30T10:02:00.000Z",
"donnees": {
"canal": "linkedin",
"statut": "rdv",
"statut_precedent": "replied",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "rdv",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T10:02:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": "2026-10-01T12:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}coordonnee.trouvee
Quand il part : Un email ou un téléphone est trouvé pour un prospect LinkedIn : par l’enrichissement, ou un email lu par l’extension dans ses coordonnées LinkedIn.
Contenu de donnees : type (email ou telephone), valeur, prospect
{
"evenement": "coordonnee.trouvee",
"cree_le": "2026-09-22T08:12:31.000Z",
"donnees": {
"type": "email",
"valeur": "camille.roussel@skova.fr",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "nouveau",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-22T08:12:31.000Z",
"contacte_le": null,
"connecte_le": null,
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": []
}
}
}poste.change
Quand il part : Un changement de poste est détecté sur un prospect suivi.
Contenu de donnees : canal, changement (type : promotion ou nouveau_poste, ancien_poste, ancienne_entreprise, nouveau_poste, nouvelle_entreprise, detecte_le), prospect
{
"evenement": "poste.change",
"cree_le": "2026-10-02T06:00:00.000Z",
"donnees": {
"canal": "linkedin",
"changement": {
"type": "promotion",
"ancien_poste": "Directrice commerciale",
"ancienne_entreprise": "Skova",
"nouveau_poste": "Directrice générale adjointe",
"nouvelle_entreprise": "Skova",
"detecte_le": "2026-10-02T06:00:00.000Z"
},
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "rdv",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-10-02T09:10:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": "2026-10-02T08:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}Échanges
message.envoye
Quand il part : LinkedIn quand l’extension l’a réellement envoyé ; WhatsApp et email à l’envoi. Un historique resynchronisé ne déclenche rien.
Contenu de donnees : canal, message (texte, objet pour un email, envoye_le), et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "message.envoye",
"cree_le": "2026-09-29T08:30:00.000Z",
"donnees": {
"canal": "linkedin",
"message": {
"texte": "Bonjour Camille, je vois que vous pilotez les ventes chez Skova…",
"envoye_le": "2026-09-29T08:30:00.000Z"
},
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "contacted",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-29T08:30:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}invitation.envoyee
Quand il part : L’extension a envoyé l’invitation LinkedIn.
Contenu de donnees : canal, invitation (note, envoyee_le), prospect
{
"evenement": "invitation.envoyee",
"cree_le": "2026-09-23T09:00:00.000Z",
"donnees": {
"canal": "linkedin",
"invitation": {
"note": "Ravi d’échanger avec vous sur le pilotage commercial.",
"envoyee_le": "2026-09-23T09:00:00.000Z"
},
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "pending_connection",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-23T09:00:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": null,
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}invitation.acceptee
Quand il part : Le prospect passe en « Connecté » : l’extension a vu l’invitation acceptée, ou vous avez posé ce statut à la main. Un profil ajouté par son lien et déjà dans vos relations le déclenche aussi.
Contenu de donnees : prospect
{
"evenement": "invitation.acceptee",
"cree_le": "2026-09-24T16:20:00.000Z",
"donnees": {
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "connected",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-24T16:20:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}reponse.recue
Quand il part : LinkedIn : la réponse qui fait passer le prospect en « En discussion » (rien s’il y est déjà, ou s’il est en relance, en rendez-vous ou client). WhatsApp et email : chaque réponse, sauf les réponses automatiques reconnues (absence, congés) et les emails dont l’expéditeur n’a pas pu être authentifié.
Contenu de donnees : canal, et prospect (LinkedIn) ou contact (WhatsApp, email) ; plus message (objet, texte, recu_le) si le webhook joint le texte
{
"evenement": "reponse.recue",
"cree_le": "2026-09-30T09:13:58.000Z",
"donnees": {
"canal": "linkedin",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "replied",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T09:13:58.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": null,
"etiquettes": ["Chaud"],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}reponse_ia.a_valider
Quand il part : L’IA propose une réponse LinkedIn qui attend votre validation.
Contenu de donnees : canal, suggestion (texte, campagne ou null), prospect
{
"evenement": "reponse_ia.a_valider",
"cree_le": "2026-09-30T09:15:00.000Z",
"donnees": {
"canal": "linkedin",
"suggestion": {
"texte": "Avec plaisir, Camille. Jeudi 14 h vous convient-il ?",
"campagne": { "id": "b3f0…", "nom": "Directeurs commerciaux" }
},
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "replied",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T09:13:58.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": null,
"etiquettes": ["Chaud"],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}Rendez-vous
rdv.pris
Quand il part : Un rendez-vous est posé sur une fiche qui n’en avait pas à venir.
Contenu de donnees : rdv_le, canal, et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "rdv.pris",
"cree_le": "2026-09-30T10:02:00.000Z",
"donnees": {
"canal": "linkedin",
"rdv_le": "2026-10-01T12:00:00.000Z",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "rdv",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T10:02:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": "2026-10-01T12:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}rdv.deplace
Quand il part : Un rendez-vous à venir change de date.
Contenu de donnees : rdv_le, ancien_rdv_le, canal, et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "rdv.deplace",
"cree_le": "2026-09-30T16:40:00.000Z",
"donnees": {
"canal": "linkedin",
"rdv_le": "2026-10-02T08:00:00.000Z",
"ancien_rdv_le": "2026-10-01T12:00:00.000Z",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "rdv",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T16:40:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": "2026-10-02T08:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}rdv.debriefe
Quand il part : Le compte rendu du rendez-vous est enregistré.
Contenu de donnees : rdv_le, canal, et prospect (LinkedIn) ou contact (WhatsApp, email)
{
"evenement": "rdv.debriefe",
"cree_le": "2026-10-02T09:10:00.000Z",
"donnees": {
"canal": "linkedin",
"rdv_le": "2026-10-02T08:00:00.000Z",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "rdv",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-10-02T09:10:00.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": "2026-10-02T08:00:00.000Z",
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}Campagnes et recherches
campagne.prospect_inscrit
Quand il part : Un prospect entre dans une campagne.
Contenu de donnees : canal, campagne (id, nom), prospect
{
"evenement": "campagne.prospect_inscrit",
"cree_le": "2026-09-23T08:55:00.000Z",
"donnees": {
"canal": "linkedin",
"campagne": { "id": "b3f0…", "nom": "Directeurs commerciaux" },
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "nouveau",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-23T08:55:00.000Z",
"contacte_le": null,
"connecte_le": null,
"repondu_le": null,
"rdv_le": null,
"etiquettes": [],
"campagnes": [{ "id": "b3f0…", "nom": "Directeurs commerciaux" }]
}
}
}campagne.prospect_sorti
Quand il part : Un prospect quitte une campagne.
Contenu de donnees : canal, campagne, raison (termine, a_repondu, ou la raison de l’arrêt), prospect
{
"evenement": "campagne.prospect_sorti",
"cree_le": "2026-09-30T09:14:02.000Z",
"donnees": {
"canal": "linkedin",
"campagne": { "id": "b3f0…", "nom": "Directeurs commerciaux" },
"raison": "a_repondu",
"prospect": {
"id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"nom": "Camille Roussel",
"entreprise": "Skova",
"poste": "Directrice commerciale",
"url_linkedin": "https://www.linkedin.com/in/…",
"localisation": "Lyon, France",
"email": "camille.roussel@skova.fr",
"email_score": null,
"telephone": null,
"statut": "replied",
"score": 92,
"source": "extension",
"recherche_id": "4a7e…",
"offre_id": "9c1d…",
"offre": { "id": "9c1d…", "nom": "Pilotage de la performance B2B" },
"cree_le": "2026-09-22T08:10:00.000Z",
"modifie_le": "2026-09-30T09:14:02.000Z",
"contacte_le": "2026-09-23T09:00:00.000Z",
"connecte_le": "2026-09-24T16:20:00.000Z",
"repondu_le": "2026-09-30T09:13:58.000Z",
"rdv_le": null,
"etiquettes": ["Chaud"],
"campagnes": []
}
}
}recherche.terminee
Quand il part : Une recherche de prospects se termine.
Contenu de donnees : recherche (id, cible, pays, volume, statut, prospects_trouves, secteurs, offre_id, erreur, cree_le, demarree_le, terminee_le)
{
"evenement": "recherche.terminee",
"cree_le": "2026-09-22T08:24:00.000Z",
"donnees": {
"recherche": {
"id": "4a7e…",
"cible": "Directeur commercial",
"pays": "France",
"volume": 50,
"statut": "done",
"prospects_trouves": 48,
"secteurs": null,
"offre_id": "9c1d…",
"erreur": null,
"cree_le": "2026-09-22T08:02:00.000Z",
"demarree_le": "2026-09-22T08:03:00.000Z",
"terminee_le": "2026-09-22T08:24:00.000Z"
}
}
}recherche.echouee
Quand il part : Une recherche s’arrête sur une erreur.
Contenu de donnees : recherche, avec erreur renseignée
{
"evenement": "recherche.echouee",
"cree_le": "2026-09-25T14:31:00.000Z",
"donnees": {
"recherche": {
"id": "7d2b…",
"cible": "Responsable des achats",
"pays": "France",
"volume": 50,
"statut": "error",
"prospects_trouves": 12,
"secteurs": null,
"offre_id": "9c1d…",
"erreur": "Erreur extension",
"cree_le": "2026-09-25T14:05:00.000Z",
"demarree_le": "2026-09-25T14:06:00.000Z",
"terminee_le": "2026-09-25T14:31:00.000Z"
}
}
}Tâches et affaires
tache.creee
Quand il part : Une tâche est créée.
Contenu de donnees : tache (id, titre, echeance_le, faite_le, cree_le, en_retard, canal, prospect_id, contact_whatsapp_id, contact_email_id, personne)
{
"evenement": "tache.creee",
"cree_le": "2026-10-01T10:02:11.000Z",
"donnees": {
"tache": {
"id": "c84e…",
"titre": "Rappeler Camille Roussel",
"echeance_le": "2026-10-05T09:00:00.000Z",
"faite_le": null,
"cree_le": "2026-10-01T10:02:11.000Z",
"en_retard": false,
"canal": "linkedin",
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"personne": "Camille Roussel"
}
}
}tache.echue
Quand il part : L’échéance d’une tâche non faite vient de passer : une seule fois par tâche, à la relève suivante.
Contenu de donnees : tache
{
"evenement": "tache.echue",
"cree_le": "2026-10-05T09:01:00.000Z",
"donnees": {
"tache": {
"id": "c84e…",
"titre": "Rappeler Camille Roussel",
"echeance_le": "2026-10-05T09:00:00.000Z",
"faite_le": null,
"cree_le": "2026-10-01T10:02:11.000Z",
"en_retard": true,
"canal": "linkedin",
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"personne": "Camille Roussel"
}
}
}tache.faite
Quand il part : Une tâche est marquée faite.
Contenu de donnees : tache
{
"evenement": "tache.faite",
"cree_le": "2026-10-05T10:15:00.000Z",
"donnees": {
"tache": {
"id": "c84e…",
"titre": "Rappeler Camille Roussel",
"echeance_le": "2026-10-05T09:00:00.000Z",
"faite_le": "2026-10-05T10:15:00.000Z",
"cree_le": "2026-10-01T10:02:11.000Z",
"en_retard": false,
"canal": "linkedin",
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"personne": "Camille Roussel"
}
}
}affaire.creee
Quand il part : Une affaire est créée.
Contenu de donnees : affaire (id, nom, statut : en_cours, gagnee ou perdue, montant_centimes, debut_le, echeance_le, cloturee_le, motif_de_perte, cree_le, colonne, personnes)
{
"evenement": "affaire.creee",
"cree_le": "2026-10-02T09:20:00.000Z",
"donnees": {
"affaire": {
"id": "f2a8…",
"nom": "Skova, pilotage commercial",
"statut": "en_cours",
"montant_centimes": 480000,
"debut_le": null,
"echeance_le": null,
"cloturee_le": null,
"motif_de_perte": null,
"cree_le": "2026-10-02T09:20:00.000Z",
"colonne": { "id": "1c4d…", "nom": "Négociation" },
"personnes": [
{
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"importance": 3,
"nom": "Camille Roussel"
}
]
}
}
}affaire.gagnee
Quand il part : Une affaire passe en gagnée.
Contenu de donnees : affaire
{
"evenement": "affaire.gagnee",
"cree_le": "2026-10-02T15:00:00.000Z",
"donnees": {
"affaire": {
"id": "f2a8…",
"nom": "Skova, pilotage commercial",
"statut": "gagnee",
"montant_centimes": 480000,
"debut_le": null,
"echeance_le": null,
"cloturee_le": "2026-10-02T15:00:00.000Z",
"motif_de_perte": null,
"cree_le": "2026-10-02T09:20:00.000Z",
"colonne": { "id": "1c4d…", "nom": "Négociation" },
"personnes": [
{
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"importance": 3,
"nom": "Camille Roussel"
}
]
}
}
}affaire.perdue
Quand il part : Une affaire passe en perdue.
Contenu de donnees : affaire, avec motif_de_perte
{
"evenement": "affaire.perdue",
"cree_le": "2026-10-02T15:05:00.000Z",
"donnees": {
"affaire": {
"id": "6e91…",
"nom": "Skova, formation des managers",
"statut": "perdue",
"montant_centimes": 150000,
"debut_le": null,
"echeance_le": null,
"cloturee_le": "2026-10-02T15:05:00.000Z",
"motif_de_perte": "Budget reporté à 2027",
"cree_le": "2026-09-25T10:00:00.000Z",
"colonne": { "id": "1c4d…", "nom": "Négociation" },
"personnes": [
{
"prospect_id": "3f6c2a10-8b4e-4d2a-9c1f-5e7a9b0d1c22",
"contact_whatsapp_id": null,
"contact_email_id": null,
"importance": 3,
"nom": "Camille Roussel"
}
]
}
}
}Compte
canal.deconnecte
Quand il part : LinkedIn se déconnecte, ou une boîte email est à reconnecter.
Contenu de donnees : canal (linkedin ou email), etat, etat_precedent ; raison (LinkedIn) ou adresse (email)
{
"evenement": "canal.deconnecte",
"cree_le": "2026-09-27T07:45:00.000Z",
"donnees": {
"canal": "linkedin",
"etat": "auth_error",
"etat_precedent": "ok",
"raison": "identite_non_confirmee"
}
}canal.reconnecte
Quand il part : Le canal refonctionne.
Contenu de donnees : canal, etat, etat_precedent ; adresse pour un email
{
"evenement": "canal.reconnecte",
"cree_le": "2026-09-27T08:05:00.000Z",
"donnees": { "canal": "linkedin", "etat": "ok", "etat_precedent": "auth_error" }
}prospection.en_pause
Quand il part : La prospection est mise en pause.
Contenu de donnees : en_pause_depuis
{
"evenement": "prospection.en_pause",
"cree_le": "2026-09-26T18:00:00.000Z",
"donnees": { "en_pause_depuis": "2026-09-26T18:00:00.000Z" }
}prospection.reprise
Quand il part : La prospection reprend.
Contenu de donnees : etait_en_pause_depuis
{
"evenement": "prospection.reprise",
"cree_le": "2026-09-28T07:00:00.000Z",
"donnees": { "etait_en_pause_depuis": "2026-09-26T18:00:00.000Z" }
}linkedin.freinee
Quand il part : FantomHunt suspend un temps les invitations ou les envois LinkedIn pour protéger votre compte, jusqu’à l’heure donnée par jusqua.
Contenu de donnees : jusqua, refus_d_affilee, raison
{
"evenement": "linkedin.freinee",
"cree_le": "2026-09-25T15:20:00.000Z",
"donnees": {
"jusqua": "2026-09-26T07:00:00.000Z",
"refus_d_affilee": 3,
"raison": null
}
}credits.bas
Quand il part : Vos crédits IA descendent à 10 % du forfait mensuel ou moins : 40 sur Essentiel, 100 sur Croissance.
Contenu de donnees : credits_ia (restants, par_mois)
{
"evenement": "credits.bas",
"cree_le": "2026-09-29T11:00:00.000Z",
"donnees": { "credits_ia": { "restants": 38, "par_mois": 400 } }
}Les limites à connaître, avant de brancher.
Les webhooks sont-ils dans l’offre gratuite ?
Non. Ils sont inclus dès Essentiel, 29 € par mois (19 € par mois avec engagement d’un an), et dans Croissance, 69 € par mois (49 € par mois avec engagement d’un an). Si l’abonnement s’arrête, vos webhooks se mettent en pause, sans être supprimés : ils reprennent au paiement suivant, sans les événements survenus entre-temps.
Faut-il savoir coder ?
Non pour Zapier (offre Zapier payante), Make ou n8n : vous collez l’adresse de leur déclencheur, FantomHunt y envoie chaque événement coché, avec la fiche de la personne quand il en concerne une, sans appel à l’API. Pour un serveur à vous, comptez une route qui vérifie la signature et répond par un code 2xx.
Mon navigateur doit-il rester ouvert ?
Pour LinkedIn et WhatsApp, oui : leurs événements remontent par l’extension, dans votre navigateur. Les emails sont lus par nos serveurs, sans navigateur : aussitôt si vous avez utilisé FantomHunt dans les 7 derniers jours, sinon toutes les 15 minutes. Ce que vous faites dans l’application (statut, rendez-vous, tâche) ne dépend pas du navigateur. L’envoi des livraisons, lui, part toujours de nos serveurs.
Comment éviter les doublons ?
Une même livraison peut arriver deux fois : si votre serveur répond après 10 secondes alors qu’il a déjà traité l’événement, ou si le nôtre redémarre pendant l’envoi. Il n’y a pas d’identifiant de livraison : dédoublonnez sur evenement, cree_le et l’identifiant de la fiche, jamais sur la signature, qui change à chaque envoi.
Puis-je rejouer une livraison, ou changer l’adresse ou le secret ?
Pas de rejeu manuel. L’adresse et le secret sont fixes : pour les changer, supprimez le webhook et créez-en un autre, qui reçoit un nouveau secret. Les événements, les filtres et le texte des réponses se modifient à tout moment.
Combien de webhooks, et quelles limites ?
Jusqu’à 10 webhooks par compte, 20 créations par heure, 10 envois de test par quart d’heure. Votre serveur a 10 secondes pour répondre.
En équipe, chacun a-t-il ses webhooks ?
Oui. Chaque membre règle les siens dans ses Paramètres, et un événement part vers les webhooks de la personne à qui appartient la fiche, la tâche ou l’affaire.
Puis-je créer un webhook par l’API, ou envoyer des ordres à FantomHunt par webhook ?
Non. Les webhooks se gèrent dans Paramètres › API, et FantomHunt ne reçoit pas de webhook. Pour agir depuis vos outils, passez par l’API ; pour interroger votre prospection depuis Claude Code, par le serveur MCP.
Quelles données partent vers mon outil ?
Seulement les événements cochés, vers la seule adresse choisie, en https et signés. La fiche ne contient jamais la note. Le texte des réponses reçues ne part que si vous cochez l’option ; les événements « Message envoyé », « Invitation envoyée » (sa note) et « Réponse IA à valider » portent, eux, leur texte.
Pour aller plus loin : comparer les offres en détail · l’extension, dans votre navigateur · agir par l’API · interroger votre prospection depuis Claude Code
Votre premier événement, dans votre outil.
Commencer gratuitement- Compte gratuit (sans CB)
- Webhooks dès Essentiel, 29 € par mois
- Signés et relancés