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

# Obtenir la prochaine question

> Retourne la prochaine meilleure question à poser dans la conversation en cours. Vous devez fournir au moins `conversation_history` ou `context`. Le dernier message dans `conversation_history` doit avoir `role: "user"`.




## OpenAPI

````yaml /openapi.fr.yaml post /v1/next-questions
openapi: 3.1.0
info:
  title: API NBQ Engine
  description: >-
    L'API REST du NBQ Engine retourne la prochaine meilleure question à poser
    lors d'une conversation.
  version: 1.0.0
servers:
  - url: https://api.zelinqa.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Health
    description: Vérification de l'état de l'API
  - name: Questions
    description: Sélection de la prochaine question
  - name: Sessions
    description: Enregistrement du résultat de la conversation
paths:
  /v1/next-questions:
    post:
      tags:
        - Questions
      summary: Obtenir la prochaine question
      description: >
        Retourne la prochaine meilleure question à poser dans la conversation en
        cours. Vous devez fournir au moins `conversation_history` ou `context`.
        Le dernier message dans `conversation_history` doit avoir `role:
        "user"`.
      operationId: getNextQuestion
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NextQuestionRequest'
            examples:
              with_history:
                summary: Avec l'historique de conversation
                value:
                  session_id: conv-7f3a1c
                  conversation_history:
                    - role: assistant
                      content: >-
                        Bonjour ! Parlez-moi de l'espace que vous souhaitez
                        aménager.
                    - role: user
                      content: >-
                        Je cherche une table de salle à manger d'extérieur pour
                        ma terrasse.
                  answered_question_ids: []
              with_context:
                summary: Avec un résumé de contexte
                value:
                  session_id: conv-7f3a1c
                  context: >-
                    Le visiteur souhaite une table de salle à manger d'extérieur
                    pour une terrasse exposée plein sud. Préfère le métal
                    contemporain. Budget non encore abordé.
                  answered_question_ids: []
      responses:
        '200':
          description: Prochaine question retournée
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NextQuestionResponse'
              examples:
                with_question:
                  summary: Question retournée
                  value:
                    next_question:
                      external_id: q_budget_range
                      text: >-
                        Quelle fourchette de budget aviez-vous en tête pour la
                        table ?
                    exhausted: false
                    nbq_version: 0.9.0-beta.1
                    request_id: req_3b9f0a1c2d4e6f80
                exhausted:
                  summary: Plus aucune question
                  value:
                    next_question: null
                    exhausted: true
                    nbq_version: 0.9.0-beta.1
                    request_id: req_91a2b3c4d5e6f708
        '403':
          description: Non autorisé — clé API manquante, malformée ou révoquée
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                type: https://api.zelinqa.ai/errors/missing_tenant_id
                title: Clé API manquante ou invalide
                status: 403
                request_id: req_2c4e6a8b0d1f3508
        '422':
          description: >-
            Erreur de validation — le corps de la requête a échoué à la
            validation
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                type: https://api.zelinqa.ai/errors/validation_failed
                title: >-
                  Le corps ou les paramètres de la requête ont échoué à la
                  validation.
                status: 422
                request_id: req_2c4e6a8b0d1f3508
                detail: >-
                  Erreur de valeur, requête invalide : fournissez
                  conversation_history ou context
                errors:
                  - loc:
                      - body
                    msg: >-
                      Erreur de valeur, requête invalide : fournissez
                      conversation_history ou context
                    type: value_error
        '429':
          description: Trop de requêtes — limite de débit ou quota atteint
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Erreur serveur interne
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                type: https://api.zelinqa.ai/errors/internal_error
                title: Une erreur serveur inattendue s'est produite.
                status: 500
                request_id: req_2c4e6a8b0d1f3508
components:
  schemas:
    NextQuestionRequest:
      type: object
      required:
        - session_id
      properties:
        session_id:
          type: string
          minLength: 1
          maxLength: 128
          description: >
            Un identifiant stable pour la conversation. Réutilisez la même
            valeur pour chaque appel au sein d'une conversation — c'est ainsi
            que l'utilisation est comptabilisée.
          example: conv-7f3a1c
        conversation_history:
          type: array
          maxItems: 50
          description: >
            L'intégralité de la conversation jusqu'à présent, sous forme de
            liste ordonnée de messages. Obligatoire si `context` n'est pas
            fourni. Le dernier message doit avoir `role: "user"`.
          items:
            type: object
            required:
              - role
              - content
            properties:
              role:
                type: string
                enum:
                  - user
                  - assistant
                description: >-
                  `user` pour l'utilisateur final, `assistant` pour votre
                  application
              content:
                type: string
                minLength: 1
                maxLength: 2000
                description: Le texte du message
        context:
          type: string
          maxLength: 8000
          description: >
            Un résumé en texte libre de la conversation jusqu'à présent.
            Obligatoire si `conversation_history` n'est pas fourni. Incluez les
            faits recueillis, le profil utilisateur et la dernière intention.
            Maximum 8000 caractères.
          example: >-
            Le visiteur souhaite une table d'extérieur pour une terrasse exposée
            plein sud. Préfère le métal contemporain. Budget non encore abordé.
        answered_question_ids:
          type: array
          maxItems: 200
          description: >
            Les valeurs `external_id` des questions déjà posées et auxquelles il
            a été répondu. NBQ les exclut pour ne jamais répéter une question.
          items:
            type: string
          example:
            - q_budget_range
            - q_seating_capacity
    NextQuestionResponse:
      type: object
      properties:
        next_question:
          description: >-
            La prochaine question recommandée, ou `null` quand `exhausted` est
            `true`.
          oneOf:
            - type: object
              required:
                - external_id
                - text
              properties:
                external_id:
                  type: string
                  description: >-
                    L'identifiant de la question tel que défini dans la zone
                    Questions de NBQ Studio.
                  example: q_budget_range
                text:
                  type: string
                  description: Le texte de la question à afficher à l'utilisateur.
                  example: >-
                    Quelle fourchette de budget aviez-vous en tête pour la table
                    ?
            - type: 'null'
        exhausted:
          type: boolean
          description: >-
            `true` quand toutes les questions éligibles ont été posées. Traitez
            cela comme le signal pour terminer le flux de questions.
          example: false
        nbq_version:
          type: string
          description: >-
            Identifiant de version de la configuration NBQ Studio active. À
            inclure dans les journaux et les demandes de support.
          example: 0.9.0-beta.1
        request_id:
          type: string
          description: >-
            Identifiant unique de cet appel API. À inclure dans toute demande de
            support.
          example: req_3b9f0a1c2d4e6f80
    ErrorResponse:
      type: object
      description: >-
        Format RFC 7807 problem-details. Retourné avec Content-Type:
        application/problem+json.
      properties:
        type:
          type: string
          description: URI stable identifiant la classe d'erreur.
          example: https://api.zelinqa.ai/errors/validation_failed
        title:
          type: string
          description: Résumé court et lisible du problème.
          example: Le corps ou les paramètres de la requête ont échoué à la validation.
        status:
          type: integer
          description: Code de statut HTTP, reflété dans le corps.
          example: 422
        request_id:
          type: string
          description: À inclure dans toute demande de support pour tracer l'appel exact.
          example: req_2c4e6a8b0d1f3508
        detail:
          type: string
          description: Explication lisible spécifique à cette occurrence.
          example: >-
            Erreur de valeur, requête invalide : fournissez conversation_history
            ou context
        errors:
          type: array
          description: >-
            Problèmes de validation par champ. Présent en cas d'erreurs de
            validation 422.
          items:
            type: object
            properties:
              loc:
                type: array
                items:
                  type: string
              msg:
                type: string
              type:
                type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Transmettez votre clé API NBQ dans l'en-tête Authorization : `Bearer
        nbq_live_xxx`

````