{"openapi":"3.1.0","info":{"title":"Lanala Pay — Gateway","version":"1.0.0","description":"API du gateway de paiement du Groupe Lanala (Guinée). Montants entiers en francs guinéens (GNF), sans décimale. Toute écriture accepte un en-tête Idempotency-Key. Les chemins documentés ici sont ceux réellement servis : le préfixe est /api/*, sans version.","contact":{"name":"Groupe Lanala"}},"servers":[{"url":"https://gateway1.lanalapay.com"}],"tags":[{"name":"Identifiants","description":"Résolution des alias de paiement."},{"name":"Paiement","description":"Devis de frais informatif et ordres de paiement."},{"name":"Enrôlement","description":"Création d'un titulaire, de son premier compte rattaché et de son identifiant."},{"name":"Listes","description":"Surfaces de lecture paginées par curseur, destinées aux portails."},{"name":"Marchand","description":"QR EMVCo. Le marchand est réglé par son acquéreur."},{"name":"Consentement","description":"Comptes rattachés et lectures de solde chez les tiers."},{"name":"Référentiel","description":"Catalogue des établissements raccordés."},{"name":"Exploitation","description":"État de santé et administration des connecteurs."},{"name":"Intégration","description":"Réception des webhooks des établissements raccordés."},{"name":"Vérification d'identité","description":"Contrôle du canal téléphonique et lecture du niveau. Lanala Pay ne collecte ni ne conserve de pièce d'identité : la vérification est assurée par l'établissement teneur du compte."},{"name":"Niveau rapporté","description":"Enregistrement et journal des niveaux de vérification rapportés par les établissements sources."},{"name":"Bac à sable","description":"Banque simulée servant aux essais de bout en bout."}],"paths":{"/api/alias/resolve":{"post":{"tags":["Identifiants"],"summary":"Résoudre un identifiant vers son établissement teneur de compte","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["alias_type","alias_value"],"properties":{"alias_type":{"type":"string","enum":["MSISDN","EMAIL","PERSONAL_ID","BUSINESS","DEVICE","ACCOUNT_ID","IBAN","ALIAS"],"example":"MSISDN","description":"Casse indifférente : la valeur est normalisée en majuscules."},"alias_value":{"type":"string","example":"+224620000001"},"requesting_fsp_id":{"type":"string","description":"Établissement à l'origine de la demande."}}}}}},"responses":{"200":{"description":"Identifiant résolu, nom masqué."},"404":{"description":"Aucun compte actif et découvrable ne correspond à cet identifiant.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"`alias_type` ou `alias_value` absent, ou type non pris en charge.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/devis":{"post":{"tags":["Paiement"],"summary":"Estimer les frais d'un ordre (informatif, non engageant)","description":"Le devis ne réserve rien : aucun fonds n'est immobilisé, et son expiration est sans conséquence sur un ordre.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["beneficiaire_alias","montant_gnf"],"properties":{"type":{"type":"string","enum":["p2p","p2m","interop"],"default":"p2p"},"beneficiaire_alias":{"type":"string","example":"+224620000001"},"marchand_id":{"type":"string","format":"uuid"},"montant_gnf":{"type":"integer","description":"Entier strictement positif, sans décimale."}}}}}},"responses":{"200":{"description":"Estimation : frais, total estimé, durée de validité."},"422":{"description":"Montant invalide ou bénéficiaire non résolu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/ordre":{"post":{"tags":["Paiement"],"summary":"Émettre un ordre de paiement","description":"Un fait d'instruction transmis à l'établissement teneur de compte. L'ordre naît « en_cours » ; son sort est ensuite déclaré par un tiers. Le verdict de vérification du bénéficiaire est rendu avant l'envoi, sans jamais divulguer le nom du titulaire.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["beneficiaire_alias","montant_gnf"],"properties":{"type":{"type":"string","enum":["p2p","p2m","interop"],"default":"p2p"},"canal":{"type":"string","example":"api"},"rattachement_id":{"type":"string","format":"uuid"},"marchand_id":{"type":"string","format":"uuid"},"caisse_id":{"type":"string","format":"uuid"},"beneficiaire_alias":{"type":"string","example":"+224620000001"},"montant_gnf":{"type":"integer"},"motif":{"type":"string"}}}}}},"responses":{"200":{"description":"Ordre émis. `verdict_beneficiaire` vaut correspond, correspond_presque, ne_correspond_pas ou indetermine. `frais_rapportes.etat` vaut non_communiques tant qu'aucune source ne les a déclarés."},"422":{"description":"Montant invalide, bénéficiaire non résolu ou plafond de vérification dépassé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/ordre/{id}":{"get":{"tags":["Paiement"],"summary":"Sort d'un ordre et journal de ses instructions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Ordre, son état parmi en_cours · reussi · echoue · indetermine, sa source déclarante, et la suite de ses événements en ajout seul."},"404":{"description":"Ordre inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/ordre/{id}/sort":{"post":{"tags":["Paiement"],"summary":"Consigner le sort déclaré d'un ordre (rôle de service)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["etat"],"properties":{"etat":{"type":"string","enum":["reussi","echoue","indetermine"]},"source":{"type":"string","description":"Établissement qui déclare. Obligatoire si l'état est terminal."},"dit_le":{"type":"string","format":"date-time"},"motif":{"type":"string"},"frais_rapportes_gnf":{"type":"integer","description":"À omettre s'ils ne sont pas communiqués : jamais 0 par défaut."},"frais_source":{"type":"string"}}}}}},"responses":{"200":{"description":"Sort consigné ; un état terminal ne se réécrit jamais."},"422":{"description":"État invalide, ou source et date de déclaration absentes.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/merchant/qr":{"post":{"tags":["Marchand"],"summary":"Émettre un QR marchand EMVCo","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"merchant_ref":{"type":"string","example":"LNLDEMO0001"},"merchant_id":{"type":"string","format":"uuid"},"qr_kind":{"type":"string","enum":["statique","dynamique"],"default":"statique"},"amount":{"type":"integer","description":"Obligatoire pour un QR dynamique."},"invoice_ref":{"type":"string"},"terminal_id":{"type":"string"},"canal_marchand":{"type":"string","pattern":"^[0-9]{3}$","description":"Sous-objet 62/11 « Merchant Channel » (SB-229) : média (0 auto, 4 caisse, 6 application), lieu (0 chez le marchand, 1 hors, 2 à distance), présence (0 caissier, 1 automate, 2 semi-assisté). Dérivé du type de QR et de la caisse s'il est omis."},"expires_at":{"type":"string","format":"date-time"}}}}}},"responses":{"200":{"description":"QR émis : la charge utile EMVCo et sa somme de contrôle telles qu'archivées en base. La chaîne rendue est exactement la chaîne stockée — aucune reconstruction côté serveur d'application."},"404":{"description":"Marchand inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Montant absent pour un QR dynamique, ou point de vente étranger au marchand.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/merchant/qr/{id}":{"get":{"tags":["Marchand"],"summary":"Relire un QR émis","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"QR."},"404":{"description":"QR inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/lectures":{"get":{"tags":["Consentement"],"summary":"Dernières lectures de solde chez les tiers","description":"Une lecture est une observation datée chez un établissement, jamais un avoir détenu par Lanala Pay. Chaque montant est rendu avec son établissement source et sa fraîcheur.","responses":{"200":{"description":"Liste des lectures : montant, source, lu_le, fraîcheur en secondes."}}},"post":{"tags":["Consentement"],"summary":"Enregistrer une observation relevée chez un tiers (rôle de service)","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rattachement_id","etablissement_source","montant_lu_gnf","lu_le"],"properties":{"rattachement_id":{"type":"string","format":"uuid"},"etablissement_source":{"type":"string"},"montant_lu_gnf":{"type":"integer","description":"Peut être négatif : un découvert chez le tiers est un fait."},"lu_le":{"type":"string","format":"date-time","description":"Instant de l'observation chez le tiers."},"consentement_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Lecture enregistrée."},"422":{"description":"Montant ou instant d'observation absent.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/rapprochement/{jour}":{"get":{"tags":["Exploitation"],"summary":"Contrôle d'intégrité mesurée d'une journée","parameters":[{"name":"jour","in":"path","required":true,"schema":{"type":"string","format":"date"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"N contrôles · M conformes · K écarts, avec le détail par contrôle."},"404":{"description":"Aucun contrôle exécuté pour cette journée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Date invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Exploitation"],"summary":"Exécuter le contrôle d'intégrité d'une journée","parameters":[{"name":"jour","in":"path","required":true,"schema":{"type":"string","format":"date"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Contrôle exécuté."},"422":{"description":"Date invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/consent/link":{"post":{"tags":["Consentement"],"summary":"Rattacher un compte détenu ailleurs","description":"Le titulaire est TOUJOURS déduit du jeton d'accès : aucun identifiant de personne ne se transmet dans le corps, et un `party_id` fourni serait ignoré.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["provider_institution_id","category","masked_ref"],"properties":{"provider_institution_id":{"type":"string","format":"uuid"},"audience":{"type":"string","enum":["client","marchand"],"default":"client"},"category":{"type":"string","enum":["groupe_lanala","banque_externe","wallet_externe","compte_marchand"]},"masked_ref":{"type":"string"},"external_ref":{"type":"string","description":"Jamais stocké en clair : seule son empreinte l'est."},"requested_scope":{"type":"string","enum":["lecture_seule","lecture_et_paiement"]},"duree_jours":{"type":"integer","default":90}}}}}},"responses":{"201":{"description":"Compte rattaché."},"202":{"description":"Rattachement en attente de validation de l'établissement."},"409":{"description":"Établissement non raccordé ou non visible pour cette audience.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/consent/accounts":{"get":{"tags":["Consentement"],"summary":"Comptes rattachés et leurs consentements vivants","responses":{"200":{"description":"Rattachements actifs. Les montants se lisent sur /api/lectures, avec leur source et leur fraîcheur."}}}},"/api/consent/{id}":{"delete":{"tags":["Consentement"],"summary":"Révoquer un rattachement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"motif","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Rattachement révoqué."},"404":{"description":"Rattachement inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/catalogue":{"get":{"tags":["Référentiel"],"summary":"Établissements raccordés visibles pour une audience","parameters":[{"name":"audience","in":"query","required":true,"schema":{"type":"string","enum":["client","marchand"]}}],"responses":{"200":{"description":"Catalogue filtré."},"400":{"description":"Audience invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/health":{"get":{"tags":["Exploitation"],"summary":"État de santé par domaine fonctionnel et par connecteur","responses":{"200":{"description":"Service opérationnel ou dégradé."},"503":{"description":"Un domaine au moins est indisponible."}}}},"/api/public/health":{"get":{"tags":["Exploitation"],"summary":"Sonde de disponibilité, accessible sans authentification","responses":{"200":{"description":"Sonde."}}}},"/api/openapi.json":{"get":{"tags":["Exploitation"],"summary":"Description OpenAPI 3.1 de cette API","responses":{"200":{"description":"Document OpenAPI."}}}},"/api/webhooks/{slug}":{"post":{"tags":["Intégration"],"summary":"Recevoir un événement d'un établissement raccordé","description":"Point d'entrée des notifications entrantes. La signature est vérifiée avant tout traitement ; un rejeu de la même référence renvoie 200 avec `duplicate: true`.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"sandbox-bank"}],"responses":{"200":{"description":"Événement accepté ou déjà connu."},"401":{"description":"Signature invalide ou horodatage périmé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"404":{"description":"Connecteur inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/origines":{"get":{"tags":["Exploitation"],"summary":"Lister les origines web autorisées","description":"La politique CORS est une donnée d'exploitation, pas une variable d'environnement : raccorder un portail ne demande aucun redéploiement.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Origines enregistrées."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Exploitation"],"summary":"Autoriser une origine","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["origine","audience"],"properties":{"origine":{"type":"string","example":"https://lanala-pilot-desk.lovable.app"},"libelle":{"type":"string"},"audience":{"type":"string","enum":["console","marchand","portail"]},"actif":{"type":"boolean","default":true},"motif":{"type":"string"}}}}}},"responses":{"201":{"description":"Origine autorisée."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Origine ou audience invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"delete":{"tags":["Exploitation"],"summary":"Retirer une origine","parameters":[{"name":"origine","in":"query","required":true,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Origine retirée."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"404":{"description":"Origine inconnue.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/origines/refusees":{"get":{"tags":["Exploitation"],"summary":"Origines rejetées par la politique CORS","description":"Chaque refus est consigné avec sa référence de requête. Sans cette liste, un blocage CORS est indiscernable d'une panne réseau côté portail.","parameters":[{"name":"limite","in":"query","schema":{"type":"integer","default":100,"maximum":500}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Derniers refus et agrégat sur sept jours."}}}},"/api/admin/connecteurs":{"get":{"tags":["Exploitation"],"summary":"Parc des connecteurs, capacités et références de secret comprises","description":"Fiche complète de chaque connecteur. Les secrets n'apparaissent que par leur référence (env:NOM) et leur empreinte SHA-256 — jamais leur valeur.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Parc complet."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Exploitation"],"summary":"Déclarer ou remplacer un connecteur (par slug)","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fsp_id","slug","nom","categorie","protocole","url_de_base","mode_authentification"],"properties":{"fsp_id":{"type":"string"},"slug":{"type":"string"},"nom":{"type":"string"},"categorie":{"type":"string","enum":["banque_api","dfsp_fspiop","mobile_money","switch_national"]},"protocole":{"type":"string","enum":["rest_json","iso20022","fspiop","proprietaire"]},"environnement":{"type":"string","enum":["bac_a_sable","production"]},"statut":{"type":"string","enum":["brouillon","en_test","actif","suspendu","retire"]},"url_de_base":{"type":"string"},"mode_authentification":{"type":"string","enum":["oauth2_client_credentials","api_key","mtls","hmac"]},"delai_maximal_ms":{"type":"integer"},"nombre_de_tentatives":{"type":"integer"},"montant_minimal_gnf":{"type":"integer"},"montant_maximal_gnf":{"type":"integer"},"devises":{"type":"array","items":{"type":"string"}},"visible_portail_client":{"type":"boolean"},"visible_portail_marchand":{"type":"boolean"},"capacites":{"type":"array","items":{"type":"string"}},"motif":{"type":"string"}}}}}},"responses":{"201":{"description":"Connecteur enregistré."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"409":{"description":"Activation sans test réel réussi.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Champs manquants, établissement inconnu ou visibilité interdite.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connecteurs/{id}":{"patch":{"tags":["Exploitation"],"summary":"Modifier un connecteur (champs présents seulement)","description":"Trois champs engagent le rail vis-à-vis d'un tiers et exigent DEUX personnes distinctes dans les 24 heures : url_de_base, visible_portail_client à vrai, visible_portail_marchand à vrai. Le premier appel rend 202 avec un approbation_id ; une seconde personne rejoue la MÊME requête. Un seul champ sensible par appel (sinon 422 geste_multiple).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Connecteur modifié."},"202":{"description":"En attente d'une seconde personne (approbation_id rendu)."},"409":{"description":"Un connecteur ne devient actif qu'après un test réel réussi.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Valeur refusée, ou deux champs sensibles dans le même appel.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"delete":{"tags":["Exploitation"],"summary":"Retirer un connecteur sans historique","description":"Refusé dès qu'un fait déjà écrit référence le connecteur (ordres, événements d'ordre, événements reçus, remises, lots, demandes de rattachement) : dans ce cas, suspendre.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Connecteur supprimé."},"409":{"description":"Connecteur référencé : suspendre, pas effacer.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connecteurs/journal":{"get":{"tags":["Exploitation"],"summary":"Historique des changements du catalogue","description":"Ancienne valeur, nouvelle valeur, motif, et l'instantané du nom et du rôle de l'auteur. Filtres : connecteur_id, champ, depuis, jusqu_a. Pagination par curseur opaque.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"connecteur_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"champ","in":"query","schema":{"type":"string"}},{"name":"curseur","in":"query","schema":{"type":"string"}},{"name":"limite","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"Journal paginé."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connecteurs/{id}/secret":{"post":{"tags":["Exploitation"],"summary":"Déclarer la variable d'environnement portant le secret","description":"Seule la RÉFÉRENCE (env:NOM_DE_VARIABLE) est enregistrée, avec l'empreinte SHA-256 du secret effectif. La valeur ne transite jamais et n'est jamais rendue. Ce geste engage le rail : DEUX personnes distinctes — le premier appel rend 202 avec un approbation_id.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reference"],"properties":{"usage":{"type":"string","example":"signature_webhook_entrant"},"reference":{"type":"string","example":"env:SECRET_BANQUE_X"},"algorithme":{"type":"string","example":"hmac_sha256"}}}}}},"responses":{"200":{"description":"Référence enregistrée, présence de la variable indiquée."},"202":{"description":"En attente d'une seconde personne (approbation_id rendu)."},"422":{"description":"Référence attendue sous la forme env:NOM_DE_VARIABLE.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connecteurs/{id}/test":{"post":{"tags":["Exploitation"],"summary":"Tester réellement un connecteur (sonde + résolution d'alias en lecture seule)","description":"Aucun ordre n'est instruit. Le résultat — code, latence, message — est consigné avec la santé du connecteur. Sans test réussi, le connecteur ne peut pas passer en « actif ».","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Test réussi et consigné."},"404":{"description":"Connecteur inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"502":{"description":"Test en échec : le connecteur reste inéligible au statut actif.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connectors":{"get":{"tags":["Exploitation"],"summary":"Lister tout le parc de connecteurs (tous statuts)","description":"Réservé à l'administration. Renvoie la fiche complète de chaque connecteur — établissement de rattachement, réglages techniques, visibilité, dates — ainsi que ses indicateurs de santé sur 24 heures. Trié par ordre d'affichage puis par nom.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Parc complet des connecteurs.","content":{"application/json":{"schema":{"type":"object","properties":{"connecteurs":{"type":"array","items":{"type":"object","properties":{"connector_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"display_name":{"type":"string"},"kind":{"type":"string"},"protocol":{"type":"string"},"base_url":{"type":"string","format":"uri"},"auth_mode":{"type":"string"},"environment":{"type":"string"},"status":{"type":"string"},"visible_to_clients":{"type":"boolean"},"visible_to_merchants":{"type":"boolean"},"timeout_ms":{"type":"integer"},"retry_max":{"type":"integer"},"rate_limit_per_min":{"type":"integer","nullable":true},"supported_currencies":{"type":"array","items":{"type":"string"}},"min_amount":{"type":"integer","nullable":true},"max_amount":{"type":"integer","nullable":true},"display_order":{"type":"integer","nullable":true},"logo_url":{"type":"string","nullable":true},"availability_note":{"type":"string","nullable":true},"activated_at":{"type":"string","format":"date-time","nullable":true},"suspended_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"fsp_id":{"type":"string","nullable":true},"institution_name":{"type":"string","nullable":true},"sante":{"type":"object","properties":{"appels":{"type":"integer"},"erreurs":{"type":"integer"},"p50_ms":{"type":"integer","nullable":true},"dernier_appel":{"type":"string","format":"date-time","nullable":true},"disponibilite_pct":{"type":"number","nullable":true}}}}}}}}}}},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"403":{"description":"Utilisateur non enregistré comme utilisateur interne actif.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Exploitation"],"summary":"Créer ou modifier un connecteur (rapprochement par slug)","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fsp_id","slug","kind","protocol","base_url","auth_mode","display_name"],"properties":{"fsp_id":{"type":"string"},"slug":{"type":"string"},"display_name":{"type":"string"},"kind":{"type":"string","enum":["banque_api","dfsp_fspiop","mobile_money","switch_national"]},"protocol":{"type":"string","enum":["rest_json","iso20022","fspiop","proprietaire"]},"auth_mode":{"type":"string","enum":["oauth2_client_credentials","api_key","mtls","hmac"]},"environment":{"type":"string","enum":["bac_a_sable","production"]},"status":{"type":"string","enum":["brouillon","en_test","actif","suspendu","retire"]},"base_url":{"type":"string","format":"uri"},"visible_to_clients":{"type":"boolean"},"visible_to_merchants":{"type":"boolean"},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Connecteur enregistré."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Champs manquants, valeur hors énumération, ou visibilité demandée hors statut actif.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connectors/{id}/activate":{"post":{"tags":["Exploitation"],"summary":"Activer un connecteur","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Connecteur actif."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connectors/{id}/suspend":{"post":{"tags":["Exploitation"],"summary":"Suspendre un connecteur","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Connecteur suspendu."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/connectors/{id}/test":{"post":{"tags":["Exploitation"],"summary":"Éprouver un connecteur de bout en bout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Essai exécuté : capacités éprouvées et latences."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"409":{"description":"Capacité non déclarée par le connecteur.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/webhooks/{id}/replay":{"post":{"tags":["Exploitation"],"summary":"Rejouer un événement entrant","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Événement rejoué."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/webhooks/process-pending":{"post":{"tags":["Exploitation"],"summary":"Traiter les événements en attente ou en échec échus","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"responses":{"200":{"description":"Nombre d'événements traités et détail."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/garanties":{"post":{"tags":["Exploitation"],"summary":"Exécuter le harnais de garanties","description":"Trois issues par garantie : OK · ECHEC · INDETERMINE. Un contrôle qui ne peut pas s'exécuter n'est jamais compté conforme.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Garanties, conformes, échecs et indéterminés."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/cles":{"get":{"tags":["Exploitation"],"summary":"Suivi des clés et secrets — quatre périmètres","description":"Par périmètre : source lue, nombre d'éléments, algorithme CONSTATÉ, dates observées, échéance projetée avec sa politique déclarée, et état dérivé (a_jour · echeance_proche · echeance_depassee · inconnu · perimetre_vide). Trois natures de date : observee · projetee · inconnue. Aucune date n'est fabriquée.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"seuil_jours","in":"query","schema":{"type":"integer","default":30,"minimum":1,"maximum":365},"description":"Seuil d'alerte d'expiration, en jours."}],"responses":{"200":{"description":"Périmètres, échéances et politiques."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/cles/signature-marchand":{"post":{"tags":["Exploitation"],"summary":"Enregistrer une nouvelle clé publique de signature marchand","description":"La matière privée vit chez l'établissement : ce geste est un ENREGISTREMENT, jamais une génération. Motif obligatoire, imputation nominative, journal d'audit. L'ancienne clé reste valide jusqu'à la fin de la fenêtre de recouvrement inscrite en base.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Clé enregistrée, ancienne clé valide jusqu'à la fin du recouvrement."},"400":{"description":"Motif absent ou corps invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/moi":{"get":{"tags":["Exploitation"],"summary":"Que le Gateway reconnaît du porteur","description":"Route NOMINATIVE : jeton d'agent émis par le fournisseur d'identité de la Console, second facteur vérifié (aal2) exigé ; le jeton partagé y est refusé. Le Gateway ne détient aucune fiche d'agent : il rend l'identifiant du compte, le nom affiché, les rôles et habilitations LUS AU JETON après validation, et son verdict de révocation.","responses":{"200":{"description":"Identifiant, rôles et habilitations reconnus, second facteur constaté."},"403":{"description":"Second facteur manquant, compte révoqué ou habilitation absente.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"503":{"description":"Fournisseur d'identité des agents non configuré.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/agents":{"get":{"tags":["Exploitation"],"summary":"VOLONTAIREMENT ABSENTE — les agents ne vivent pas dans cette base","deprecated":true,"description":"Cette route n'existe pas et ne doit pas être créée : ce n'est pas un oubli. Depuis le 10/08/2026, le magasin de comptes du back-office est celui de la Console ; le Gateway ne détient aucune fiche d'agent (garantie 105, `controle_aucune_identite_agent()`), et en exposer une liste lui rendrait l'autorité d'identité qu'on lui a retirée. La Console lit sa propre base. Le seul reflet local est la liste de révocation, alimentée par POST /api/public/console/revocation. Voir DOCTRINE-PASSERELLE.md §14.","responses":{"404":{"description":"Absence délibérée : la Console est l'autorité des agents.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/public/console/revocation":{"post":{"tags":["Exploitation"],"summary":"Déclarer un compte révoqué — appel signé de la Console","description":"Seul flux entre le magasin de comptes du back-office et le Gateway. Unidirectionnel, il ne transporte qu'un identifiant : aucun nom, aucun courriel, aucun rôle. Signé HMAC (`x-lanala-timestamp` / `x-lanala-signature`, fenêtre 5 min), idempotent. Trois issues : enregistrée · refusée · INDÉTERMINÉE (503, à rejouer).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["user_id"],"properties":{"user_id":{"type":"string","format":"uuid","description":"Identifiant du compte révoqué."},"revoque_le":{"type":"string","format":"date-time"},"source":{"type":"string","example":"console"},"reference":{"type":"string","description":"Référence de rejeu côté Console."}}},"example":{"user_id":"00000000-0000-0000-0000-000000000000","source":"console"}}}},"responses":{"200":{"description":"Révocation enregistrée (ou déjà connue : `deja_connu`)."},"401":{"description":"Signature invalide ou horodatage hors fenêtre.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Identifiant de compte absent ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"503":{"description":"Issue indéterminée : rejouer le même appel.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/compensation":{"get":{"tags":["Exploitation"],"summary":"État de compensation interbancaire d'une fenêtre","description":"Créances ENTRE TIERS, entièrement dérivées des ordres réussis de la fenêtre : rien n'est stocké. Lanala Pay calcule et publie ; il ne règle pas.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"debut","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"fin","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Couples débiteur/créditeur, nombre d'ordres et montants."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Fenêtre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/compensation/publier":{"post":{"tags":["Exploitation"],"summary":"Publier un état de compensation","description":"Calcule la fenêtre, archive l'empreinte SHA-256 du contenu publié et rend l'état. En ajout seul : une fenêtre publiée ne se réécrit jamais, une reprise tardive part en régularisation dans la fenêtre suivante.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["debut","fin"],"properties":{"debut":{"type":"string","format":"date-time"},"fin":{"type":"string","format":"date-time"},"destinataires":{"type":"array","items":{"type":"string"}},"agent":{"type":"string"}}}}}},"responses":{"201":{"description":"État publié, avec son empreinte."},"401":{"description":"Non autorisé.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Fenêtre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/reglement-rapporte":{"post":{"tags":["Exploitation"],"summary":"Enregistrer un règlement rapporté par un acquéreur","description":"Ce que l'acquéreur DÉCLARE avoir réglé au marchand, sur le compte du marchand chez sa banque. Pas de rapport = pas de ligne ; aucun net n'est jamais déduit par soustraction des encaissements.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["marchand_id","etablissement_source","rapporte_le"],"properties":{"marchand_id":{"type":"string","format":"uuid"},"etablissement_source":{"type":"string"},"periode_debut":{"type":"string","format":"date"},"periode_fin":{"type":"string","format":"date"},"montant_brut_rapporte_gnf":{"type":"integer","description":"Omis s'il n'est pas communiqué — jamais 0."},"frais_rapportes_gnf":{"type":"integer","description":"Omis s'ils ne sont pas communiqués — jamais 0."},"montant_net_rapporte_gnf":{"type":"integer"},"date_valeur_rapportee":{"type":"string","format":"date"},"reference_etablissement":{"type":"string"},"rapporte_le":{"type":"string","format":"date-time"}}}}}},"responses":{"201":{"description":"Règlement rapporté enregistré."},"422":{"description":"Source ou instant de déclaration absent.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/ordre-externe/{id}/statut":{"post":{"tags":["Exploitation"],"summary":"Accuser le sort d'un acheminement sur le rail sortant","description":"Statut que l'établissement destinataire a accusé pour l'acheminement. C'est un fait rapporté : il ne décide rien sur l'ordre, dont le sort reste déclaré par POST /api/admin/ordre/{id}/sort.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["statut"],"properties":{"statut":{"type":"string","enum":["initie","envoye","accepte","rejete","regle"]}}}}}},"responses":{"200":{"description":"Acheminement mis à jour."},"404":{"description":"Acheminement inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Statut invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/devis/{id}":{"get":{"tags":["Paiement"],"summary":"Relire un devis de frais","description":"Estimation informative et non engageante : elle ne réserve aucun fonds. Le titulaire est déduit du jeton ; le devis d'autrui est rendu inconnu, jamais interdit.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Devis."},"404":{"description":"Devis inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/sandbox-bank/lookup":{"post":{"tags":["Bac à sable"],"summary":"Banque simulée — retrouver un titulaire","responses":{"200":{"description":"Titulaire simulé."}}}},"/api/kyc/telephone/code":{"post":{"tags":["Vérification d'identité"],"summary":"Émettre un code de vérification par SMS","description":"Le code à usage unique n'est jamais renvoyé ni journalisé : il est transmis exclusivement par SMS. Fréquence limitée à un envoi par minute et trois par quart d'heure.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"party_id":{"type":"string","format":"uuid"},"numero":{"type":"string","description":"Numéro de téléphone au format local ou E.164."}},"required":["numero"]}}}},"responses":{"202":{"description":"Code émis : identifiant de vérification, échéance et nombre d'essais."},"422":{"description":"Numéro absent ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"429":{"description":"Fréquence d'envoi dépassée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/kyc/telephone/verification":{"post":{"tags":["Vérification d'identité"],"summary":"Vérifier le code reçu par SMS","description":"Chaque essai est décompté : cette route n'accepte aucune clé d'idempotence. Le code circule uniquement dans le corps de la requête.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"verification_id":{"type":"string","format":"uuid"},"code":{"type":"string"}},"required":["verification_id","code"]}}}},"responses":{"200":{"description":"Numéro vérifié : le titulaire passe au niveau 1."},"409":{"description":"Le code a expiré.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Code incorrect ; le nombre d'essais restants est indiqué.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"429":{"description":"Trop d'essais infructueux.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/kyc/etat":{"get":{"tags":["Vérification d'identité"],"summary":"État de vérification d'un titulaire","description":"Niveau RAPPORTÉ par l'établissement teneur du compte, avec sa source et sa date, plafonds en francs guinéens (entiers) et consommation du mois. Lanala Pay ne collecte ni ne conserve de pièce d'identité : cette vérification est assurée par l'établissement source. Le titulaire est celui du jeton.","parameters":[],"responses":{"200":{"description":"État de vérification."},"401":{"description":"Jeton absent ou non rattaché à un titulaire.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"404":{"description":"Titulaire inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/kyc/niveau-rapporte":{"get":{"tags":["Niveau rapporté"],"summary":"Journal des niveaux rapportés","description":"En ajout seul : chaque rapport d'un établissement s'ajoute, aucun n'écrase le précédent.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"party_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"Journal des niveaux rapportés."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Niveau rapporté"],"summary":"Enregistrer un niveau rapporté par un établissement","description":"Voie normale : le webhook entrant `kyc.*` du connecteur. Cette saisie manuelle sert au rattrapage. L'établissement source est obligatoire : un niveau sans source n'est pas un fait rapporté. Un rapport antérieur au niveau courant est consigné au journal sans être appliqué.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"party_id":{"type":"string","format":"uuid"},"niveau":{"type":"string","enum":["niveau_0","niveau_1","niveau_2","niveau_3"]},"etablissement_source":{"type":"string","example":"soutramoney"},"rapporte_le":{"type":"string","format":"date-time"},"motif":{"type":"string"}},"required":["party_id","niveau","etablissement_source"]}}}},"responses":{"201":{"description":"Rapport consigné au journal ; appliqué au profil s'il est le plus récent."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"404":{"description":"Titulaire inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Champs manquants ou niveau inconnu.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/purge":{"post":{"tags":["Administration"],"summary":"Exécuter une purge de conservation","description":"Effacer est irréversible : deux personnes distinctes sont exigées. Un certificat de purge est produit. Aucun ordonnanceur ne purge plus tout seul.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"jour":{"type":"string","format":"date"},"motif":{"type":"string"}}}}}},"responses":{"200":{"description":"Purge exécutée : certificat rendu."},"202":{"description":"Première validation enregistrée : une seconde personne est attendue."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"409":{"description":"La même personne ne peut pas valider seule.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Jour invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/tarifs":{"get":{"tags":["Administration"],"summary":"Lister les règles tarifaires","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Règles tarifaires."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"patch":{"tags":["Administration"],"summary":"Modifier une règle tarifaire","description":"Un tarif change ce que paient des tiers : deux personnes distinctes sont exigées. La part variable est un entier pour mille, jamais un flottant.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"regle_id":{"type":"string","format":"uuid"},"part_fixe_gnf":{"type":"integer"},"part_variable_pour_mille":{"type":"integer"},"plafond_frais_gnf":{"type":"integer"},"statut":{"type":"string"},"motif":{"type":"string"}},"required":["regle_id","part_fixe_gnf","part_variable_pour_mille"]}}}},"responses":{"200":{"description":"Règle modifiée."},"202":{"description":"Première validation enregistrée : une seconde personne est attendue."},"401":{"description":"Administration non autorisée.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"404":{"description":"Règle inconnue.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Tarif invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/sandbox-bank/quote":{"post":{"tags":["Bac à sable"],"summary":"Banque simulée — tarifer une opération","responses":{"200":{"description":"Tarif simulé."}}}},"/api/sandbox-bank/transfer":{"post":{"tags":["Bac à sable"],"summary":"Banque simulée — exécuter un transfert et émettre le webhook signé correspondant","description":"Fournir `ordre_id` (UUID) pour que la déclaration de sort se rattache à un ordre réel : la référence est propagée en `reference_ordre` dans la charge du webhook.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"integer"},"identifiant":{"type":"string"},"ordre_id":{"type":"string","format":"uuid"},"reference":{"type":"string"}}}}}},"responses":{"200":{"description":"Transfert simulé."}}}},"/api/sandbox-bank/balance":{"post":{"tags":["Bac à sable"],"summary":"Banque simulée — lecture de solde chez le tiers","responses":{"200":{"description":"Solde simulé."}}}},"/api/sandbox-bank/emit-webhook":{"post":{"tags":["Bac à sable"],"summary":"Banque simulée — émettre un événement signé vers le gateway","responses":{"200":{"description":"Événement émis et réponse du gateway."}}}},"/api/public/parametres":{"get":{"tags":["Référentiel"],"summary":"Configuration publique et catalogue des codes d'erreur","description":"Deux péremptions distinctes : `peremption_affichage_secondes` pour l'affichage d'une lecture de solde, `peremption_paiement_secondes` au-delà de laquelle une relecture EN DIRECT est obligatoire avant d'instruire un ordre.","responses":{"200":{"description":"Paramètres publics et liste des codes d'erreur."}}}},"/api/enrolement":{"post":{"tags":["Enrôlement"],"summary":"Créer un titulaire, son premier compte rattaché et son identifiant","description":"Idempotent, en une seule transaction. Exige un numéro déjà vérifié par code SMS. La référence de compte n'entre jamais en clair en base : seule son empreinte poivrée y est déposée.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["msisdn","verification_id","fsp_id","reference_compte"],"properties":{"msisdn":{"type":"string","example":"+224620000001"},"verification_id":{"type":"string","format":"uuid"},"prenom":{"type":"string"},"nom":{"type":"string"},"nationalite":{"type":"string","example":"GN"},"fsp_id":{"type":"string","example":"SOUTRAMN"},"reference_compte":{"type":"string"},"categorie":{"type":"string","default":"banque_externe"},"libelle":{"type":"string"}}}}}},"responses":{"200":{"description":"Titulaire déjà enrôlé : réponse d'origine."},"201":{"description":"Titulaire, rattachement et identifiant créés."},"409":{"description":"Numéro non vérifié, ou déjà rattaché à un autre titulaire.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Champs manquants ou identité incomplète.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/ordres":{"get":{"tags":["Listes"],"summary":"Journal des ordres du titulaire","description":"Du plus récent au plus ancien. Trois issues seulement : réussi, échoué, indéterminé.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"etat","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"reference","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Journal des ordres du titulaire","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/ordre/{id}/evenements":{"get":{"tags":["Listes"],"summary":"Journal d'instructions d'un ordre","description":"En ajout seul : qui a été sollicité, quand, et ce qu'il a répondu.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."}],"responses":{"200":{"description":"Journal d'instructions d'un ordre","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/ordre/{id}/statut":{"get":{"tags":["Paiement"],"summary":"Statut léger d'un ordre","description":"Charge minimale, destinée à l'écran de confirmation et à l'annonce vocale. Rend l'état, le montant, le bénéficiaire masqué, la référence de bout en bout et la source du sort quand il est déclaré.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Statut de l'ordre."},"404":{"description":"Ordre inconnu, ou titulaire non partie prenante.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/lectures-solde":{"get":{"tags":["Consentement"],"summary":"Dernière lecture connue de chaque compte rattaché","description":"Une VUE datée, jamais un avoir : chaque ligne porte son établissement source et sa fraîcheur. Avant d'instruire un paiement, une relecture en direct est obligatoire.","responses":{"200":{"description":"Lectures les plus fraîches, une par compte rattaché."},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/marchand/me":{"get":{"tags":["Marchand"],"summary":"Le marchand du titulaire connecté","responses":{"200":{"description":"Marchand, acquéreur et compte de règlement masqué."},"404":{"description":"Aucun marchand n'est rattaché à ce compte.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/marchand/caisses":{"get":{"tags":["Marchand"],"summary":"Points de vente du marchand","description":"Liste paginée.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."}],"responses":{"200":{"description":"Points de vente du marchand","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Marchand"],"summary":"Enregistrer ou modifier un point de vente","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"responses":{"200":{"description":"Point de vente enregistré."}}},"delete":{"tags":["Marchand"],"summary":"Désactiver un point de vente","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Point de vente désactivé."}}}},"/api/marchand/caissiers":{"get":{"tags":["Marchand"],"summary":"Caissiers du marchand","description":"Triés par nom.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."}],"responses":{"200":{"description":"Caissiers du marchand","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Marchand"],"summary":"Enregistrer ou modifier un caissier","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"responses":{"200":{"description":"Caissier enregistré."}}},"delete":{"tags":["Marchand"],"summary":"Désactiver un caissier","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Caissier désactivé."}}}},"/api/encaissements":{"get":{"tags":["Marchand"],"summary":"Encaissements constatés","description":"Ce que le marchand a reçu sur son propre compte, chez sa propre banque, à la suite d'un ordre acheminé.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"caisse_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"canal","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Encaissements constatés","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/reglements-rapportes":{"get":{"tags":["Marchand"],"summary":"Règlements rapportés par l'acquéreur","description":"En ajout seul. Pas de rapport = pas de ligne ; aucun net n'est jamais déduit par soustraction.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"etablissement_source","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Règlements rapportés par l'acquéreur","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/personnes":{"get":{"tags":["Exploitation"],"summary":"Répertoire des titulaires","description":"Le motif est obligatoire (8 caractères au moins) et journalisé avec l'agent, l'instant et l'adresse d'origine. Le titulaire peut relire ce journal.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"recherche","in":"query","required":false,"schema":{"type":"string"}},{"name":"statut","in":"query","required":false,"schema":{"type":"string"}},{"name":"niveau_kyc","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"motif","in":"query","required":true,"schema":{"type":"string","minLength":8}}],"responses":{"200":{"description":"Répertoire des titulaires","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/marchands":{"get":{"tags":["Exploitation"],"summary":"Répertoire des marchands","description":"Réservé à la console.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"recherche","in":"query","required":false,"schema":{"type":"string"}},{"name":"statut","in":"query","required":false,"schema":{"type":"string"}},{"name":"acquereur","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Répertoire des marchands","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/personne/{id}":{"get":{"tags":["Exploitation"],"summary":"Fiche d'un titulaire","description":"Objet unitaire — 404 `personne_introuvable` si elle n'existe pas. Motif obligatoire (8 caractères au moins) : la consultation s'inscrit dans le journal de consultation (action `fiche_personne`) avec l'agent, son rôle, l'instant, l'adresse d'origine et le motif. Rend l'identité minimale, les niveaux de vérification RAPPORTÉS avec leur source et leur date, les rattachements confirmés (référence masquée), les alias masqués et les 20 derniers ordres. Aucune pièce d'identité, aucun document, aucune référence de compte en clair, aucun solde consolidé : nous ne les détenons pas.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"motif","in":"query","required":true,"schema":{"type":"string","minLength":8}}],"responses":{"200":{"description":"Fiche"},"404":{"description":"Personne inconnue"},"422":{"description":"Motif de consultation absent ou trop court"}}}},"/api/admin/marchand/{id}":{"get":{"tags":["Exploitation"],"summary":"Fiche d'un marchand","description":"Objet unitaire — 404 `marchand_introuvable` si inconnu. Rend l'identité, l'acquéreur, le connecteur de rattachement, les caisses, les caissiers (numéro masqué), les clés de signature QR avec leurs échéances OBSERVÉES (`inconnue` quand la base est muette) et les 20 derniers encaissements constatés.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Fiche"},"404":{"description":"Marchand inconnu"}}}},"/api/admin/rattachements":{"get":{"tags":["Exploitation"],"summary":"Demandes de rattachement de comptes","description":"Quatre issues, jamais deux : en_cours · confirme · refuse · indetermine. Rien ne naît chez nous : la confirmation vient de l'établissement teneur du compte.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"issue","in":"query","required":false,"schema":{"type":"string"}},{"name":"party_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"etablissement","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Demandes de rattachement de comptes","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/lots":{"get":{"tags":["Exploitation"],"summary":"Imports de comptes, par lot","description":"Ce que les établissements nous ont poussé, avec le compte des lignes reçues, rattachées, rejetées et désactivées.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"etablissement","in":"query","required":false,"schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string"}},{"name":"avec_rejets","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Imports de comptes, par lot","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/lots/{id}/lignes":{"get":{"tags":["Exploitation"],"summary":"Détail d'un lot, ligne à ligne","description":"En ajout seul. Un lot antérieur à l'enregistrement du détail ne rend PAS une liste vide : il rend `etat: \"non_consigne\"` et ses compteurs — zéro est une affirmation.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"issue","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Détail d'un lot, ligne à ligne","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/niveaux-rapportes":{"get":{"tags":["Exploitation"],"summary":"Niveaux de vérification rapportés","description":"Lanala Pay ne vérifie l'identité de personne : chaque ligne porte son établissement source et sa date de déclaration.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"party_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"niveau","in":"query","required":false,"schema":{"type":"string"}},{"name":"etablissement","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Niveaux de vérification rapportés","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/alertes":{"get":{"tags":["Exploitation"],"summary":"Alertes de conformité","description":"Réservé à la console.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"statut","in":"query","required":false,"schema":{"type":"string"}},{"name":"severite","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Alertes de conformité","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/litiges":{"get":{"tags":["Exploitation"],"summary":"Litiges ouverts sur des ordres","description":"Réservé à la console.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"statut","in":"query","required":false,"schema":{"type":"string"}},{"name":"motif","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Litiges ouverts sur des ordres","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/journal-audit":{"get":{"tags":["Exploitation"],"summary":"Journal d'audit","description":"En ajout seul : ce qui a été fait, par qui, quand.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"acteur","in":"query","required":false,"schema":{"type":"string"}},{"name":"action","in":"query","required":false,"schema":{"type":"string"}},{"name":"entite","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Journal d'audit","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/journal-consultation":{"get":{"tags":["Exploitation"],"summary":"Journal des consultations de dossiers","description":"Qui a regardé quoi, quand, pourquoi. Contrepoids du pouvoir de la console.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"party_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"acteur","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"action","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Journal des consultations de dossiers","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/rapprochements":{"get":{"tags":["Exploitation"],"summary":"Historique des rapprochements quotidiens","description":"N contrôles · M conformes · K écarts.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"avec_ecarts","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Historique des rapprochements quotidiens","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}},"/api/admin/webhooks-sortants":{"get":{"tags":["Intégration"],"summary":"Suivi des remises sortantes","description":"Audience, état, tentatives et dernière réponse du destinataire.","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Plafonnée à 200 côté serveur."},{"name":"curseur","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur opaque rendu par l'appel précédent (`curseur_suivant`). Ne jamais le construire soi-même."},{"name":"audience","in":"query","required":false,"schema":{"type":"string"}},{"name":"statut","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"depuis","in":"query","required":false,"schema":{"type":"string"}},{"name":"jusqu_a","in":"query","required":false,"schema":{"type":"string"}},{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."}],"responses":{"200":{"description":"Suivi des remises sortantes","content":{"application/json":{"schema":{"type":"object","required":["donnees","curseur_suivant"],"properties":{"donnees":{"type":"array","items":{"type":"object"}},"curseur_suivant":{"type":["string","null"],"description":"`null` quand la liste est épuisée."}}}}}},"401":{"description":"Authentification requise.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"422":{"description":"Curseur illisible ou paramètre invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}},"post":{"tags":["Intégration"],"summary":"Traiter immédiatement les remises échues","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."}],"responses":{"200":{"description":"Remises tentées et résultats."}}}},"/api/admin/webhooks-sortants/{id}/rejouer":{"post":{"tags":["Intégration"],"summary":"Rejouer une remise en échec ou en lettre morte","description":"Réarme l'échéance puis tente immédiatement. Ne crée jamais un nouvel événement.","parameters":[{"name":"x-lanala-admin-token","in":"header","required":true,"schema":{"type":"string"},"description":"Jeton d'administration. À défaut, un jeton d'utilisateur interne actif dans l'en-tête Authorization."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer la même clé avec le même corps renvoie la réponse d'origine ; un corps différent renvoie 409."},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Remise rejouée."},"404":{"description":"Remise inconnue.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}},"409":{"description":"Seules les remises en échec ou en lettre morte sont rejouables.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"components":{"schemas":{"Erreur":{"type":"object","properties":{"code":{"type":"string","enum":["non_autorise","titulaire_introuvable","trop_de_requetes","motif_consultation_requis","motif_absent","motif_requis","double_validation_requise","double_validation_meme_personne","environnement_interdit","test_interdit_en_production","visibilite_interdite","origine_invalide","origine_manquante","activation_sans_test_reussi","historique_present","capacite_inconnue","usage_inconnu","reference_invalide","secret_indisponible","connecteur_desactive","non_implemente","requete_invalide","corps_invalide","champs_manquants","parametres_incomplets","valeur_invalide","date_invalide","fenetre_invalide","identifiant_manquant","curseur_invalide","idempotency_key_reutilisee","statut_invalide","etat_invalide","sens_invalide","decision_inconnue","audience_invalide","montant_invalide","frais_invalides","aucune_regle_tarifaire","produit_inconnu","devis_introuvable","devis_deja_consomme","devis_expire","alias_introuvable","alias_beneficiaire_introuvable","beneficiaire_introuvable","type_alias_inconnu","ordre_introuvable","ordre_id_invalide","source_absente","acheminement_introuvable","pacs002_rejet","identite_incomplete","numero_absent","numero_invalide","numero_non_verifie","verification_introuvable","code_expire","code_invalide","trop_d_essais","aucune_tentative","frequence_code_depassee","rattachement_introuvable","reference_externe_absente","lu_le_absent","dossier_introuvable","dossier_incomplet","dossier_deja_decide","niveau_invalide","piece_introuvable","piece_expiree","type_piece_invalide","empreinte_piece_deja_utilisee","empreinte_vivacite_deja_utilisee","chemin_stockage_invalide","motif_refus_inconnu","note_refus_obligatoire","declaration_ppe_incomplete","marchand_introuvable","marchand_absent","aucun_marchand","marchand_non_autorise","point_de_vente_inconnu","caisse_introuvable","caisse_incomplete","caissier_introuvable","caissier_incomplet","qr_introuvable","type_qr_invalide","etablissement_non_raccorde","connecteur_absent","capacite_non_declaree","disjoncteur_ouvert","endpoint_inconnu","enregistrement_refuse","signature_invalide","horodatage_hors_tolerance","event_type_manquant","external_event_id_manquant","deja_traite","traitement_en_echec","remise_introuvable","remise_non_rejouable","rapprochement_non_execute","introuvable","erreur_interne"]},"message":{"type":"string"}},"required":["code","message"]},"CatalogueCodesErreur":{"type":"object","description":"Code stable → libellé français. Un code ne se renomme jamais et ne change jamais de sens.","properties":{"non_autorise":{"type":"string","const":"Vous n'êtes pas autorisé à effectuer cette opération."},"titulaire_introuvable":{"type":"string","const":"Aucun titulaire n'est rattaché à ce compte."},"trop_de_requetes":{"type":"string","const":"Trop de demandes en peu de temps. Patientez un instant."},"motif_consultation_requis":{"type":"string","const":"La consultation de ce dossier exige un motif."},"motif_absent":{"type":"string","const":"La consultation d'un dossier personnel exige un motif."},"motif_requis":{"type":"string","const":"Un motif est obligatoire pour cette opération."},"double_validation_requise":{"type":"string","const":"Cette opération exige la validation de deux agents."},"double_validation_meme_personne":{"type":"string","const":"Une même personne ne peut pas valider seule."},"environnement_interdit":{"type":"string","const":"Opération interdite dans cet environnement."},"test_interdit_en_production":{"type":"string","const":"Les tests sont interdits en production."},"visibilite_interdite":{"type":"string","const":"Cet élément ne vous est pas visible."},"origine_invalide":{"type":"string","const":"Origine attendue sous la forme https://exemple.tld."},"origine_manquante":{"type":"string","const":"Indiquez l'origine concernée."},"activation_sans_test_reussi":{"type":"string","const":"Un connecteur ne devient actif qu'après un test réel réussi."},"historique_present":{"type":"string","const":"Cet élément porte un historique : il se retire, il ne s'efface pas."},"capacite_inconnue":{"type":"string","const":"Cette capacité de connecteur n'existe pas."},"usage_inconnu":{"type":"string","const":"Cet usage de secret n'existe pas."},"reference_invalide":{"type":"string","const":"Référence de secret attendue sous la forme env:NOM_DE_VARIABLE."},"secret_indisponible":{"type":"string","const":"Le secret déclaré n'est pas posé sur ce déploiement."},"connecteur_desactive":{"type":"string","const":"Ce connecteur est désactivé."},"non_implemente":{"type":"string","const":"Cette fonction n'est pas encore ouverte."},"requete_invalide":{"type":"string","const":"La requête est mal formée."},"corps_invalide":{"type":"string","const":"Le corps de la requête est illisible."},"champs_manquants":{"type":"string","const":"Des champs obligatoires sont absents."},"parametres_incomplets":{"type":"string","const":"Des paramètres obligatoires sont absents."},"valeur_invalide":{"type":"string","const":"Une valeur fournie n'est pas acceptable."},"date_invalide":{"type":"string","const":"La date fournie n'est pas valide."},"fenetre_invalide":{"type":"string","const":"La fenêtre de dates est invalide."},"identifiant_manquant":{"type":"string","const":"Un identifiant obligatoire est absent."},"curseur_invalide":{"type":"string","const":"Le curseur de pagination est illisible ou périmé."},"idempotency_key_reutilisee":{"type":"string","const":"Cette clé d'idempotence a déjà servi pour une autre demande."},"statut_invalide":{"type":"string","const":"Ce statut n'est pas reconnu."},"etat_invalide":{"type":"string","const":"Trois issues seulement : réussi, échoué ou indéterminé."},"sens_invalide":{"type":"string","const":"Le sens de l'opération est invalide."},"decision_inconnue":{"type":"string","const":"Cette décision n'est pas reconnue."},"audience_invalide":{"type":"string","const":"L'audience demandée n'existe pas."},"montant_invalide":{"type":"string","const":"Le montant doit être un entier strictement positif, en francs guinéens."},"frais_invalides":{"type":"string","const":"Les frais doivent être un entier en francs guinéens."},"aucune_regle_tarifaire":{"type":"string","const":"Aucune règle tarifaire ne couvre cette opération."},"produit_inconnu":{"type":"string","const":"Ce produit n'existe pas au catalogue tarifaire."},"devis_introuvable":{"type":"string","const":"Ce devis n'existe pas."},"devis_deja_consomme":{"type":"string","const":"Ce devis a déjà été consommé."},"devis_expire":{"type":"string","const":"Ce devis a expiré. Demandez-en un nouveau."},"alias_introuvable":{"type":"string","const":"Cet identifiant n'a pas pu être résolu."},"alias_beneficiaire_introuvable":{"type":"string","const":"L'identifiant du bénéficiaire n'a pas pu être résolu."},"beneficiaire_introuvable":{"type":"string","const":"Le bénéficiaire n'a pas pu être identifié."},"type_alias_inconnu":{"type":"string","const":"Ce type d'identifiant n'est pas reconnu."},"ordre_introuvable":{"type":"string","const":"Cet ordre n'existe pas."},"ordre_id_invalide":{"type":"string","const":"L'identifiant d'ordre est invalide."},"source_absente":{"type":"string","const":"Un sort déclaré exige l'établissement qui le déclare et l'instant de sa déclaration."},"acheminement_introuvable":{"type":"string","const":"Aucun acheminement n'est connu pour cet ordre."},"pacs002_rejet":{"type":"string","const":"L'établissement a rejeté le message de règlement."},"identite_incomplete":{"type":"string","const":"Le prénom et le nom sont requis pour créer un titulaire."},"numero_absent":{"type":"string","const":"Le numéro de téléphone est absent."},"numero_invalide":{"type":"string","const":"Ce numéro de téléphone n'est pas valide."},"numero_non_verifie":{"type":"string","const":"Ce numéro n'a pas été vérifié par code SMS."},"verification_introuvable":{"type":"string","const":"Cette vérification de numéro n'existe pas."},"code_expire":{"type":"string","const":"Ce code a expiré. Demandez-en un nouveau."},"code_invalide":{"type":"string","const":"Ce code ne correspond pas."},"trop_d_essais":{"type":"string","const":"Trop d'essais. Demandez un nouveau code."},"aucune_tentative":{"type":"string","const":"Aucune tentative n'est en cours."},"frequence_code_depassee":{"type":"string","const":"Un code a déjà été envoyé récemment. Patientez."},"rattachement_introuvable":{"type":"string","const":"Ce compte rattaché n'existe pas."},"reference_externe_absente":{"type":"string","const":"L'identifiant externe du compte est requis."},"lu_le_absent":{"type":"string","const":"Une lecture sans instant d'observation n'est pas une lecture."},"dossier_introuvable":{"type":"string","const":"Ce dossier de vérification n'existe pas."},"dossier_incomplet":{"type":"string","const":"Ce dossier est incomplet."},"dossier_deja_decide":{"type":"string","const":"Ce dossier a déjà été décidé."},"niveau_invalide":{"type":"string","const":"Ce niveau de vérification n'existe pas."},"piece_introuvable":{"type":"string","const":"Cette pièce d'identité n'existe pas."},"piece_expiree":{"type":"string","const":"La pièce d'identité déposée est expirée."},"type_piece_invalide":{"type":"string","const":"Ce type de pièce n'est pas accepté."},"empreinte_piece_deja_utilisee":{"type":"string","const":"Cette pièce a déjà été déposée par un autre dossier."},"empreinte_vivacite_deja_utilisee":{"type":"string","const":"Cette capture a déjà été utilisée."},"chemin_stockage_invalide":{"type":"string","const":"Le fichier doit résider dans le compartiment privé."},"motif_refus_inconnu":{"type":"string","const":"Ce motif de refus n'est pas reconnu."},"note_refus_obligatoire":{"type":"string","const":"Une note est obligatoire pour ce motif de refus."},"declaration_ppe_incomplete":{"type":"string","const":"La déclaration de personne politiquement exposée est incomplète."},"marchand_introuvable":{"type":"string","const":"Ce marchand n'existe pas."},"marchand_absent":{"type":"string","const":"Aucun marchand n'est rattaché à ce compte."},"aucun_marchand":{"type":"string","const":"Aucun marchand n'est rattaché à ce compte."},"marchand_non_autorise":{"type":"string","const":"Ce marchand ne vous appartient pas."},"point_de_vente_inconnu":{"type":"string","const":"Ce point de vente n'existe pas."},"caisse_introuvable":{"type":"string","const":"Ce point de vente n'existe pas."},"caisse_incomplete":{"type":"string","const":"Le nom du point de vente est requis."},"caissier_introuvable":{"type":"string","const":"Ce caissier n'existe pas."},"caissier_incomplet":{"type":"string","const":"Le nom du caissier est requis."},"qr_introuvable":{"type":"string","const":"Ce QR n'existe pas."},"type_qr_invalide":{"type":"string","const":"Ce type de QR n'est pas reconnu."},"etablissement_non_raccorde":{"type":"string","const":"Cet établissement n'est pas raccordé."},"connecteur_absent":{"type":"string","const":"Aucun connecteur n'est configuré pour cet établissement."},"capacite_non_declaree":{"type":"string","const":"Ce connecteur ne déclare pas cette capacité."},"disjoncteur_ouvert":{"type":"string","const":"Établissement momentanément injoignable. Réessayez plus tard."},"endpoint_inconnu":{"type":"string","const":"Ce point de terminaison n'existe pas."},"enregistrement_refuse":{"type":"string","const":"L'enregistrement a été refusé."},"signature_invalide":{"type":"string","const":"La signature du message ne correspond pas."},"horodatage_hors_tolerance":{"type":"string","const":"L'horodatage du message est hors de la fenêtre acceptée."},"event_type_manquant":{"type":"string","const":"Le type d'événement est absent."},"external_event_id_manquant":{"type":"string","const":"L'identifiant d'événement externe est absent."},"deja_traite":{"type":"string","const":"Cet événement a déjà été traité."},"traitement_en_echec":{"type":"string","const":"Le traitement de cet événement a échoué."},"remise_introuvable":{"type":"string","const":"Cette remise n'existe pas."},"remise_non_rejouable":{"type":"string","const":"Seules les remises en échec ou en lettre morte sont rejouables."},"rapprochement_non_execute":{"type":"string","const":"Aucun rapprochement n'a été exécuté pour cette date."},"introuvable":{"type":"string","const":"Élément inconnu."},"erreur_interne":{"type":"string","const":"Une erreur interne est survenue. Communiquez la référence ci-jointe au support Lanala Pay."}}}}}}