Documentation API Trimoji Resume
Dernière mise à jour : 22 Mai 2024
Cette API vous permet d'analyser (parser) des CVs, de créer des profils de candidats idéaux (appelés "Personi") et de scorer les CVs par rapport à ces profils pour optimiser votre processus de recrutement.
Configuration de vos variables
Avant d'utiliser cette API, veuillez configurer les variables suivantes :
base_url: L'URL de base de l'API (ex:https://integration.trimoji.fr/api/v1/resume).partner_token: Votre jeton d'authentification partenaire unique.customer_token: Votre clé API spécifique au client. Vous pouvez l'obtenir depuis le Panel Trimoji en cliquant sur le bouton "copier ma clé API".
Authentification
Toutes les requêtes API doivent inclure un en-tête (header) Authorization contenant votre partner_token.
Authorization: votre_partner_token_ici
Mécanisme de Callback (Webhook)
Plusieurs opérations, comme l'upload de CV, sont asynchrones. Lorsque le traitement est terminé, Trimoji envoie les résultats à l'URL callback_url que vous avez fournie.
Callback en cas de Succès
Les données envoyées à votre callback_url lors d'un parsing réussi suivront cette structure JSON :
{
"metadatas": {
"votre_cle": "valeur_personnalisee"
},
"resumeData": {
"firstname": "string",
"lastname": "string",
"email": "string",
"phone": "string",
"sex": "string ('f', 'm', ou 'other')",
"age": "integer | null",
"introduction": "string | null",
"address": "string | null",
"lat": "number | null",
"lon": "number | null",
"processed_at": "datetime_string"
},
"experiences": [
{
"poste": "string",
"company": "string",
"size": "string | null ('AE', 'MIE', 'TPE', ...)",
"start_date": "integer | null",
"end_date": "integer | null",
"duration": "integer | null",
"tasks": ["string"]
}
],
"diplomas": [
{ "name": "string", "date": "integer | null" }
],
"licenses": [
{ "name": "string", "desc": "string" }
],
"languages": [
{ "name": "string (code_iso)", "level": "string" }
],
"hobbies": ["string"],
"telework": "string | null ('Flexible', 'Full time', ...)"
}
Callback en cas d'Échec
Si le traitement du CV échoue, un callback sera envoyé contenant les détails de l'erreur et les journaux (logs) de traitement.
{
"metadatas": {
"uid": "user123",
"source": "webapp"
},
"error": {
"code": "PROCESSING_FAILED",
"message": "Échec de l'extraction des données du fichier fourni en raison d'un format invalide."
},
"logs": [
"[2024-05-21T10:00:05.123Z] [FILE_UPLOAD] [OK] File uploaded successfully.",
"[2024-05-21T10:00:06.456Z] [PROCESS_STARTED] [OK] Processing started.",
"[2024-05-21T10:00:15.789Z] [DATA_STRUCTURE_GENERATION] [ERROR] AI model returned an invalid structure."
]
}
API Parsing de CV
1. Uploader un CV
Envoyez un fichier de CV pour un parsing asynchrone. Les résultats seront envoyés au callback_url.
POST /upload
Paramètres du Body (form-data)
| Clé | Type | Description |
|---|---|---|
customer_token * |
Texte | Votre clé API client. |
uploaded_file * |
Fichier | Fichier du CV. Taille max : 5MB. Extensions autorisées : pdf, docx, png, jpg, jpeg, txt, webp, doc, rtf, pptx, otp, odp, odt. |
callback_url |
Texte | URL pour recevoir les résultats asynchrones. |
metadatas |
Texte | Chaîne JSON personnalisée pour le suivi (tracking). |
personi_id |
Texte | ID d'un Personi optionnel pour lier le CV. |
{
"success": true,
"message": "Success",
"data": {
"resume_id": "6ff7d7fe-8e53-4ddf-b68a-f9d4658f5bc8"
}
}
2. Récupérer les infos du CV
Récupère les informations parsées d'un CV en utilisant son resume_id.
GET /get/{customer_token}/{resume_id}
{
"success": true,
"message": "Success",
"data": {
"resumeData": {
"firstname": "Lou",
"lastname": "Pagès",
"email": "[email protected]",
"age": 22
},
"experiences": [ ... ],
"diplomas": [ ... ]
}
}
3. Récupérer les Logs du processus
Récupère les journaux de traitement pour un CV spécifique, utile pour déboguer les problèmes de parsing.
GET /get/{customer_token}/{resume_id}/logs
4. Supprimer un CV
Marque un CV comme supprimé (suppression logique / soft delete).
DELETE /delete/{customer_token}/{resume_id}
API Personi & Scoring
Un "Personi" est un profil de candidat idéal, défini au format JSON, par rapport auquel les CVs peuvent être scorés.
1. Créer un Personi
Crée un nouveau profil de candidat idéal. Vous pouvez fournir des critères détaillés manuellement, ou utiliser les drapeaux auto_weights et auto_keywords pour laisser notre IA les générer en fonction de la description du poste.
POST /personi/create
Paramètres du Body (JSON)
| Clé | Type | Description |
|---|---|---|
customer_token * |
String | Votre clé API client. |
custom_id * |
String | Un ID unique pour le Personi dans votre système. |
position * |
String | L'intitulé du poste. |
position_description * |
String | Description détaillée du rôle. |
company_description * |
String | Description de l'entreprise. |
sector * |
String | Le secteur d'activité du poste. |
company |
String | Le nom de l'entreprise. |
diploma |
String | Niveau de diplôme minimum requis. |
telework |
String | Politique de télétravail. Valeurs : FLEXIBLE, FULLTIME, HYBRID, NEVER, OCCASIONAL, ONDEMAND, PARTTIME, ROTATION. |
education_weight |
Number | Poids pour le score d'éducation (0-100). |
experience_weight |
Number | Poids pour le score d'expérience (0-100). |
skills_weight |
Number | Poids pour le score de compétences (0-100). |
knowledge_weight |
Number | Poids pour le score de connaissances (0-100). |
keywords_weight |
Number | Poids pour le score de mots-clés (0-100). |
geolocation |
Object | Critères de lieu : {"address": "string", "radius": number}. Rayon en km (défaut à 10). |
keywords |
Array | Mots-clés manuels : [{"word": "string", "is_mandatory": boolean}]. |
languages |
Array | Exigences linguistiques : [{"id": "iso_code", "level": "A1-C2"}]. Niveaux : A1, A2, B1, B2, C1, C2. |
driving_licenses |
Array | Permis de conduire requis, ex: ["B", "C1"]. |
auto_keywords |
Boolean | Mettre à true pour générer automatiquement les mots-clés. |
auto_weights |
Boolean | Mettre à true pour définir automatiquement les poids. |
Note sur les Poids : Si vous utilisez des poids manuels, la somme de tous les champs *_weight doit être exactement égale à 100. Si aucun poids n'est fourni et que auto_weights est faux, une distribution par défaut est utilisée.
Exemples de Requêtes
Génération Automatique (IA)
{
"custom_id": "MKT_ASSIST_001",
"customer_token": "votre_token",
"position": "Junior Marketing Assistant",
"position_description": "We are looking for...",
"company_description": "Innovate Corp...",
"sector": "Marketing",
"auto_keywords": true,
"auto_weights": true
}
Configuration Manuelle
{
"custom_id": "SENIOR_DEV_002",
"customer_token": "votre_token",
"position": "Senior Software Engineer",
"position_description": "Seeking experienced...",
"company": "Tech Solutions",
"telework": "HYBRID",
"education_weight": 10,
"experience_weight": 40,
"skills_weight": 20,
"knowledge_weight": 10,
"keywords_weight": 20,
"keywords": [
{"word": "Spring Boot", "is_mandatory": true}
],
"geolocation": { "address": "Paris", "radius": 20 }
}
{
"success": true,
"message": "Success",
"data": {
"personi_id": "f8e1e2c3-6337-4644-9fbf-7e382d089e3d"
}
}
2. Récupérer tous les Personis
Récupère la liste de tous les Personis actifs pour votre compte client. Si plusieurs Personis partagent le même custom_id, seul le plus récemment mis à jour est retourné.
GET /get/{customer_token}/personi/all
{
"success": true,
"message": "Success",
"data": [
{
"id": "f8e1e2c3...",
"custom_id": "SENIOR_DEV_002",
"name": "Senior Software Engineer Profile",
"created_at": "2024-05-15T10:00:00.000Z"
}
]
}
3. Récupérer les détails d'un Personi
Récupère la configuration complète et les détails d'un Personi spécifique.
GET /get/{customer_token}/personi/details/{personi_id}
{
"success": true,
"message": "Success",
"data": {
"id": "5e0273f8-8cfd-4673-9a89-3f4c934d3391",
"name": "Associate Product Manager | London",
"matching_settings": {
"weights": { "percent_experience": 44, "percent_hardskills": 19 },
"languages": [ { "lang": "Anglais", "is_mandatory": true } ],
"skills": [ { "skill": "active_listening", "value": 72 } ]
}
}
}
4. Scorer un CV contre un Personi
Calcule le score d'un CV spécifique par rapport à un Personi spécifique. Retourne optionnellement une explication HTML du score.
POST /matching
Paramètres du Body (JSON)
| Clé | Type | Description |
|---|---|---|
resume_id * |
String | ID du CV à scorer. |
personi_id * |
String ou Array | ID du/des Personi(s) contre le(s)quel(s) scorer. |
explainer |
String | Retourne l'explication du score. Valeurs : 'en', 'fr', 'es'. |
{
"success": true,
"message": "Success",
"data": {
"score": 60,
"personi_name": "Développeur chez Trimoji"
}
}
5. Scorer un CV contre tous les Personis
Calcule le score d'un CV par rapport à tous les Personis actifs de votre compte, retournant une liste triée des meilleures correspondances.
POST /matchingAll
Paramètres du Body (JSON)
| Clé | Type | Description |
|---|---|---|
resume_id * |
String | ID du CV à scorer. |
customer_token * |
String | Votre clé API client. |
limit |
Integer | Nombre max de résultats (défaut 100). |
{
"success": true,
"message": "Success",
"data": [
{
"personi_id": "839d2953...",
"personi_name": "SENIOR HR BUSINESS PARTNER...",
"score": 100
}
]
}
6. Scorer tous les CVs contre un Personi
Calcule le score de tous les CVs actifs de votre compte par rapport à un seul Personi.
POST /matchingAllResumes
Paramètres du Body (JSON)
| Clé | Type | Description |
|---|---|---|
customer_token * |
String | Votre clé API client. |
personi_id * |
String | ID du Personi contre lequel scorer. |
limit |
Integer | Nombre max de CVs à scorer. |
{
"success": true,
"message": "Success",
"data": [
{
"resume_id": "ac4d685e-c8e4-474d-a92a-16758009fafe",
"score": 100
},
{
"resume_id": "602d7fc9-2b85-4064-9ae6-ad5be08d5bcb",
"score": 95
}
]
}
7. Supprimer un Personi
Marque un Personi comme supprimé (suppression logique / soft delete).
DELETE /delete/{customer_token}/personi/{personi_id}
```