> ## 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.

# Consulter le journal des changements

> Renvoie les actions de configuration du domaine, de la plus récente à la
plus ancienne. Cette lecture est réservée au scope
`configuration:publish` : le journal contient l'identité des opérateurs
et n'est pas une simple lecture du corpus.

Les différences sont volontairement structurelles. Elles indiquent la
ressource et les champs modifiés, mais ne recopient jamais le texte des
questions, les libellés, les prompts, les réponses d'un utilisateur ni
une clé API en clair. L'identifiant d'une clé actrice est une empreinte
non réversible de cette clé.

La pagination utilise un curseur opaque. Le journal des événements de
session est séparé et n'est jamais renvoyé par cette route.




## OpenAPI

````yaml /openapi.fr.yaml get /v1/configuration/audit
openapi: 3.1.0
info:
  title: Zelinqa — API V1
  version: 1.0.0
  summary: >-
    Contrat public du runtime Zelinqa et de la configuration des bases de
    questions.
  description: >-
    Contrat public de l'API Zelinqa V1 sur https://api.zelinqa.ai. La clé API
    identifie le domaine et ses droits. Les mutations utilisent Idempotency-Key
    ; celles d'une session existante utilisent aussi state_version. Les sessions
    restent attachées à leur version publiée.
  contact:
    name: Zelinqa
    url: https://docs.zelinqa.ai
  license:
    name: Proprietary — Zelinqa SAS
    identifier: LicenseRef-Zelinqa-Proprietary
servers:
  - url: https://api.zelinqa.ai
    description: API publique Zelinqa
security:
  - ApiKeyAuth: []
tags:
  - name: sessions
    description: >
      Cycle de vie d'une conversation Zelinqa : création, sélection de la
      question

      suivante, mises à jour hors tour, reprise et retour de résultat.
  - name: configuration
    description: |
      Lecture et modification de la configuration éditoriale d'un domaine, puis
      publication asynchrone de l'artefact moteur.
paths:
  /v1/configuration/audit:
    get:
      tags:
        - configuration
      summary: Consulter le journal des changements
      description: |
        Renvoie les actions de configuration du domaine, de la plus récente à la
        plus ancienne. Cette lecture est réservée au scope
        `configuration:publish` : le journal contient l'identité des opérateurs
        et n'est pas une simple lecture du corpus.

        Les différences sont volontairement structurelles. Elles indiquent la
        ressource et les champs modifiés, mais ne recopient jamais le texte des
        questions, les libellés, les prompts, les réponses d'un utilisateur ni
        une clé API en clair. L'identifiant d'une clé actrice est une empreinte
        non réversible de cette clé.

        La pagination utilise un curseur opaque. Le journal des événements de
        session est séparé et n'est jamais renvoyé par cette route.
      operationId: listConfigurationAudit
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 512
          description: Curseur opaque renvoyé par la page précédente.
        - name: action
          in: query
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 160
        - name: resource_type
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/ConfigurationAuditResourceType'
      responses:
        '200':
          description: Page du journal d'audit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationAuditPage'
              example:
                request_id: req_8aa1
                events:
                  - id: 00000000-0000-4000-8000-000000000001
                    occurred_at: '2026-09-02T12:44:10Z'
                    action: configuration.question.deactivated
                    origin: studio_jwt
                    actor:
                      type: cognito_user
                      id: 00000000-0000-4000-8000-000000000002
                    scopes:
                      - configuration:read
                      - configuration:write
                      - configuration:publish
                    request_id: req_71aa
                    resource:
                      type: question
                      id: q_style
                    diff:
                      before:
                        active: true
                      after:
                        active: false
                    details:
                      config_version_id: 00000000-0000-4000-8000-000000000003
                      draft_revision: 43
                next_cursor: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/InsufficientScope'
        '404':
          $ref: '#/components/responses/UnknownConfiguration'
        '422':
          $ref: '#/components/responses/ConfigurationValidationFailed'
components:
  schemas:
    ConfigurationAuditResourceType:
      type: string
      enum:
        - objective
        - dimension
        - success_information
        - question
        - configuration
        - api_key
        - domain
    ConfigurationAuditPage:
      type: object
      additionalProperties: false
      required:
        - request_id
        - events
        - next_cursor
      properties:
        request_id:
          type: string
        events:
          type: array
          items:
            $ref: '#/components/schemas/ConfigurationAuditEvent'
        next_cursor:
          type:
            - string
            - 'null'
          description: Curseur de la page suivante, `null` sur la dernière page.
    ConfigurationAuditEvent:
      type: object
      additionalProperties: false
      required:
        - id
        - occurred_at
        - action
        - origin
        - actor
        - scopes
        - request_id
        - resource
        - diff
        - details
      properties:
        id:
          type: string
          format: uuid
        occurred_at:
          type: string
          format: date-time
        action:
          type: string
          minLength: 1
          maxLength: 160
        origin:
          type: string
          enum:
            - public_api
            - studio_jwt
        actor:
          $ref: '#/components/schemas/ConfigurationAuditActor'
        scopes:
          type: array
          uniqueItems: true
          items:
            type: string
        request_id:
          type: string
          minLength: 1
          maxLength: 200
        resource:
          $ref: '#/components/schemas/ConfigurationAuditResource'
        diff:
          $ref: '#/components/schemas/ConfigurationAuditDiff'
        details:
          type: object
          additionalProperties: true
          description: >-
            Identifiants et compteurs techniques bornés, sans contenu
            conversationnel ou secret.
    ErrorEnvelope:
      type: object
      additionalProperties: false
      required:
        - code
        - message
        - request_id
        - details
      description: Enveloppe uniforme de toutes les erreurs métier.
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
        message:
          type: string
          minLength: 1
        request_id:
          type: string
          minLength: 1
        details:
          type: object
          additionalProperties: true
    ConfigurationAuditActor:
      type: object
      additionalProperties: false
      required:
        - type
        - id
      properties:
        type:
          type: string
          enum:
            - api_key
            - cognito_user
        id:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            Identifiant utilisateur interne, ou empreinte SHA-256 de la clé API
            ; jamais la clé en clair.
    ConfigurationAuditResource:
      type: object
      additionalProperties: false
      required:
        - type
        - id
      properties:
        type:
          $ref: '#/components/schemas/ConfigurationAuditResourceType'
        id:
          type: string
          minLength: 1
          maxLength: 200
    ConfigurationAuditDiff:
      type: object
      additionalProperties: false
      required:
        - before
        - after
      description: >
        Vue structurelle assainie. Les valeurs éditoriales libres sont
        remplacées

        par une indication de changement ; seules les valeurs moteur non
        sensibles

        comme `active`, `order_position` ou `completion_role` sont conservées.
      properties:
        before:
          type:
            - object
            - 'null'
          additionalProperties: true
        after:
          type:
            - object
            - 'null'
          additionalProperties: true
    ErrorCode:
      type: string
      description: Catalogue fermé des erreurs métier V1.
      enum:
        - unauthorized
        - insufficient_scope
        - idempotency_contention
        - state_version_conflict
        - idempotency_key_reused
        - unknown_session
        - invalid_previous_turn
        - constraint_no_match
        - invalid_choice
        - compiled_artifact_unavailable
        - configuration_validation_failed
        - compilation_in_progress
        - unknown_configuration
        - unknown_compilation
  responses:
    Unauthorized:
      description: >-
        Réponse 401 possible au niveau de l'application. Une clé absente ou
        invalide est généralement refusée en 403 par la passerelle, sans
        enveloppe métier garantie.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            code: unauthorized
            message: Clé d'intégration absente ou invalide.
            request_id: req_9000
            details: {}
    InsufficientScope:
      description: >-
        Accès refusé. La passerelle peut renvoyer 403 pour une clé absente,
        invalide, expirée, révoquée ou dépourvue du scope requis, sans enveloppe
        métier garantie.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            code: insufficient_scope
            message: Cette clé ne permet pas de publier une configuration.
            request_id: req_9001
            details:
              required_scopes:
                - configuration:publish
              granted_scopes:
                - configuration:read
                - configuration:write
    UnknownConfiguration:
      description: >
        Aucune configuration ne correspond à l'état demandé — par exemple un
        brouillon

        qui n'a jamais été créé.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            code: unknown_configuration
            message: Aucun brouillon n'existe pour cette configuration.
            request_id: req_9008
            details:
              state: draft
    ConfigurationValidationFailed:
      description: |
        La validation du brouillon a échoué. Toutes les anomalies sont renvoyées
        ensemble, avec la position de l'opération fautive lorsqu'elle vient d'un
        changement, afin que Studio puisse les afficher d'un seul coup.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          examples:
            validation_publication:
              summary: Le brouillon n'est pas publiable
              value:
                code: configuration_validation_failed
                message: La configuration comporte 2 anomalies bloquantes.
                request_id: req_9015
                details:
                  issues:
                    - code: success_information_without_active_question
                      message: >-
                        L'information « Fenêtre de livraison souhaitée » n'a pas
                        de question active.
                      entity: success_information
                      entity_id: delivery_window
                    - code: success_information_only_in_optional_dimension
                      message: >-
                        L'information « Budget annuel » ne dépend que d'une
                        dimension optionnel.
                      entity: success_information
                      entity_id: annual_budget
            revision_perimee:
              summary: Le brouillon a changé depuis la lecture du client
              value:
                code: configuration_validation_failed
                message: Le brouillon a été modifié depuis votre dernière lecture.
                request_id: req_9016
                details:
                  issues:
                    - code: draft_revision_mismatch
                      message: Révision attendue 42, révision courante 44.
                      entity: objective
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: Zelinqa API key
      description: >-
        Envoyez la clé API dans Authorization: Bearer <clé>. Elle identifie le
        domaine et les droits autorisés. Ne transmettez pas d'en-têtes
        d'identité internes.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.