Formulaires natifs Meta Lead Ads

Après configuration par France Papers, envoyez le scopeId de la mission, son campaignName exact et la source ci-dessous à la place de sourceUrl. Les identifiants sont des chaînes de caractères. La Page et le formulaire doivent tous deux correspondre au périmètre configuré.

{
  "source": {
    "type": "META_LEAD_ADS",
    "pageId": "VOTRE_PAGE_ID",
    "formId": "VOTRE_FORM_ID"
  }
}

Formulaires Snapchat

Utilisez une mission Snapchat distincte et la source SNAPCHAT_LEAD_ADS avec adAccountId et formId (UUID minuscules). Les scopes Meta et TikTok ne couvrent pas Snapchat. La mission DRAFT peut inventorier les formulaires avant de recevoir les noms exacts des campagnes : elle n’autorise alors aucun envoi. La version de notice doit correspondre exactement à celle présentée lors de la collecte ; durée maximale de contact de 30 jours, choix PHONE et WHATSAPP séparés. Le nom de campagne ne constitue pas une réponse à une question sur la démarche.

{
  "source": {
    "type": "SNAPCHAT_LEAD_ADS",
    "adAccountId": "UUID_DU_COMPTE",
    "formId": "UUID_DU_FORMULAIRE"
  }
}

Formulaire TikTok

Utilisez une mission TikTok distincte configurée par France Papers et ses identifiants exacts sous forme de chaînes. Le scope Meta ne couvre pas TikTok. Le compte annonceur, le formulaire, la campagne et la version des mentions doivent correspondre à la mission.

{
  "source": {
    "type": "TIKTOK_LEAD_ADS",
    "advertiserId": "VOTRE_ADVERTISER_ID",
    "formId": "VOTRE_FORM_ID"
  }
}

collectionEvidence conserve les choix PHONE et WHATSAPP réellement acceptés, la date de collecte avec fuseau, une validUntil au plus 30 jours après collecte et la noticeVersion de la mission. Refus et absence ne deviennent jamais un accord. /test vérifie le format sans créer de prospect ; un scope DRAFT n’autorise pas l’ingestion réelle.

Conservez les informations et preuves de collecte propres à chaque lead. Testez avec des données fictives via POST /webhooks/lead-gateway/test. Un test réussi ne crée aucun lead et ne débloque pas les envois réels : une validation opérationnelle de France Papers reste nécessaire.

Lead Ingestion API

Automatisez la remontée de vos prospects vers le CRM France Papers avec notre Gateway haute disponibilité sécurisée par token.

Conformité RGPD

Chaque lead doit inclure rgpdConsent: true et ses éléments de collecte dans collectionEvidence. Ce booléen seul ne constitue pas une preuve. Le site source et les canaux doivent correspondre au périmètre de votre contrat.

Votre première connexion

Récupérez votre clé dans votre espace fournisseur, puis envoyez un payload de test à POST /webhooks/lead-gateway/test. Ce test ne crée aucun lead. Après un résultat VALID, utilisez l’endpoint ingest.

collectionEvidence contient collectedAt (date ISO de collecte), noticeVersion, proofReference, recipient: FRANCE_PAPERS et contactChannels (PHONE, EMAIL, SMS ou WHATSAPP), validUntil, noticeText, affirmativeAction, services, recipientLegalName, withdrawalMethod et proofAccessMethod. Pour une collecte indépendante, transmissionAuthorized: true est également requis. France Papers archive le texte déclaré et les coordonnées concernées. Conservez aussi la preuve originale de l’action effectuée ; son authenticité ne se déduit pas de la réception technique.

Une réception SUCCESS fournit privacyUrl : remettez ce lien privé au prospect pour la consultation gratuite de sa preuve et le retrait. Ne le publiez pas et ne le placez pas dans vos outils analytiques. Signalez aussi les retraits reçus dans vos propres outils via POST /webhooks/lead-gateway/withdraw avec externalId ; les retraits notifiés par France Papers sont à confirmer dans votre portail après propagation.

campaignName, externalId et la source configurée (sourceUrl ou source native) sont requis. Une réponse 400 indique les corrections nécessaires ; 401 indique un accès invalide ou suspendu. DUPLICATE ne crée aucun nouveau lead.

Authentification

Pour authentifier vos requêtes, vous devez passer votre clé API unique dans le header x-api-key.

# Header HTTP
x-api-key: sg_partner_votre_token_confidentiel

Remonter un Lead

POST/webhooks/lead-gateway/ingest

Paramètres du Body (JSON)

ChampTypeRequisDescription
firstNamestringOuiPrénom du prospect
lastNamestringOuiNom du prospect
phonestringOuiMobile (Format international +33...)
rgpdConsentbooleanOuiAttestation déclarée ; compléter avec collectionEvidence.
externalIdstringOuiRéférence du lead dans votre système — requise pour le nouveau parcours

Intégration Code

Node.jsPHP / CURLPython

// Exemple d'implémentation en Node.js (Fetch)
const sendLead = async () => {
  const URL = 'https://api.testbed.francepapers.fr/webhooks/lead-gateway/ingest';
  const API_KEY = 'votre_cle_api_ici';

  const payload = {
    firstName: 'Jean',
    lastName: 'Dupont',
    phone: '+33767535310',
    email: 'jean.dupont@email.com',
    rgpdConsent: true,
    externalId: 'votre_ref_interne_123',
    campaignName: 'campagne_autorisee',
    sourceUrl: 'https://votre-site.fr/formulaire',
    collectionEvidence: {
      collectedAt: 'DATE_ISO_ORIGINALE_DU_FORMULAIRE',
      noticeVersion: 'version_de_votre_formulaire',
      proofReference: 'reference_de_la_preuve_conservee',
      validUntil: 'DATE_ISO_ORIGINALE_DE_VALIDITE',
      noticeText: 'Texte exact présenté au prospect', affirmativeAction: 'Case dédiée cochée',
      services: 'Services expressément autorisés', recipientLegalName: 'ASTAURIA exploitant France Papers',
      withdrawalMethod: 'Lien de retrait gratuit', proofAccessMethod: 'Lien de preuve gratuit',
      recipient: 'FRANCE_PAPERS',
      contactChannels: ['PHONE'],
      // Requis pour les fournisseurs indépendants :
      transmissionAuthorized: true
    }
  };

  const res = await fetch(URL, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': API_KEY
    },
    body: JSON.stringify(payload)
  });

  return await res.json();
};

Gestion des Erreurs

401 Unauthorized

La clé API est invalide, expirée ou désactivée.

200 Duplicate

Le lead a déjà été envoyé au cours des 30 derniers jours.