Skip to main content

Engagement contractuel

Le tracking des consultations de profils est une obligation contractuelle. Tout partenaire utilisant l’API Pylote s’engage à remonter chaque interaction recruteur via POST /partners/events.Le non-respect de cette obligation peut entraîner la suspension de l’accès API.

Pourquoi c’est obligatoire

Pylote offre aux freelances une fonctionnalité de visibilité : ils voient en temps réel quelles entreprises consultent leur profil, avec quels mots-clés et quelles actions. C’est une feature premium et un levier de conversion majeur pour Pylote. Sans le tracking des partenaires, les freelances ne voient rien des consultations passant par votre plateforme - ce qui dégrade l’expérience produit et la valeur de Pylote.

Ce que voit le freelance

Quand un recruteur de Lutessa consulte un profil via Agrega, le freelance voit dans son dashboard :
Lutessa via Agrega - a consulté votre profil - il y a 2h
Lutessa via Agrega - a téléchargé votre CV - il y a 1h

Events à tracker

Chaque interaction recruteur-freelance doit générer un appel à POST /partners/events.
ActionQuand l’envoyerObligatoire
profile_viewLe recruteur ouvre la fiche du freelanceOui
click_cvLe recruteur clique sur le lien CVOui
click_linkedinLe recruteur clique sur le lien LinkedInOui
click_phoneLe recruteur clique sur le téléphoneOui
click_emailLe recruteur clique sur l’emailOui
Au minimum, profile_view, click_cv et click_linkedin doivent être trackés. Les events click_phone et click_email sont également attendus si ces actions sont disponibles sur votre plateforme.

Implémentation

Pré-requis : whitelister le recruteur

Avant de pouvoir envoyer des events, le recruteur doit être dans la whitelist. Appelez POST /partners/whitelist une seule fois par recruteur :
curl -X POST "https://client-p.pylote.io/v1/partners/whitelist" \
  -H "x-api-key: votre-cle-partenaire" \
  -H "Content-Type: application/json" \
  -d '{
    "recruiterEmail": "marie.gilles@lutessa.com",
    "firstname": "Marie",
    "lastname": "Gilles",
    "company": "Lutessa"
  }'
Réponse :
{
  "whitelistedEmail": "lutessa.marieg@recruiter.pylote.io"
}
Le champ company doit être l’entreprise du recruteur (ex: “Lutessa”), pas celle du partenaire (ex: “Agrega”). C’est ce nom qui apparaît dans le dashboard du freelance.

Envoyer un event

curl -X POST "https://client-p.pylote.io/v1/partners/events" \
  -H "x-api-key: votre-cle-partenaire" \
  -H "Content-Type: application/json" \
  -d '{
    "recruiterEmail": "marie.gilles@lutessa.com",
    "freelanceId": "bc1d49cf-1cc7-4afe-92aa-0ebd545fcd12",
    "action": "profile_view"
  }'
Réponse :
{ "status": "ok" }
ChampDescription
recruiterEmailEmail réel du recruteur (doit être dans la whitelist)
freelanceIdChamp meta.id du JSON Resume retourné par GET /freelances
actionType d’interaction (profile_view, click_cv, click_linkedin, click_phone, click_email)

Exemple d’implémentation (Node.js)

async function trackProfileView(recruiterEmail, freelanceId) {
  await axios.post(
    `https://client-p.pylote.io/v1/partners/events`,
    {
      recruiterEmail,
      freelanceId,
      action: 'profile_view'
    },
    {
      headers: {
        'x-api-key': process.env.PYLOTE_PARTNER_KEY,
        'Content-Type': 'application/json'
      }
    }
  );
}

// Dans votre handler d'affichage de profil :
app.get('/freelance/:id', async (req, res) => {
  const freelance = await getFreelanceFromDB(req.params.id);
  const recruiter = req.user;

  // Tracker AVANT d'afficher le profil
  await trackProfileView(recruiter.email, freelance.pyloteId);

  res.render('freelance-profile', { freelance });
});

Flow complet

Obligations de suppression

En plus du tracking, vous devez supprimer les profils deleted de votre base dans un délai de 30 jours suivant la réception du statut de suppression. Quand GET /freelances retourne un profil avec meta.status: "deleted" :
  1. Supprimez le profil de votre base de données
  2. Supprimez toutes les données associées (CV caché, notes, etc.)
  3. Ne conservez que l’ID pour éviter de ré-importer le profil
Le délai de 30 jours est contractuel. Passé ce délai, Pylote se réserve le droit de suspendre l’accès API.
Les statuts de suppression sont :
  • account_deleted - le freelance a supprimé son compte
  • account_banned - compte banni par Pylote
  • account_excluded - compte exclu
  • account_invisible - profil rendu invisible
Utilisez la route GET /freelances/deleted-freelances pour récupérer la liste complète des profils à supprimer si vous avez manqué des synchronisations.

Destruction des données en cas de résiliation

En cas de résiliation du contrat de partenariat (quelle qu’en soit la cause) :
  1. Votre Clé API sera révoquée à la date d’effet de la résiliation
  2. Vous devez cesser toute utilisation de l’API immédiatement
  3. Vous devez détruire toutes les données issues de l’API stockées dans vos systèmes
Exception : les données déjà intégrées dans les profils de vos clients recruteurs et traitées sous leur propre responsabilité ne sont pas concernées par cette obligation de destruction.