API ReactIn

Payloads des webhooks et identification d'un lead

Un même événement webhook peut provenir d'une campagne, d'une automatisation ou d'un lead magnet, et le payload diffère. Découvrez comment distinguer les sources et quel identifiant désigne une personne dans tous les cas.

4 min de lecture

Les webhooks envoient un événement à votre endpoint chaque fois qu'il se passe quelque chose dans votre espace de travail : un lead est ajouté, une invitation est envoyée, une connexion est acceptée, un premier message part, un lead répond. La plupart de ces événements peuvent être produits par plusieurs sources, et le payload n'est pas identique dans tous les cas. Cette page documente ces différences, et en particulier comment identifier le lead.

Enveloppe

Chaque livraison a la même structure externe :

{
  "event": "CONNECTION_ACCEPTED",
  "timestamp": "2026-03-11T14:30:00.000Z",
  "data": { },
  "metadata": {
    "organizationId": "org_abc123",
    "campaignId": "campaign_xyz789",
    "listId": "list_xyz789",
    "linkedinAccountId": "li_acc_123",
    "automationId": "automation_xyz789"
  }
}

metadata ne contient que les clés pertinentes pour l'événement. C'est dans data que la structure varie.

Identifier la source d'un événement

CONNECTION_ACCEPTED, INVITATION_SENT, FIRST_MESSAGE_SENT et LEAD_ADDED peuvent chacun provenir de plusieurs endroits. Exactement une de ces clés est présente dans data, et elle vous indique laquelle :

Clé dans dataSource
campaignUne campagne que vous avez lancée
listUne SmartList
automationUne automatisation, par exemple l'auto-accept
leadMagnetUn lead magnet

C'est important pour vos rapports. L'auto-accept produit des événements CONNECTION_ACCEPTED pour des invitations que d'autres personnes vous ont envoyées, pas pour des invitations envoyées par ReactIn en votre nom. Si vous calculez un taux d'acceptation, filtrez d'abord sur data.campaign : sinon les acceptations entrantes gonflent votre numérateur, et il n'existe aucun INVITATION_SENT correspondant au dénominateur.

Identifier le lead

L'objet data.lead porte toujours deux identifiants :

  • lead.leadId, l'identifiant du lead au niveau de l'organisation. Il signifie toujours la même chose, quelle que soit la source. C'est la clé à utiliser pour dédupliquer des personnes, ou pour rapprocher un événement d'un enregistrement que vous avez déjà stocké.

  • lead.id, l'identifiant le plus spécifique disponible dans ce contexte. Quand data.campaign ou data.list est présent, c'est l'identifiant du lead rattaché à la liste, le même id que renvoie [Récupérer les leads de ReactIn via API] et le même leadId qu'accepte [Mettre à jour des leads via API]. Quand data.automation ou data.leadMagnet est présent, il n'y a aucune liste impliquée : lead.id reprend alors la valeur de lead.leadId.

⚠️ Une même personne ajoutée à deux SmartLists a deux lead.id différents mais un seul lead.leadId. Utilisez lead.leadId pour réconcilier une personne entre campagnes, automatisations et lead magnets.

Les deux clés sont toujours présentes, et toutes deux peuvent valoir null si le lead n'a pas pu être résolu. Les payloads d'automatisation et de lead magnet exposent aussi lead.linkedinUrl, qui constitue une clé de repli fiable.

CONNECTION_ACCEPTED, les trois formes

Depuis une campagne. Le lead vient d'une SmartList, la fiche complète est donc disponible.

{
  "type": "CONNECTION_ACCEPTED",
  "conversation": null,
  "lead": {
    "id": "list_lead_XXX",
    "leadId": "lead_YYY",
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane@example.com",
    "linkedinUrl": "https://linkedin.com/in/janesmith",
    "company": "Acme Inc",
    "headline": "Product Manager",
    "location": "New York, NY",
    "customFields": { "Is Matching My Target": true }
  },
  "campaign": { "id": "campaign_xyz789", "name": "Q1 Outreach" },
  "linkedinAccount": { "id": "li_acc_123", "name": "Sales Rep" }
}

Depuis l'automatisation auto-accept. Quelqu'un vous a envoyé une invitation et ReactIn l'a acceptée. Il n'y a ni liste, ni campagne, ni donnée enrichie : le bloc lead se limite à ce que LinkedIn renvoie sur l'invitation. lead.linkedinIdentifier est l'identifiant membre LinkedIn.

{
  "type": "CONNECTION_ACCEPTED",
  "lead": {
    "id": "lead_YYY",
    "leadId": "lead_YYY",
    "linkedinIdentifier": "ACoAAABCDEFGHIJ",
    "firstName": "Jane",
    "lastName": "Smith",
    "linkedinUrl": "https://www.linkedin.com/in/janesmith",
    "headline": "Product Manager"
  },
  "automation": {
    "id": "automation_xyz789",
    "name": "[Automation - Auto accept] Sales Rep"
  },
  "linkedinAccount": { "id": "li_acc_123", "name": "Sales Rep" }
}

Depuis un lead magnet. Même bloc lead réduit, avec un bloc leadMagnet au lieu de automation.

{
  "type": "CONNECTION_ACCEPTED",
  "lead": {
    "id": "lead_YYY",
    "leadId": "lead_YYY",
    "firstName": "Jane",
    "lastName": "Smith",
    "linkedinUrl": "https://linkedin.com/in/janesmith",
    "headline": "Product Manager"
  },
  "leadMagnet": { "id": "lead_magnet_xyz789", "name": "LinkedIn Playbook" },
  "linkedinAccount": { "id": "li_acc_123", "name": "Sales Rep" }
}

INVITATION_SENT, FIRST_MESSAGE_SENT et LEAD_ADDED suivent le même schéma : bloc lead complet depuis une campagne ou une liste, bloc lead réduit depuis une automatisation ou un lead magnet.

Voir les payloads dans l'app

Allez dans Paramètres → Webhooks, créez ou modifiez un webhook, puis cliquez sur Voir le payload sous n'importe quel événement. Les événements émis par plusieurs sources affichent un onglet par source.

Bonnes pratiques

  • Branchez sur data.campaign / data.list / data.automation / data.leadMagnet plutôt que sur la présence d'un champ à l'intérieur de lead. De nouveaux champs optionnels peuvent être ajoutés aux payloads au fil du temps : ignorez les clés que vous ne reconnaissez pas plutôt que de rejeter la livraison.

  • Dédupliquez sur lead.leadId, avec lead.linkedinUrl en repli.

  • Les webhooks ne livrent que les événements survenus après leur création. Les données existantes ne déclenchent aucune livraison.