Document & Evidence

Un document est une demande de pièce justificative. Une evidence est la preuve fournie en réponse par le tiers ou une source externe.

Définitions

Document (Demande)

Représente une pièce demandée dans un dossier.

  • documentId — Identifiant unique
  • documentCode — Code du type de document
  • documentName — Libellé du document
  • statusCode — Statut actuel
  • present — Document fourni ou non

Evidence (Preuve)

La réponse fournie par le tiers ou une source externe.

  • id — Identifiant de l'evidence
  • responseId — ID pour les actions
  • uploadDate — Date de dépôt
  • expirationDate — Date d'expiration
  • formdata — Données de formulaire

Types d'evidence

Une evidence peut prendre deux formes selon le type de document demandé :

TypeDescriptionPropriétés spécifiques
Fichier uploadéDocument PDF, image ou autre fichier déposé par le tiersfileUUID, fileName, fileSize
Formulaire rempliRéponses à un questionnaire structuréformdata[]
PDF généré pour les formulaires

Pour les formulaires remplis, Aprovall génère automatiquement un PDF consolidant toutes les réponses du tiers, téléchargeable via l'API.

Lister les documents d'un dossier

Récupérez tous les documents demandés dans un dossier avec leur statut et leurs evidences.

GET/api/v1/account/:accountId/dossiers/:dossierId/documents

Liste tous les documents d'un dossier avec leurs evidences.

Exemple de réponse

{
  "content": [
    {
      "documentId": 11078435,
      "dossierId": 1324073,
      "documentCode": "ATT_URSSAF",
      "documentName": "Attestation de vigilance URSSAF",
      "requestDate": "2025-01-15T10:00:00.000",
      "present": true,
      "statusCode": "VALID",
      "evidences": [
        {
          "id": 6876412,
          "responseId": 2238768,
          "uploadDate": "2025-01-20T14:30:00.000",
          "fileUUID": "a4d8acd5-8254-477c-9019-fa85aef8d224",
          "fileName": "attestation_urssaf.pdf",
          "fileSize": 128790,
          "expirationDate": "2025-07-20T23:59:59.999",
          "format": "ORIGINALNUMERIQUE",
          "issuer": "DO",
          "transmitter": "FOURNISSEUR"
        }
      ]
    },
    {
      "documentId": 11031065,
      "dossierId": 1324073,
      "documentCode": "KBIS",
      "documentName": "Extrait Kbis",
      "requestDate": "2025-01-15T10:00:00.000",
      "present": false,
      "statusCode": "MISSING",
      "evidences": []
    }
  ]
}

Détails d'un document

Récupérez les informations détaillées d'un document spécifique.

GET/api/v1/account/:accountId/dossiers/:dossierId/documents/:documentId

Retourne les détails d'un document et ses evidences.

Structure d'une evidence

Chaque evidence contient des métadonnées sur la preuve fournie :

PropriétéTypeDescription
idnumberIdentifiant unique de l'evidence
responseIdnumberID de la réponse (utilisé pour approve/reject)
uploadDatedatetimeDate et heure du dépôt
fileUUIDstringUUID du fichier stocké
fileNamestringNom du fichier original
fileSizenumberTaille du fichier en octets
expirationDatedatetimeDate d'expiration du document
formdataarrayDonnées du formulaire (si applicable)
issuerstringÉmetteur (DO = Data Owner)
transmitterstringTransmetteur (FOURNISSEUR, etc.)
metadataobjectMétadonnées de vérification (IBAN, etc.)
aprovallCheckobjectRésultat du contrôle automatique du document. Contient extractedData, la liste des champs lus — voir la section suivante.

Les données extraites d'un document

Certaines pièces justificatives sont lues automatiquement par la plateforme, qui en retire les champs utiles — les informations portées par une attestation d'assurance, par exemple. Ces valeurs sont exposées sur le justificatif dans aprovallCheck.extractedData, sous forme de liste d'entrées.

Le paramètre withExtractedData

La liste n'est renvoyée que si vous la demandez explicitement, via le paramètre de requête withExtractedData=true. À false ou absent, elle n'est pas peuplée. Un document dépourvu de données extraites n'expose simplement pas d'entrées : la requête n'échoue jamais pour cette raison.

La structure d'une entrée

Chaque entrée décrit un champ lu sur le document. Le libellé est destiné à l'affichage ; c'est name qui identifie le champ de façon stable.

ChampTypeDescription
namestringIdentifiant technique du champ extrait. C'est sur lui que vous devez vous appuyer.
typestringNature de la valeur : TEXT, BOOLEAN, DATE ou NUMERIC.
labelstringLibellé lisible du champ, destiné à l'affichage.
valuestring | boolean | number | nullValeur lue sur le document. Son type suit type : chaîne, booléen, date YYYY-MM-DD ou nombre.

Exemple de réponse

{
  "id": 90124,
  "statusCode": "ACTION_REQUIRED",
  "aprovallCheck": {
    "extractedData": [
      {
        "name": "document_type",
        "type": "TEXT",
        "label": "Type de document",
        "value": "DECLARATION_NON_CONCERNE"
      },
      {
        "name": "is_insured",
        "type": "BOOLEAN",
        "label": "Entreprise assurée",
        "value": false
      },
      {
        "name": "edition_date",
        "type": "DATE",
        "label": "Date d'édition",
        "value": "2026-04-10"
      },
      {
        "name": "expiration_date",
        "type": "DATE",
        "label": "Date de fin de validité",
        "value": ""
      },
      {
        "name": "company_name",
        "type": "TEXT",
        "label": "Nom de l'entreprise assurée",
        "value": "ACME BTP"
      },
      {
        "name": "identifier",
        "type": "TEXT",
        "label": "SIRET/SIREN",
        "value": "12345678900017"
      },
      {
        "name": "Plafond",
        "type": "NUMERIC",
        "label": "Plafond de garantie par sinistre",
        "value": null
      },
      {
        "name": "platform_generated",
        "type": "BOOLEAN",
        "label": "Document généré par la plateforme",
        "value": true
      }
    ]
  }
}
Champ non renseigné

Une entrée est toujours présente même si le champ n'a pas été trouvé sur le document : value vaut alors la chaîne vide pour un TEXT ou une DATE, et null pour un NUMERIC. Testez donc la valeur, et non la présence de l'entrée.

Ne présumez pas du nommage

Les name ne suivent pas une convention unique — on trouve du snake_case en minuscules (company_name) comme des noms capitalisés (Plafond_total, Devise). Faites une correspondance explicite sur les champs qui vous intéressent plutôt que de dériver le nom.

Où l'utiliser

Le paramètre est accepté sur les cinq endpoints qui renvoient des justificatifs :

GET/api/v1/account/:accountId/dossiers
GET/api/v1/account/:accountId/dossiers/:dossierId
GET/api/v1/account/:accountId/dossiers/:dossierId/documents/:documentId/files
GET/api/v1/account/:accountId/documents/search
POST/api/v1/account/:accountId/documents/advanced-search-v2

Formulaires : structure formdata

Pour les documents de type formulaire, le tableau formdata contient les réponses structurées :

{
  "formdata": [
    {
      "type": "string",
      "key": "f_158_nmr_0",
      "title": "Nom ou référence de l'opération",
      "order": 0,
      "value": "Projet Alpha"
    },
    {
      "type": "date",
      "key": "f_158_dtd_2",
      "title": "Date de réalisation",
      "order": 2,
      "value": "15/01/2025"
    },
    {
      "type": "iban",
      "key": "f_49_bn_0",
      "title": "IBAN",
      "order": 0,
      "value": "FR76 0000 0000 0000 0000 0000 000"
    }
  ]
}

Types de champs

TypeDescription
stringTexte libre
dateDate au format JJ/MM/AAAA
ibanCoordonnées bancaires IBAN
booleanOui / Non
numberValeur numérique

Télécharger un fichier

Plusieurs méthodes pour récupérer les fichiers des evidences :

GET/api/v1/account/:accountId/dossiers/:dossierId/documents/:documentId/files/:fileId

Télécharge le fichier en binaire (PDF). Le fileId correspond à l'id de l'evidence.

GET/api/v1/account/:accountId/dossiers/:dossierId/documents/:documentId/files/:fileId/link

Génère une URL signée temporaire pour le téléchargement.

GET/api/v1/account/:accountId/dossiers/:dossierId/files/download

Télécharge tous les fichiers du dossier dans une archive ZIP.

Actions sur un document

Lorsqu'un document est en statut ACTION_REQUIRED, vous pouvez l'approuver ou le rejeter via l'API.

Identifiant responseId

Les actions utilisent le responseId présent dans l'objet evidence, et non le documentId.

Approuver un document

POST/api/v1/account/:accountId/responses/:responseId/approve
curl -X POST https://edge.aprovall.com/api/v1/account/123/responses/2238768/approve \
  -H "Authorization: Bearer VOTRE_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "comment": "Document conforme"
  }'
ParamètreObligatoireDescription
commentNonCommentaire optionnel de validation

Rejeter un document

POST/api/v1/account/:accountId/responses/:responseId/reject
curl -X POST https://edge.aprovall.com/api/v1/account/123/responses/2238768/reject \
  -H "Authorization: Bearer VOTRE_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "comment": "Document expiré",
    "shareRejectionReason": true
  }'
ParamètreObligatoireDescription
commentNonMotif du rejet
shareRejectionReasonOuiSi true, le tiers est notifié par email du rejet

Ajouter un document requis

Vous pouvez ajouter des documents supplémentaires à un dossier existant (sauf pour les dossiers typés où la liste est fixée).

POST/api/v1/account/:accountId/dossiers/:dossierId/requirements
curl -X POST https://edge.aprovall.com/api/v1/account/123/dossiers/456/requirements \
  -H "Authorization: Bearer VOTRE_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "newRequiredDocuments": ["JUSTIF_IMM", "ATT_FISC"]
  }'

Vérifications automatiques

Certains documents font l'objet de vérifications automatiques par Aprovall. Les résultats sont disponibles dans le champ metadata de l'evidence.

Exemple : vérification IBAN

Pour les documents IBAN, la vérification peut inclure des données SEPAmail ou Trustpair :

{
  "metadata": {
    "verified": "true",
    "bank_data_bank": "CREDIT DU NORD",
    "bank_data_bic": "NORDXXXX",
    "bank_data_country": "FRANCE",
    "sepa_data_sct": "YES",
    "sepa_data_sdd": "YES",
    "date_verification": "15/01/2025"
  }
}

Prochaines étapes