> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voicehire.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Obtenir les détails d'un candidat

> Récupère les informations complètes d'un candidat incluant ses réponses d'entretien

## Paramètres

<ParamField path="candidate_id" type="string" required>
  Identifiant unique du candidat (UUID)
</ParamField>

## Réponse

<ResponseExample>
  ```json theme={null}
  {
    "candidate_id": "550e8400-e29b-41d4-a716-446655440000",
    "campaign_id": "abc123def456",
    "basic_info": {
      "first_name": "Jean",
      "last_name": "Dupont",
      "email": "jean.dupont@example.com",
      "phone": "0612345678"
    },
    "interview": {
      "status": "completed",
      "date": "2024-01-15T14:30:00Z",
      "duration_seconds": 480,
      "score": 8.5
    },
    "responses": [
      {
        "question": "Parlez-moi de votre expérience avec React et Node.js",
        "answer": "J'ai 5 ans d'expérience avec React, j'ai travaillé sur plusieurs projets...",
        "score": 9,
        "weight": 2,
        "explanation": "Le candidat démontre une expertise approfondie avec des exemples concrets"
      },
      {
        "question": "Quelle est votre disponibilité?",
        "answer": "Je suis disponible immédiatement",
        "score": 10,
        "weight": 1,
        "explanation": "Disponibilité immédiate, alignée avec les besoins"
      }
    ],
    "analysis": {
      "availability": "Immédiatement",
      "availability_start": "2024-01-20",
      "salary_expectation": "45000-50000€",
      "candidate_alignment": "Excellente correspondance avec le profil recherché. Expertise technique solide et disponibilité immédiate.",
      "strengths": [
        "5 ans d'expérience avec React et Node.js",
        "Portfolio de projets impressionnant",
        "Excellentes compétences en communication",
        "Disponible immédiatement"
      ],
      "concerns": [
        "Peu d'expérience en gestion d'équipe",
        "Prétentions salariales dans la fourchette haute"
      ]
    }
  }
  ```
</ResponseExample>

<ResponseField name="candidate_id" type="string" required>
  Identifiant unique du candidat
</ResponseField>

<ResponseField name="campaign_id" type="string" required>
  Identifiant de la campagne associée
</ResponseField>

<ResponseField name="basic_info" type="object" required>
  Informations de base du candidat

  <Expandable title="Propriétés">
    <ResponseField name="first_name" type="string" required>
      Prénom
    </ResponseField>

    <ResponseField name="last_name" type="string" required>
      Nom de famille
    </ResponseField>

    <ResponseField name="email" type="string" required>
      Adresse email
    </ResponseField>

    <ResponseField name="phone" type="string" required>
      Numéro de téléphone
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="interview" type="object" required>
  Détails de l'entretien

  <Expandable title="Propriétés">
    <ResponseField name="status" type="string" required>
      Statut de l'entretien (`completed`, `voicemail`, `incomplete`, `pending`)
    </ResponseField>

    <ResponseField name="date" type="string">
      Date de l'entretien (ISO 8601)
    </ResponseField>

    <ResponseField name="duration_seconds" type="integer">
      Durée de l'entretien en secondes
    </ResponseField>

    <ResponseField name="score" type="number">
      Score global de l'entretien (0-10)
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="responses" type="array">
  Réponses détaillées aux questions (uniquement si l'entretien est complété)

  <Expandable title="Propriétés de chaque réponse">
    <ResponseField name="question" type="string" required>
      Question posée
    </ResponseField>

    <ResponseField name="answer" type="string" required>
      Réponse du candidat (transcription)
    </ResponseField>

    <ResponseField name="score" type="number" required>
      Score attribué à cette réponse (0-10)
    </ResponseField>

    <ResponseField name="weight" type="number" required>
      Poids de la question dans le calcul final
    </ResponseField>

    <ResponseField name="explanation" type="string" required>
      Analyse de la réponse par l'IA
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="analysis" type="object">
  Analyse globale du candidat (uniquement si l'entretien est complété)

  <Expandable title="Propriétés">
    <ResponseField name="availability" type="string">
      Disponibilité exprimée par le candidat
    </ResponseField>

    <ResponseField name="availability_start" type="string">
      Date de disponibilité normalisée (format YYYY-MM-DD)
    </ResponseField>

    <ResponseField name="salary_expectation" type="string">
      Prétentions salariales
    </ResponseField>

    <ResponseField name="candidate_alignment" type="string">
      Analyse de l'alignement avec le poste
    </ResponseField>

    <ResponseField name="strengths" type="array">
      Liste des points forts identifiés
    </ResponseField>

    <ResponseField name="concerns" type="array">
      Liste des points d'attention
    </ResponseField>
  </Expandable>
</ResponseField>

## Exemple de requête

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET https://app.voicehire.io/api/v1/candidates/550e8400-e29b-41d4-a716-446655440000 \
    -H "X-API-Key: vh_live_XXXXXXXXXXXXX"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://app.voicehire.io/api/v1/candidates/550e8400-e29b-41d4-a716-446655440000",
      headers={
          "X-API-Key": "vh_live_XXXXXXXXXXXXX"
      }
  )
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const response = await axios.get(
    'https://app.voicehire.io/api/v1/candidates/550e8400-e29b-41d4-a716-446655440000',
    {
      headers: {
        'X-API-Key': 'vh_live_XXXXXXXXXXXXX'
      }
    }
  );
  ```
</CodeGroup>

## Codes d'erreur

| Code | Description                   |
| ---- | ----------------------------- |
| 401  | Clé API manquante ou invalide |
| 404  | Candidat non trouvé           |


## OpenAPI

````yaml GET /api/v1/candidates/{candidate_id}
openapi: 3.0.3
info:
  title: VoiceHire API
  description: >
    API REST pour automatiser les campagnes de recrutement avec VoiceHire.


    ## Authentification


    L'API utilise une authentification par clé API. Vous devez inclure votre clé
    API dans l'en-tête `X-API-Key` de chaque requête.


    ```

    X-API-Key: vh_live_XXXXXXXXXXXXX

    ```


    ## Format des réponses


    Toutes les réponses sont au format JSON. Les erreurs suivent un format
    standardisé :


    ```json

    {
      "error": {
        "code": "ERROR_CODE",
        "message": "Description de l'erreur",
        "details": {}
      }
    }

    ```


    ## Limites


    - Les numéros de téléphone doivent être des numéros français (06 ou 07)

    - Maximum 100 candidats par requête d'ajout

    - Les campagnes génèrent automatiquement 6 questions d'entretien
  version: 1.0.0
  contact:
    name: Support VoiceHire
    email: support@voicehire.io
    url: https://www.voicehire.io
servers:
  - url: https://app.voicehire.io
    description: Production
  - url: http://localhost:8080
    description: Développement local
security:
  - ApiKeyAuth: []
tags:
  - name: Campagnes
    description: Gestion des campagnes de recrutement
  - name: Candidats
    description: Gestion des candidats
  - name: Compte
    description: Informations du compte
paths:
  /api/v1/candidates/{candidate_id}:
    get:
      tags:
        - Candidats
      summary: Détails d'un candidat
      description: >-
        Récupère les informations complètes d'un candidat incluant la
        transcription
      operationId: getCandidateDetails
      parameters:
        - name: candidate_id
          in: path
          required: true
          description: ID ou UUID du candidat
          schema:
            type: string
      responses:
        '200':
          description: Détails du candidat
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CandidateDetails'
        '404':
          description: Candidat non trouvé
components:
  schemas:
    CandidateDetails:
      allOf:
        - $ref: '#/components/schemas/CandidateSummary'
        - type: object
          properties:
            campaign_id:
              type: string
            job_title:
              type: string
            availability:
              type: string
              nullable: true
            salary_expectation:
              type: string
              nullable: true
            interview_duration:
              type: integer
              description: Durée de l'entretien en secondes
            recherche_active:
              type: boolean
              description: En recherche active d'emploi
            ecoute_marche:
              type: boolean
              description: À l'écoute du marché
            score_details:
              type: object
              additionalProperties:
                type: object
                properties:
                  score:
                    type: number
                  explanation:
                    type: string
            transcript:
              type: object
              properties:
                presentation:
                  type: string
                  description: Présentation du candidat
                answers:
                  type: array
                  items:
                    type: object
                    properties:
                      question:
                        type: string
                      answer:
                        type: string
                      timestamp:
                        type: number
    CandidateSummary:
      type: object
      properties:
        id:
          type: integer
          description: ID du candidat
        uuid:
          type: string
          description: UUID du candidat
        first_name:
          type: string
        last_name:
          type: string
        phone_number:
          type: string
        email:
          type: string
          nullable: true
        status:
          type: string
          enum:
            - completed
            - pending
            - voicemail
            - incomplete
        interview_score:
          type: number
          nullable: true
          description: Score de l'entretien (sur 10)
        date:
          type: string
          format: date-time
        is_sourced:
          type: boolean
          description: Candidat sourcé (avec SMS)
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Clé API au format vh_live_XXXXX

````