Sommaire

v1 · Bêta

API Partenaire

Intégration de l'API Candidate Intelligence

Donnez plus de confiance aux recruteurs avant les entretiens

Lancez des rapports Candidate Intelligence directement dans votre ATS pour vérifier les informations candidat, détecter des signaux inattendus et générer des questions d'entretien en quelques secondes.

Demander l'accès API

Idéal pour

Systèmes de suivi des candidatures (ATS)

CRM de recrutement

Sites d'emploi

Plateformes de talents internes

Cabinets de chasse de têtes

Éditeurs de solutions RH

Avantages partenaire

Pourquoi intégrer Candidate Intelligence ?

Offrez à vos clients un contexte supplémentaire avant les entretiens tout en créant de la valeur au sein de votre plateforme.

📈

Renforcer l'engagement des recruteurs

Gardez les recruteurs dans votre ATS grâce à la vérification des candidats, la préparation d'entretien et des insights de recrutement directement dans les profils.

💰

Créer une nouvelle source de revenus

Proposez des rapports Candidate Intelligence à vos clients et générez des revenus récurrents via le programme partenaire.

Différencier votre plateforme

Démarquez-vous des ATS et solutions de recrutement concurrentes avec des capacités Candidate Intelligence intégrées.

🔍

Aucune recherche supplémentaire

Aidez les recruteurs à découvrir des informations pertinentes au-delà du CV sans quitter leur flux de travail.

🎯

Améliorer la qualité du recrutement

Aidez recruteurs et hiring managers à prendre des décisions plus éclairées grâce à un contexte au-delà du CV, des constats vérifiés, des risques potentiels et les points à valider.

Intégration rapide

L'implémentation typique ne nécessite que quelques endpoints API et peut être réalisée en moins d'une journée.

Parcours d'intégration

1

Obtenir l'approbation et recevoir une clé API

Demandez l'accès à TieTalent. Une fois approuvé, vous recevez une clé API (préfixe ats_) pour votre intégration.

2

Ajouter un bouton dans les profils candidats

Ajoutez un bouton « Lancer le rapport Candidate Intelligence » dans les profils candidats. Au clic, il devient « Génération du rapport en cours... » pendant la génération. Une fois prêt, le rapport s'ouvre automatiquement et le bouton devient « ✕ Fermer le rapport ». À la fermeture, il repasse à « Voir le rapport Intelligence » pour rouvrir un rapport déjà généré.

3

Appeler l'API TieTalent au clic

POST vers /api/v1/analyses avec le candidat, le client (recruteur) et la langue. Utilisez vos propres identifiants externes sur client.id et candidate.id.

4

TieTalent génère le rapport

L'analyse s'exécute en arrière-plan. Interrogez GET /api/v1/analyses/'{'id'}' avec l'id retourné — attendez au moins 10 secondes entre les requêtes tant que le statut est queued ou processing (voir l'en-tête Retry-After). Appelez DELETE sur le même chemin pour annuler si le recruteur quitte le profil.

5

Afficher le rapport dans le profil candidat

Affichez le JSON du rapport dans votre interface (voir la Référence de l'objet rapport), ou ouvrez le rapport hébergé complet via le lien signé de metadata.pdf_download_url — la vue hébergée propose aussi l'export PDF.

Performances et latence

Candidate Intelligence est conçu pour offrir une expérience réactive directement dans les flux de travail des recruteurs.

Action

Temps de réponse typique

Rapport existant trouvé

< 1 seconde

Génération d'un nouveau rapport

30–60 secondes

Logique de réutilisation des rapports

Les rapports sont identifiés de façon unique par plateforme + entreprise + candidat.

Le cache est limité par recruteur : votre clé API identifie l'intégration partenaire, et client.id identifie le recruteur (utilisateur) au sein de votre plateforme. Des client.id différents ne partagent pas le cache, même avec la même clé API.

Même entreprise cliente + même candidat → rapport existant retourné instantanément, sans frais
Entreprise cliente différente + même candidat → nouveau rapport généré et facturé séparément
Même entreprise cliente + candidat différent → nouveau rapport généré et facturé

Champs de la clé de cache

candidate.idVotre identifiant candidat externe
candidate.first_name + candidate.last_nameNom du candidat (normalisé)
candidate.companyEntreprise actuelle (normalisée)
candidate.locationLocalisation (normalisée)
candidate.roleRôle ou intitulé du poste (normalisé)

Hors clé de cache

candidate.cvTexte de CV optionnel — utilisé uniquement lors d'exécutions fraîches. Modifier seul le CV n'invalide pas le cache.
languageLangue du rapport demandée. Utilisez force_refresh: true si vous avez besoin d'un rapport dans une autre langue.

Les rapports en cache sont réutilisés pendant 6 mois. Les analyses terminées plus anciennes ne sont pas renvoyées depuis le cache.

Forcer l'actualisation

Définissez force_refresh: true sur POST /api/v1/analyses pour ignorer le cache et exécuter le pipeline complet — enrichissement, signaux en direct et génération du rapport LLM.

Omettez force_refresh ou définissez-le à false pour autoriser la réutilisation du cache (par défaut).

Quand définir force_refresh: true

Le recruteur demande explicitement une intelligence mise à jour ou actualisée

Seul le texte du CV a changé tandis que les champs du profil sont restés identiques

Vous avez besoin d'un rapport dans une langue différente d'une exécution en cache précédente

Vous souhaitez relancer l'enrichissement et les signaux en direct indépendamment du cache

Requête d'analyse fraîche

{
  "language": "en",
  "client": {
    "id": "client_company_123",
    "first_name": "Jane",
    "last_name": "Smith",
    "company": "Acme Recruiting"
  },
  "candidate": {
    "id": "candidate_456",
    "first_name": "John",
    "last_name": "Doe",
    "company": "Example Company",
    "location": "London, UK",
    "role": "Software Engineer"
  },
  "force_refresh": true
}

Authentification

Approbation requise : les clés API sont délivrées uniquement aux plateformes partenaires approuvées. Incluez votre clé à chaque requête ; ne l'exposez jamais dans du code côté client ni dans des dépôts publics.

En-têtes HTTP

X-API-Key: ats_your_api_key_here
Content-Type: application/json

Créer une analyse

Champs optionnels du corps : candidate.cv (CV en texte brut, utilisé uniquement lors d'exécutions fraîches) et force_refresh (booléen, false par défaut — voir Forcer l'actualisation).

POST/api/v1/analyses
{
  "language": "en",
  "client": {
    "id": "client_company_123",
    "first_name": "Jane",
    "last_name": "Smith",
    "company": "Acme Recruiting"
  },
  "candidate": {
    "id": "candidate_456",
    "first_name": "John",
    "last_name": "Doe",
    "company": "Example Company",
    "location": "London, UK",
    "role": "Software Engineer",
    "cv": "Optional plain-text CV content…"
  },
  "force_refresh": false
}

force_refresh (optionnel, false par défaut) ignore la réutilisation des rapports et génère toujours un nouveau rapport — le nouveau rapport est facturé. Omettez-le sauf si le recruteur demande explicitement une actualisation.

202 Accepted

L'en-tête Location pointe vers GET /api/v1/analyses/'{'id'}'. Retry-After: 10 indique quand effectuer le prochain polling.

202 Accepted
{
  "id": "cmqp23kgg00067gk0rh6jol5o",
  "status": "queued",
  "candidate_id": "candidate_456",
  "created_at": "2026-06-29T12:00:00.000Z"
}

Polling et résultats progressifs

Après un POST renvoyant 202 Accepted, interrogez GET /api/v1/analyses/'{'id'}' avec le même en-tête X-API-Key. Utilisez l'id de la réponse de création.

Tant que le statut est queued ou processing, chaque réponse GET inclut Retry-After: 10 — attendez au moins 10 secondes avant la requête suivante.

Arrêtez le polling lorsque le statut est completed, failed ou canceled.

GET/api/v1/analyses/'{'id'}'
{
  "id": "cmqp23kgg00067gk0rh6jol5o",
  "status": "processing",
  "candidate_id": "candidate_456",
  "stage": "enrichment",
  "created_at": "2026-06-29T12:00:00.000Z",
  "updated_at": "2026-06-29T12:00:20.000Z",
  "quick_signal": {
    "level": "Green",
    "reason": "Identity supported by multiple matching signals.",
    "identityConfidence": "Medium"
  },
  "signals": [
    {
      "statement": "Senior engineer at Example Company since 2021.",
      "sourceType": "web",
      "sourceUrl": "https://example.com/…",
      "reliability": "High"
    }
  ],
  "report": null,
  "metadata": null,
  "error": null
}

Champs renseignés pendant le traitement

quick_signalSignal d'identité préliminaire (Green, Orange ou Red) avec une courte explication — disponible dès le début de l'enrichissement.
signalsSignaux web en direct découverts pendant l'enrichissement. Le tableau s'enrichit au fur et à mesure des recherches externes.
stageÉtape actuelle du pipeline : identity → enrichment → report → done.
reportRapport Candidate Intelligence complet — renseigné uniquement lorsque le statut est completed.
metadataMétadonnées du rapport — renseignées uniquement lorsque le statut est completed. Incluent le lien signé vers le rapport hébergé (pdf_download_url) et les indicateurs de réutilisation cached / cached_at.

Valeurs de statut

queuedAcceptée et en attente de démarrage.
processingEn cours — interrogez pour les mises à jour de quick_signal, signals et stage.
completedRapport prêt — report et metadata sont renseignés.
failedAnalyse échouée — error est renseigné.
canceledAnalyse annulée via DELETE /api/v1/analyses/'{'id'}' ou état terminal d'annulation atteint.

Annuler une analyse

DELETE /api/v1/analyses/'{'id'}' arrête une analyse en file d'attente ou en cours lorsqu'un recruteur quitte le profil candidat ou ferme un rapport en génération. Utilisez le même en-tête X-API-Key que pour POST et GET.

Si l'analyse est déjà completed, failed ou canceled, l'endpoint renvoie la ressource actuelle sans modification — aucun frais supplémentaire ni effet de bord.

DELETE/api/v1/analyses/'{'id'}'
// Aucun corps de requête — en-tête X-API-Key uniquement

200 OK

Renvoie la ressource d'analyse avec le statut canceled. Des quick_signal ou signals partiels peuvent être présents si l'annulation a eu lieu en cours de pipeline. Arrêtez le polling dès que le statut est canceled.

200 OK
{
  "id": "cmqp23kgg00067gk0rh6jol5o",
  "status": "canceled",
  "candidate_id": "candidate_456",
  "stage": "enrichment",
  "created_at": "2026-06-29T12:00:00.000Z",
  "updated_at": "2026-06-29T12:00:25.000Z",
  "quick_signal": null,
  "signals": [],
  "report": null,
  "metadata": null,
  "error": null
}

Analyse terminée

Retournée lorsque le statut est completed. Le rapport ci-dessous est abrégé — consultez la Référence de l'objet rapport pour la liste complète des champs.

Rapport frais (metadata.cached: false)

JSON200 OK
{
  "id": "clx_analysis_id",
  "status": "completed",
  "candidate_id": "candidate_456",
  "stage": "done",
  "created_at": "2026-06-29T12:00:00.000Z",
  "updated_at": "2026-06-29T12:00:45.000Z",
  "quick_signal": {
    "level": "Green",
    "reason": "Identity supported by multiple matching signals.",
    "identityConfidence": "Medium"
  },
  "signals": [
    {
      "statement": "…",
      "sourceType": "web",
      "sourceUrl": "https://example.com/…",
      "reliability": "High"
    }
  ],
  "report": {
    "candidateName": "John Doe",
    "profileHeadline": "Software Engineer",
    "profileCompany": "Example Company",
    "profileLocation": "London, UK",
    "identity": {
      "status": "Confirmed",
      "confidence": "High",
      "confidenceReason": "…",
      "risk": { "level": "Low", "reason": "…" }
    },
    "sourcesCheckedCount": 24,
    "recommendation": {
      "decision": "Go with validation",
      "confidence": "Medium",
      "confidenceNote": "Identity verified · signals consistent",
      "reason": "…",
      "evidence": ["…"],
      "nextStepPills": [
        { "variant": "confirmed", "label": "Role and tenure verified" },
        { "variant": "validate", "label": "Validate team leadership scope" }
      ]
    },
    "summary": "…",
    "externalProfileSummary": "…",
    "externalProfileTags": [
      { "kind": "catalog", "id": "linkedin_verified" },
      { "kind": "catalog", "id": "signals_highly_consistent" },
      { "kind": "custom", "group": "source_presence", "label": "Open-source contributor" }
    ],
    "strengths": ["…"],
    "signals": {
      "verified": [
        {
          "statement": "…",
          "sourceType": "web",
          "sourceReference": "…",
          "reliability": "High"
        }
      ],
      "weak": [],
      "unverifiedClaims": [],
      "noSignificantExternalData": false
    },
    "highImpactFindings": [
      {
        "type": "Career",
        "title": "…",
        "summary": "…",
        "evidenceBadge": "validate",
        "confidence": "Medium",
        "polarity": "Concern"
      }
    ],
    "topDecisionDrivers": ["…"],
    "expectationGap": {
      "expectedSignals": ["…"],
      "missingOrWeaker": ["…"],
      "assessment": "…"
    },
    "impactAssessment": {
      "summary": "…",
      "riskLevel": "Low",
      "overallRiskLabel": "Low validation needed",
      "implications": ["…"]
    },
    "whatToValidate": ["…"],
    "nextStep": {
      "action": "…",
      "focusAreas": ["…"],
      "reasoning": "…"
    },
    "alertLevel": "Green",
    "externalDataConfidence": "Medium"
  },
  "metadata": {
    "report_id": "clx_analysis_id",
    "candidate_id": "candidate_456",
    "language": "en",
    "generated_at": "2026-06-29T12:00:45.000Z",
    "pdf_download_url": "https://intelligence.tietalent.com/api/ats/reports/{id}/pdf?sig=…",
    "cached": false,
    "cached_at": null
  },
  "error": null
}

Rapport en cache (metadata.cached: true)

JSON200 OK
{
  "id": "clx_new_analysis_id",
  "status": "completed",
  "candidate_id": "candidate_456",
  "stage": "done",
  "created_at": "2026-07-15T12:00:00.000Z",
  "updated_at": "2026-07-15T12:00:00.500Z",
  "quick_signal": { "…": "…" },
  "signals": [{ "…": "…" }],
  "report": { "…": "…" },
  "metadata": {
    "report_id": "clx_new_analysis_id",
    "candidate_id": "candidate_456",
    "language": "en",
    "generated_at": "2026-07-15T12:00:00.500Z",
    "pdf_download_url": "https://intelligence.tietalent.com/api/ats/reports/{id}/pdf?sig=…",
    "cached": true,
    "cached_at": "2026-07-15T12:00:00.500Z"
  },
  "error": null
}

L'objet metadata

metadata.pdf_download_url est un lien signé qui ouvre le rapport TieTalent hébergé complet (le même design de rapport que l'application web) ; l'export PDF est téléchargeable depuis cette vue. Traitez ce lien comme confidentiel — toute personne qui le détient peut ouvrir le rapport.

metadata.cached vaut true lorsqu'un rapport existant a été réutilisé au lieu d'en générer un nouveau (voir la Logique de réutilisation des rapports) ; cached_at porte alors l'horodatage de la réutilisation, sinon il vaut null.

Verdicts et compatibilité

report.recommendation.decision est le verdict principal du rapport. Il s'agit toujours de l'une des quatre valeurs ci-dessous.

recommendation.decision — valeurs possibles

"Proceed with confidence"
"Go with validation"
"Requires Validation (Signals flagged)"
"Requires Validation (Insufficient data)"

Associez chaque verdict à l'un des trois états d'interface :

Mapping suggéré (JavaScript)

function toUiState(decision) {
  switch (decision) {
    case "Proceed with confidence":
      return "proceed";
    case "Go with validation":
      return "validation";
    case "Requires Validation (Signals flagged)":
    case "Requires Validation (Insufficient data)":
      return "requires_validation";
    default:
      return "requires_validation";
  }
}
Bonne pratique : effectuez un switch sur la chaîne complète avec une valeur par défaut sûre requires_validation afin qu'une valeur inattendue se dégrade proprement au lieu de casser votre interface.

Référence de l'objet rapport

report n'est renseigné que lorsque le statut est completed. Les noms de champs sont en camelCase. La structure reflète le design de rapport actuel utilisé sur toutes les surfaces TieTalent Intelligence (application web, extension et rapport hébergé).

Compatibilité ascendante : les champs optionnels peuvent être absents et de nouveaux champs peuvent être ajoutés au fil du temps. Ignorez les champs inconnus et traitez tous les champs optionnels comme nullables.

Champs principaux (toujours présents)

candidateNameNom du candidat tel que résolu par l'analyse.
identityRésolution d'identité — status (Confirmed, Likely, Ambiguous, Unknown), confidence, confidenceReason et risk (level, reason).
recommendationLe verdict — decision (voir Verdicts et compatibilité), confidence, reason, evidence[], confidenceNote (court titre d'évidence) et nextStepPills[] (pastilles d'état d'évidence avec variant et label).
summaryParagraphe de synthèse.
externalProfileSummarySynthèse narrative de l'empreinte externe du candidat.
strengthsPoints forts clés (tableau de chaînes).
signalsInstantané des signaux — verified[], weak[], unverifiedClaims[] et noSignificantExternalData.
highImpactFindingsConstats critiques pour la décision. Chacun comporte type, summary et confidence, plus title, evidenceBadge, polarity et sourceReference en option.
topDecisionDriversLes signaux ayant le plus influencé le verdict (tableau de chaînes).
expectationGapSignaux attendus vs trouvés — expectedSignals[], missingOrWeaker[] et assessment.
impactAssessmentImpact sur le recrutement — summary, riskLevel et implications[], plus overallRiskLabel, bestSuited[] et considerCarefully[] en option.
whatToValidatePoints concrets à valider en entretien (tableau de chaînes).
nextStepProchaine étape suggérée — action, focusAreas[] et reasoning.
alertLevelNiveau d'alerte global — Green, Yellow, Orange ou Red.
externalDataConfidenceConfiance dans les données externes du rapport — High, Medium ou Low.

Champs optionnels

Ces champs peuvent être absents. Traitez-les comme nullables et ignorez tout champ que votre interface n'utilise pas.

profileHeadline / profileCompany / profileLocationLignes d'en-tête pour l'affichage — poste/titre, entreprise actuelle et localisation.
sourcesCheckedCountNombre de résultats de recherche externes consultés pour le rapport (défini par le pipeline).
externalProfileTagsTags décrivant l'empreinte externe du candidat — voir Tags ci-dessous.
bestFitContext / bestFitTagsNarratif et tags best-fit — voir Tags ci-dessous.
surprisingInsightsCartes d'insights (title, text, source, notOnCV?).
keyTakeawaysListes standsOut[] et needsChecking[] d'éléments (label, detail).
claimsVsSignalsVérification affirmation par affirmation — (claim, confirmed, assessment).
interviewQuestionsQuestions d'entretien suggérées — (question, hint).
technicalIntelligenceEmpreinte technique pour les rôles techniques — profileFound, signalStrength, observations[], repositories[], risks[] et impactAssessment.
sensitiveUnverifiedSignalsSignaux sensibles avec statut d'attribution. À manipuler avec précaution et à ne jamais présenter comme un fait établi.

Envoyer un avis sur un rapport

POST /api/v1/analyses/'{'id'}'/feedback permet à vos recruteurs de noter un rapport terminé — de 1 à 5 étoiles, avec des tags optionnels et un texte libre optionnel — afin que TieTalent puisse suivre la qualité des rapports de votre côté de l'intégration.

L'endpoint effectue un upsert sur client.id et l'id du rapport : envoyer à nouveau une requête pour le même client et le même rapport écrase la note, les tags et le texte précédents — il n'y a pas d'historique des révisions.

POST/api/v1/analyses/'{'id'}'/feedback
{
  "client": {
    "id": "client_company_123",
    "first_name": "Jane",
    "last_name": "Smith",
    "company": "Acme Recruiting"
  },
  "rating": 4,
  "feedback": "Helped me shortlist quickly, would have liked more sourcing links.",
  "tags": ["saved_me_time", "good_signal_quality"]
}

Champs de la requête

clientRequis. Même objet client que POST /api/v1/analyses — identifie lequel de vos utilisateurs donne son avis.
ratingRequis. Entier de 1 à 5.
feedbackOptionnel. Commentaire libre, jusqu'à 2000 caractères.
tagsOptionnel. Jusqu'à 5 identifiants de tags canoniques du catalogue ci-dessous — des valeurs invalides ou une note hors plage renvoient une erreur 4xx explicite.

Catalogue des tags de feedback

Les tags sont regroupés par tranche de note et changent selon la note envoyée — construisez votre propre interface, mais n'envoyez que les identifiants canoniques afin que les avis restent analysables entre les langues.

Identifiants de tags canoniques par tranche de note

// 1-2 stars
missing_info · something_was_wrong · signals_felt_weak
too_generic · hard_to_trust

// 3 stars
useful_but_missing_detail · right_idea_wrong_emphasis
some_signals_felt_off · wanted_more_sources

// 4-5 stars
saved_me_time · helped_me_decide · good_signal_quality
easy_to_read · trustworthy

200 OK

Renvoie l'avis enregistré, avec la note, les tags et le texte actuellement en base pour ce client et ce rapport.

200 OK
{
  "report_id": "cmqp23kgg00067gk0rh6jol5o",
  "rating": 4,
  "feedback": "Helped me shortlist quickly, would have liked more sourcing links.",
  "tags": ["saved_me_time", "good_signal_quality"],
  "updated_at": "2026-07-21T12:00:00.000Z"
}

Confidentialité et sécurité

Les rapports sont des outils d'aide à la décision uniquement et ne doivent pas servir de seule base aux décisions d'embauche. Un examen humain et une évaluation indépendante sont toujours requis.
Chaque intégration partenaire est isolée par clé API — vous ne pouvez accéder qu'aux analyses créées avec vos identifiants.
Utilisez client.id et candidate.id pour associer les analyses aux enregistrements de votre ATS.
Le texte de CV optionnel dans la requête est utilisé pour l'analyse et n'est pas stocké comme document distinct ; le rapport généré (qui peut refléter le contenu du CV) est conservé chiffré afin de pouvoir être restitué à votre intégration.
Les données sont stockées dans une infrastructure en région UE avec chiffrement au repos.
Candidate Intelligence fournit des recommandations et signaux de validation mais ne prend pas de décisions d'embauche automatisées au nom des utilisateurs.
Le traitement des données respecte les principes de minimisation et de limitation des finalités.

⚖️ Avis de conformité IA

Candidate Intelligence est conçu pour accompagner la prise de décision des recruteurs, pas pour la remplacer. Les décisions d'embauche restent de la responsabilité de l'employeur et doivent toujours inclure un examen humain et une supervision appropriés.

Programme partenaire

Commencez à intégrer Candidate Intelligence

Demandez l'accès et nous activerons vos identifiants API partenaire. L'intégration prend généralement moins d'une journée.