PrevenAPI

Documentation

Spécification 2026-02 · API v1

Valider un CSV

POST /v1/files/validatemultipart/form-data

Champ
file obligatoire Le fichier tel qu'il serait déposé. 20 Mo au plus.
type obligatoire adf ou jdr
declarant obligatoire employer ou training_organization
strict_references facultatif true par défaut
spec_version facultatif
curl -X POST https://api.prevenapi.fr/v1/files/validate \
  -H "Authorization: Bearer pp_test_xxx" \
  -F type=adf -F declarant=employer \
  -F "file=@import.csv;type=text/csv"

Le fichier est analysé en mémoire et n'est jamais écrit sur disque. Seuls des compteurs sont conservés.

Réponse

Toujours 200 quand le fichier a pu être lu. Lisez valid.

{
  "valid": false,
  "spec_version": "2026-02",
  "rows_total": 42,
  "rows_valid": 39,
  "rows_invalid": 3,
  "file_rejected": false,
  "error_count": 3,
  "errors": [
    {"row": 17, "column": "DOMAINE_FORMATION", "code": "INVALID_FORMACODE", "message": "Le code 99999 n'existe pas dans le référentiel formacode du Passeport de prévention."},
    {"row": 28, "column": "DATE_FIN_FORMATION", "code": "END_BEFORE_START", "message": "La date de fin de la formation est antérieure à la date de début."}
  ],
  "warnings": []
}
  • row est le numéro de ligne du fichier ; l'en-tête est la ligne 1.
  • file_rejected: true signale une erreur qui ferait rejeter tout le fichier par le portail : encodage, séparateur, en-têtes, nom de fichier, fichier vide. Dans ce cas les lignes ne sont pas analysées.
  • Au-delà de 1 000 erreurs, la liste est coupée (truncated: true) ; error_count reste exact.

Ce qui est vérifié

Structure, en-têtes et leur ordre, encodage, séparateur, nombre de colonnes, champs obligatoires et conditionnels, longueurs, énumérations, dates et leur cohérence, NIR, SIRET (structure et clé), codes Formacode / NSF / ROME / RS, doublons d'ID_UNIQUE_PARTENAIRE, cohérence des lignes d'une même déclaration, limite de 500 titulaires.

Ce que seul le portail peut vérifier

  • qu'un ID_UNIQUE_PARTENAIRE n'a pas déjà servi dans un dépôt précédent ;
  • que le couple NIR + nom de naissance est reconnu ;
  • que le SIRET existe réellement.

Un fichier valid: true peut donc encore voir des lignes rejetées pour ces trois raisons.

Dates dans le futur

Le portail compare les dates de formation au jour du dépôt. Nous les comparons au jour de la validation (heure de Paris).