API Hardskills

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.
Exemple de Réponse
{
    "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}

Exemple de Réponse
{
    "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 }
}
Exemple de Réponse
{
    "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

Exemple de Réponse
{
    "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}

Exemple de Réponse
{
    "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'.
Exemple de Réponse (Standard)
{
    "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).
Exemple de Réponse
{
    "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.
Exemple de Réponse
{
    "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}

```

Top