v1.0.0
API Headlinker
34 outils pour piloter ta plateforme de recrutement depuis Claude Desktop, Cursor ou tout client compatible MCP.
Quickstart
Connecte ton client MCP en 30 secondes — auth OAuth automatique.
Claude.ai (Web, Desktop, mobile)
- Ouvre Settings → Connectors → Add custom connector
- Colle l'URL :
https://headlinker.com/api/mcp - Suis le flow OAuth (login Headlinker + autorisation)
Claude Code
Terminal
claude mcp add headlinker --transport http https://headlinker.com/api/mcpLe navigateur s'ouvre automatiquement pour te faire signer la connexion.
Cursor / autres clients MCP
mcp.json
{
"mcpServers": {
"headlinker": {
"url": "https://headlinker.com/api/mcp"
}
}
}Le client lance le flow OAuth la première fois — pas de clé à coller.
Utilisation
Demande simplement à ton assistant : « Montre-moi mes missions actives » ou « Crée une mission de Développeur React ».
Authentification
OAuth 2.1 + Dynamic Client Registration — conforme MCP Authorization spec 2025-06-18.
Headlinker implémente le flow OAuth complet : ton client (Claude.ai, Claude Code, Cursor…) s'enregistre automatiquement via RFC 7591 Dynamic Client Registration, puis utilise PKCE S256 pour échanger un code contre un token JWT.
Endpoint MCP :
https://headlinker.com/api/mcpMéthode :
POST (transport Streamable HTTP).Permission requise :
mcp sur ton compte Headlinker. Si tu ne la vois pas, contacte le support.Discovery endpoints (RFC 9728 / RFC 8414) :
- /.well-known/oauth-protected-resource
- /.well-known/oauth-authorization-server
Token TTL : access 1h (auto-refresh par le client), refresh 30 jours (rotation à chaque usage).
Pagination
Tous les endpoints de liste supportent la pagination.
Les paramètres
page (défaut : 1) et limit (défaut : 20, max : 100) sont disponibles sur tous les outils de recherche/liste.La réponse inclut un objet
pageInfo :Format de réponse paginée
{
"items": [...],
"pageInfo": {
"page": 1,
"limit": 20,
"count": 142,
"totalPages": 8
}
}Référence des outils
34 outils répartis en 13 catégories.
Profil
Gestion de ton profil recruteur.
get_my_profile
Récupère ton profil recruteur complet (infos, secteurs, métiers, préférences).
Aucun paramètreupdate_profile
Met à jour ton profil recruteur.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
firstName | string | non | Prénom |
lastName | string | non | Nom |
phone | string | non | Téléphone |
title | string | non | Titre professionnel |
bio | string | non | Biographie |
url | string | non | URL LinkedIn |
city | string | non | Ville |
businessName | string | non | Nom de l'entreprise |
openToSource | boolean | non | Ouvert au sourcing |
Référentiels
Résolution des IDs de secteurs et de métiers Headlinker.
list_sectors
Liste les secteurs Headlinker et leurs IDs.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Filtre littéral par nom, 100 caractères max |
list_occupations
Liste les métiers Headlinker et leurs IDs.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Filtre littéral par nom, 100 caractères max |
Missions
Recherche et gestion des missions partagées (SearchedProfiles).
search_missions
Recherche des missions partagées (SearchedProfiles) publiées et actives.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Recherche textuelle (nom, description) |
sectorIds | string[] | non | Filtrer par IDs de secteurs |
occupationId | string | non | Filtrer par ID de métier |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
mine | boolean | non | Uniquement mes missions |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
get_mission
Récupère les détails d'une mission par son ID.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID de la mission |
create_mission
Crée une nouvelle mission (SearchedProfile).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
name | string | oui | Titre du poste |
description | string | non | Description du poste |
context | string | non | Contexte de la mission |
noGo | string | non | Critères rédhibitoires (NO GO) — compétences/expériences obligatoires sans lesquelles le candidat sera refusé |
sectorIds | string[] | non | IDs des secteurs |
occupationId | string | non | ID du métier |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
baseSalaryMin | number | non | Salaire minimum |
baseSalaryMax | number | non | Salaire maximum |
bountyStart | number | non | Prime au démarrage |
bountyConfirm | number | non | Prime à la confirmation |
client | string | non | Nom du client |
urgent | boolean | non | Mission urgente |
update_mission
Met à jour une de tes missions.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID de la mission |
name | string | non | Titre du poste |
description | string | non | Description |
context | string | non | Contexte |
noGo | string | non | Critères rédhibitoires (NO GO) |
sectorIds | string[] | non | IDs des secteurs |
occupationId | string | non | ID du métier |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
bountyStart | number | non | Prime au démarrage |
bountyConfirm | number | non | Prime à la confirmation |
urgent | boolean | non | Mission urgente |
Candidats partagés
Recherche et gestion des candidats partagés (AvailableProfiles).
search_candidates
Recherche des candidats partagés (AvailableProfiles) publiés et actifs.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Recherche textuelle |
sectorIds | string[] | non | Filtrer par IDs de secteurs |
occupationIds | string[] | non | Filtrer par IDs de métiers |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
mine | boolean | non | Uniquement mes candidats |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
get_candidate_profile
Récupère les détails d'un candidat partagé par son ID.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID de l'AvailableProfile |
create_candidate_profile
Crée un nouveau candidat partagé (AvailableProfile).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
name | string | oui | Titre du profil candidat |
candidateId | string | oui | ID du candidat |
description | string | non | Description du candidat |
context | string | non | Contexte |
sectorIds | string[] | non | IDs des secteurs |
occupationIds | string[] | non | IDs des métiers |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
baseSalaryMin | number | non | Salaire minimum souhaité |
baseSalaryMax | number | non | Salaire maximum souhaité |
bounty | number | non | Montant de la prime |
update_candidate_profile
Met à jour un de tes candidats partagés.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID de l'AvailableProfile |
name | string | non | Titre du profil |
description | string | non | Description |
context | string | non | Contexte |
sectorIds | string[] | non | IDs des secteurs |
occupationIds | string[] | non | IDs des métiers |
experience | enum | non | Niveau d'expérience : '<2', '2/4', '3/5', '5/8', '8/10', '>10' |
bounty | number | non | Montant de la prime |
Gestion candidats
Gestion de ta base de candidats interne.
create_candidate
Crée un nouveau candidat dans ta base.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
firstName | string | oui | Prénom |
lastName | string | oui | Nom |
email | string | oui | |
phone | string | non | Téléphone |
url | string | non | URL LinkedIn |
resumeUrl | string | non | URL du CV |
search_my_candidates
Recherche dans tes candidats.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Recherche par nom ou email |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
Contacts
Suivi des processus de recrutement en cours.
list_contacts
Liste TES contacts : tous les processus de recrutement en cours dont tu es partie prenante (candidats recommandés sur des missions, candidats reçus sur tes missions).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
status | string | non | Filtrer par statut exact (proposed, accepted, inProcess, underOffer, trainingStarted, processSucceeded...) |
progress | string | non | Filtrer par groupe de statuts : inProcess, contactInitiated, contactStopped, processEnded, processSucceeded |
needsMyAnswer | boolean | non | Uniquement les contacts qui attendent ta réponse (deadline imminente ou dépassée) |
q | string | non | Recherche textuelle |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
sort | string | non | Champ de tri(défaut : '-updatedAt') |
get_contact
Récupère les détails d'un contact par son ID.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID du contact |
advance_contact
Fait avancer un de tes contacts à l'étape suivante (équivalent des boutons de la page contact). Envoie de vrais emails à l'autre recruteur (et parfois au candidat) ; training_started et training_confirmed déclenchent la facturation.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
contactId | string | oui | ID du contact |
action | string | oui | accept_candidate, reject_candidate, in_process, not_in_process, under_offer, not_under_offer, offer_accepted, offer_refused, training_started, training_not_started, training_confirmed, training_not_confirmed, extend_deadline |
message | string | non | Message à l'autre recruteur, envoyé par email. Obligatoire sauf pour extend_deadline. |
refusalReason | string | non | Obligatoire pour reject_candidate : relevant-mybad, relevant-good-call, irrelevant |
trainingStartDate | date | non | Date de prise de poste estimée — obligatoire pour offer_accepted |
trainingEndDate | date | non | Date de fin de période d'essai estimée — obligatoire pour training_started |
recommend_candidate
Recommande un candidat existant ou nouveau sur une mission et démarre le processus de recrutement.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
missionId | string | oui | ID de la mission |
candidateId | string | non | ID d'un candidat existant de ta base |
firstName | string | non | Prénom d'un nouveau candidat |
lastName | string | non | Nom d'un nouveau candidat |
email | string | non | Email d'un nouveau candidat |
phone | string | non | Téléphone d'un nouveau candidat |
url | string | non | URL LinkedIn du candidat |
resumeUrl | string | non | URL du CV du candidat |
message | string | oui | Message anonyme au donneur d'ordre expliquant la pertinence du candidat |
Discussions
Messagerie entre membres Headlinker.
list_my_discussions
Liste tes discussions directes, de groupe ou privées.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
type | enum | non | 'direct', 'group' ou 'private' |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
create_discussion
Crée une discussion directe avec un membre Headlinker.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
participantEmail | string | oui | Email du membre |
send_message
Envoie un message dans une discussion existante.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
discussionId | string | oui | ID de la discussion |
content | string | oui | Contenu du message |
parentMessageId | string | non | ID du message parent pour répondre dans un fil |
read_discussion_messages
Lit les messages d'une discussion à laquelle tu participes.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
discussionId | string | oui | ID de la discussion |
limit | number | non | Nombre de messages (max 200)(défaut : 50) |
cursor | object | null | non | Curseur renvoyé par l'appel précédent |
Bons plans
Bons plans partagés entre membres.
list_deals
Liste les bons plans partagés par les membres.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
search | string | non | Recherche textuelle |
myDeals | boolean | non | Uniquement mes bons plans |
isActive | boolean | non | Filtrer par actif/inactif |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
create_deal
Crée un nouveau bon plan.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
title | string | oui | Titre du bon plan |
description | string | oui | Description |
url | string | non | URL du bon plan |
couponCode | string | non | Code promo |
Réductions partenaires
Réductions négociées avec des partenaires pour les membres Headlinker.
list_partner_discounts
Liste les réductions partenaires négociées pour les membres Headlinker.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
category | string | non | Filtrer par catégorie (sourcing, ats, training, automation, personality, jobBoards) |
Matchings
Matchings IA entre missions et candidats.
list_my_matchings
Liste tes matchings IA entre missions et candidats.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
type | enum | non | Type de matching : 'all', 'mission' (tu as la mission), 'candidate' (tu as le candidat)(défaut : 'all') |
minScore | number | non | Score minimum |
showViewed | boolean | non | Inclure les matchings déjà vus(défaut : true) |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
matching_feedback
Donne un feedback (positif/négatif) sur un matching.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID du matching |
feedback | enum | oui | 'positive' ou 'negative' |
reason | string | non | Raison du feedback |
Membres
Recherche de membres recruteurs sur la plateforme.
search_members
Recherche des membres recruteurs sur la plateforme.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | non | Recherche par nom, entreprise |
sectorIds | string[] | non | Filtrer par secteurs |
occupationIds | string[] | non | Filtrer par métiers |
openToSource | boolean | non | Filtrer les sourceurs disponibles |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
get_member
Récupère la fiche publique complète d'un membre recruteur actif.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
id | string | oui | ID du membre |
list_members_with_tool
Liste les membres recruteurs actifs qui utilisent un logiciel ou une catégorie de logiciels.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
toolId | string | non | ID exact d'un outil recruteur |
category | enum | non | ats, jobBoards, linkedin, sourcing, automation, personality, training ou transcription |
page | number | non | Numéro de page(défaut : 1) |
limit | number | non | Résultats par page (max 100)(défaut : 20) |
Assistant et skills
Installation de l'assistant IA et des skills Headlinker selon les droits du compte.
install_assistant
Récupère le prompt d'installation complet de l'assistant IA Headlinker.
Aucun paramètrelist_skills
Liste les skills Headlinker disponibles avec leur version et leurs plateformes.
Aucun paramètreinstall_skill
Récupère un skill Headlinker et toutes ses dépendances pour l'installer dans le projet.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
name | string | oui | Nom du skill renvoyé par list_skills |
os | enum | non | 'mac' ou 'windows'(défaut : 'mac') |
Retour produit
Remonte à l'équipe Headlinker ce qui bloque ou agace, pour améliorer l'outil.
send_feedback
Envoie un retour à l'équipe Headlinker (bug, fonctionnalité manquante, donnée fausse, résultat confus).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
category | enum | oui | 'bug', 'missing_feature', 'wrong_data', 'confusing' ou 'other' |
message | string | oui | Ce qu'il faudrait modifier, concret et actionnable |
context | string | non | Ce que tu essayais de faire, message d'erreur, IDs concernés |
tool | string | non | Nom de l'outil MCP concerné |