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

# Analyser un document

> Analyse immédiate d'un document que votre système détient déjà — tunnel web, application, agence, GED — sans parcours à faire suivre. La réponse synchrone porte le résultat complet, au même format que la lecture. « Analyse impossible » est un RÉSULTAT (201), enregistré et relisible : les erreurs HTTP ne parlent que de la requête ou de la disponibilité du service. Débit dédié : 20 analyses par minute et par clé. En-tête optionnel `Idempotency-Key` (≤ 255 caractères, fenêtre 24 h) : un retry réseau avec la même clé rend le même résultat — jamais une seconde analyse. La réponse rejouée porte l'en-tête `Idempotency-Replayed: true`.



## OpenAPI

````yaml /openapi.json post /api/v1/analyses
openapi: 3.1.0
info:
  title: API Resocom
  version: 1.0.0
  description: >-
    Créer des vérifications d'identité, analyser directement les documents que
    vous détenez déjà, et relire les résultats depuis votre système
    d'information.
servers:
  - url: https://pro.resocom.com
security:
  - cleApi: []
paths:
  /api/v1/analyses:
    post:
      summary: Analyser un document
      description: >-
        Analyse immédiate d'un document que votre système détient déjà — tunnel
        web, application, agence, GED — sans parcours à faire suivre. La réponse
        synchrone porte le résultat complet, au même format que la lecture. «
        Analyse impossible » est un RÉSULTAT (201), enregistré et relisible :
        les erreurs HTTP ne parlent que de la requête ou de la disponibilité du
        service. Débit dédié : 20 analyses par minute et par clé. En-tête
        optionnel `Idempotency-Key` (≤ 255 caractères, fenêtre 24 h) : un retry
        réseau avec la même clé rend le même résultat — jamais une seconde
        analyse. La réponse rejouée porte l'en-tête `Idempotency-Replayed:
        true`.
      operationId: analyserDocument
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            maxLength: 255
          description: Même clé dans les 24 h → même résultat, pas de second acte.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - documentCategory
                - document
              properties:
                documentCategory:
                  type: string
                  enum:
                    - identite
                    - administratif
                  description: Nature du document transmis.
                document:
                  type: string
                  description: >-
                    Le document en base64 (préfixe data URL toléré). Identité :
                    image JPEG, PNG ou WebP — le recto. Administratif : image ou
                    PDF, fichier unique. 10 Mo maximum.
                documentVerso:
                  type: string
                  description: >-
                    Verso de la pièce d'identité (base64, optionnel). Refusé
                    pour un document administratif.
                externalRef:
                  type: string
                  maxLength: 255
                  description: >-
                    Votre référence de dossier — renvoyée dans le résultat et
                    filtrable en lecture.
                includeCertificate:
                  type: boolean
                  default: false
                  description: Joint le certificat PDF (base64) à la réponse.
      responses:
        '201':
          description: >-
            Le résultat de l'analyse — même forme que la lecture, plus le
            certificat si demandé.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Consultation'
                  - type: object
                    properties:
                      certificate:
                        type: string
                        description: >-
                          Certificat PDF en base64 — présent si
                          `includeCertificate` est vrai.
                      certificateUrl:
                        type: string
                        description: Adresse de retéléchargement du certificat.
        '400':
          description: >-
            Corps invalide, document illisible, ou verso fourni pour un document
            administratif.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
        '401':
          description: Clé absente, inconnue ou révoquée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
        '403':
          description: Licence ou service documentaire non couvert par votre contrat.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
        '413':
          description: Corps au-delà de la taille maximale.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
        '429':
          description: Débit d'analyse dépassé — respectez `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
        '502':
          description: Moteur d'analyse momentanément indisponible — réessayez.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erreur'
components:
  schemas:
    Consultation:
      type: object
      description: Résultat d'une vérification.
      properties:
        id:
          type: string
          description: Identifiant unique du résultat.
          example: CSL-20260717-3F2A91
        externalRef:
          type:
            - string
            - 'null'
          description: Votre référence de dossier, renvoyée telle quelle.
          example: DOSSIER-88412
        workflowId:
          type:
            - string
            - 'null'
          description: Workflow qui a évalué le document.
          example: WFL-20260706-BEF798
        documentCategory:
          type: string
          enum:
            - identite
            - administratif
          description: Catégorie du document contrôlé.
        documentType:
          type:
            - string
            - 'null'
          description: Type de document détecté.
          example: CNI
        documentCountry:
          type:
            - string
            - 'null'
          description: Pays émetteur (ISO 3166-1 alpha-3).
          example: FRA
        verdict:
          type: string
          enum:
            - conforme
            - non_conforme
            - suspect
            - analyse_impossible
          description: Constat technique de l'analyse — immuable.
        decision:
          type:
            - string
            - 'null'
          enum:
            - conforme
            - a_verifier
            - refuse
            - null
          description: Décision du workflow selon vos règles.
        reviewStatus:
          type:
            - string
            - 'null'
          enum:
            - pending
            - accepted
            - rejected
            - null
          description: Décision de traitement de votre équipe (revue humaine).
        anomalyCount:
          type: integer
          description: Nombre de points d'attention relevés.
        hasRejectAnomaly:
          type: boolean
          description: Au moins un point d'attention bloquant.
        anomalies:
          type: array
          description: Points d'attention relevés par l'analyse.
          items:
            type: object
            properties:
              code:
                type:
                  - string
                  - 'null'
                description: Code machine du point d'attention.
                example: selfie_mismatch
              severity:
                type: string
                enum:
                  - reject
                  - warn
                description: Gravité.
              message:
                type: string
                description: Description lisible.
        twoDDoc:
          type:
            - object
            - 'null'
          description: >-
            Cachet électronique 2D-Doc du document (null si aucun 2D-Doc et rien
            à signaler).
          properties:
            present:
              type: boolean
              description: Un 2D-Doc a été lu sur le document.
            trusted:
              type: boolean
              description: Signature ANTS vérifiée sur le payload principal.
            signatureVerified:
              type: boolean
              description: Signature cryptographique vérifiée.
            signatureStatus:
              type: string
              description: Statut détaillé de la signature (verified, ca_not_found, ...).
            dataMatches:
              type:
                - boolean
                - 'null'
              description: >-
                Concordance entre les données du 2D-Doc et la lecture du
                document (null si non contrôlée).
            readStatus:
              type: string
              enum:
                - read
                - detected_not_read
                - not_detected
              description: >-
                read = lu ; detected_not_read = présent mais qualité d'image
                insuffisante pour le lire (n'est pas une non-conformité) ;
                not_detected = aucun 2D-Doc détecté.
            readStatusMessage:
              type: string
              description: >-
                Libellé du statut de lecture, fourni quand readStatus vaut
                detected_not_read.
              example: '2D-Doc présent mais non lu : qualité d''image insuffisante.'
        analyzedAt:
          type: string
          format: date-time
          description: Date de l'analyse.
        createdAt:
          type: string
          format: date-time
          description: Date d'enregistrement.
    Erreur:
      type: object
      properties:
        error:
          type: string
          description: Code d'erreur machine.
          example: invalid_api_key
  securitySchemes:
    cleApi:
      type: http
      scheme: bearer
      bearerFormat: rsk_live_…
      description: >-
        Clé API créée dans Administration → Entreprise → Clés API (licence
        Groupe).

````