Documentation d'intégration · API Datacopro

Encaissements copropriétaires

Comment consulter, enregistrer, faire évoluer le statut de validation, comptabiliser et supprimer les règlements reçus des copropriétaires d'une copropriété.

À propos de ce guide. Ce document décrit uniquement le contrat de l'API Datacopro : les appels HTTP disponibles, leurs paramètres et les réponses qu'ils renvoient. Aucune connaissance d'un logiciel de gestion de copropriété en particulier n'est nécessaire pour le suivre — les cas d'usage cités servent uniquement à motiver l'ordre des appels.
01

Modèle & périmètre

Tous les appels de ce guide sont adressés à une copropriété précise (idCopro) et à un exercice comptable précis (idExercice) de cette copropriété : c'est le périmètre racine de chaque route. Un encaissement appartient toujours à un seul exercice — celui déterminé par sa date de paiement au moment de sa création (voir Parcours C).

Encaissement racine

Un règlement reçu d'un copropriétaire (ou un remboursement, si son montant est négatif), rattaché à un exercice et à un copropriétaire.

idmontantdate dateCreationcoproprietairecontact* modePaiementnumero*referenceComptable libellenotebanque* planComptable* validationdepot*jeuxDecritures[] details[]documents[] estSupprimableestModifiableestRapproche exercicecreateurContexte

jeuxDecritures liste les écritures comptables déjà générées pour cet encaissement (lecture seule) — un encaissement peut exister sans aucune, si sa comptabilisation n'a pas encore été déclenchée (Parcours C).

estSupprimable et estModifiable ne sont pas des indicateurs stockés : ils reflètent, au moment de la lecture, le résultat des mêmes règles générales que celles réappliquées à la modification et à la suppression (dépôt bancaire associé, exercice clôturé — voir Limites & pièges connus). estSupprimable ajoute une condition propre à la suppression seule (rapprochement bancaire partiel ou total), qu'estModifiable ne couvre pas.

planComptable désigne le poste comptable d'imputation ; il n'est facultatif qu'à la création, et seulement pour certains modes de paiement (voir Parcours C). createurContexte identifie l'auteur de la création de l'encaissement (utilisateur humain ou client API) — champ de traçabilité en lecture seule, sans effet sur le comportement des autres routes de ce guide.

Ligne de répartition details[]

Permet de répartir un même règlement entre plusieurs destinations comptables et/ou plusieurs lots plutôt que d'utiliser un montant global unique.

montanttypelibellelot*

type prend l'une de cinq valeurs : charges, avances, travaux, emprunts, fonds travaux.

Validation validation

Trois circuits de validation indépendants, chacun avec son propre statut : comptable, administrative, metier.

statutdescriptiondate*

* date est renvoyée en lecture mais ignorée si elle est soumise en écriture — voir Parcours D.

02

Contrôle d'accès

Chaque appel nécessite un jeton d'accès OAuth2, et le client doit être explicitement autorisé sur la copropriété visée par idCopro, sinon la réponse est un 403. L'exercice et, selon la route, l'encaissement référencés dans le chemin sont vérifiés comme appartenant réellement à la copropriété — et l'encaissement à l'exercice — passés dans l'URL : un identifiant valide mais rattaché ailleurs est refusé, même si le client est par ailleurs autorisé sur la copropriété. Aucune restriction supplémentaire par rôle n'existe selon le type d'opération réalisée sur un encaissement, y compris pour faire évoluer l'un des trois circuits de validation (Parcours D).

Base URL Toutes les routes de ce guide sont préfixées /v2 et servies depuis https://syndic.datacopro.org en production, ou https://preprod-syndic.datacopro.org sur la plateforme de test.
03

Parcours fonctionnels

Ces six parcours suivent le cycle de vie réel d'un règlement reçu d'un copropriétaire : de sa consultation à son enregistrement, sa comptabilisation, sa validation, jusqu'à la régénération de ses écritures ou sa suppression.

A

Lister les encaissements d'un exercice

Cas d'usage : afficher l'historique des règlements reçus par une copropriété sur une période donnée.

GET/v2/copro/{idCopro}/exercice/{idExercice}/encaissements.json

Un encaissement appartient à un seul exercice : afficher l'historique complet d'une copropriété suppose de répéter cet appel pour chaque exercice à couvrir — il n'existe pas de route qui liste directement tous les encaissements d'une copropriété tous exercices confondus.

Pourquoi La réponse est mise en cache côté serveur par copropriété, exercice et jeu de filtres. Contrairement à d'autres listes de l'API, cette route n'accepte ni tri ni pagination : l'intégralité des encaissements de l'exercice, une fois filtrés, est toujours renvoyée en un seul appel.
Limite Le paramètre filters n'a pas un coût uniforme selon le champ filtré : un filtre sur un champ directement indexable bénéficie d'une présélection rapide, tandis qu'un filtre sur un champ plus complexe reste correctement appliqué au résultat final, mais après avoir d'abord chargé l'ensemble des encaissements de l'exercice — un coût qui croît avec la taille de l'historique de la copropriété, quel que soit le nombre de résultats effectivement retenus par le filtre.
B

Consulter un encaissement précis

Cas d'usage : récupérer l'état actuel d'un encaissement avant d'agir dessus — par exemple pour connaître le statut courant de chaque circuit de validation avant de le faire évoluer (Parcours D), ou pour confirmer qu'un encaissement créé plus tôt existe bien (Parcours C).

GET/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.json
C

Enregistrer un nouvel encaissement

Cas d'usage : saisir un règlement reçu d'un copropriétaire — par chèque, virement, prélèvement ou tout autre mode de paiement — et déclencher (ou non) la génération immédiate de sa comptabilité.

POST/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/paiement/{idCstModePaiement}.json
{
  "encaissement": {
    "numero": "1234567",
    "libelle": "Règlement appel de fonds T3",
    "referenceComptable": "",
    "date": "2026-09-05 00:00:00",
    "coproprietaire": 9931,
    "contact": null,
    "montant": 45000,
    "banque": "BNP Paribas",
    "comptabilite": 1
  }
}

coproprietaire et un montant non nul (via montant ou via details) sont obligatoires ; les montants s'expriment en centimes. contact permet d'attribuer le paiement à un tiers payeur — par exemple un locataire réglant pour le compte du propriétaire — distinct du copropriétaire bénéficiaire.

Pourquoi Le poste comptable d'imputation (planComptable) est facultatif, mais ne se déduit automatiquement que pour deux modes de paiement précis : chèque (identifiant 1) et prélèvement (identifiant 4), sur leur poste d'attente respectif — c'est pourquoi l'exemple ci-dessus, qui enregistre un chèque, ne le fournit pas. Pour tout autre mode de paiement — virement, espèces, carte bancaire, télérèglement… — planComptable: <id> doit être ajouté explicitement dans l'objet encaissement, au même niveau que montant ou banque, sinon la création échoue.
Pourquoi comptabilite: 1 déclenche la génération immédiate des écritures comptables de l'encaissement dans le même appel ; à 0 ou en son absence (valeur par défaut), l'encaissement est enregistré sans aucune écriture — utile pour une saisie en plusieurs temps. Un encaissement resté sans comptabilité se repère à la lecture par un tableau jeuxDecritures vide, et se comptabilise ensuite via un appel séparé (Parcours E).
Limite date doit être comprise entre le début de l'exercice ciblé par la route et aujourd'hui inclus — une date future ou antérieure au début de l'exercice est refusée. Comme alternative (ou en complément) à montant, details permet de répartir le règlement entre plusieurs destinations comptables ou plusieurs lots ; dans ce cas montant peut valoir 0, mais laisser à la fois montant à 0 et details vide fait échouer la création.
Limite L'encaissement est persisté dès sa création, indépendamment du résultat de la comptabilisation immédiate demandée via comptabilite: 1 — si cette comptabilisation échoue, l'encaissement existe malgré tout. En cas de doute sur le résultat d'un appel, mieux vaut consulter l'encaissement (Parcours B) que retenter sa création.
D

Faire évoluer le statut de validation

Cas d'usage : faire progresser un encaissement dans un circuit de validation à plusieurs regards (comptable, administratif, métier) avant qu'il ne soit considéré comme définitivement acquis.

PUT/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.json
{
  "validation": {
    "comptable": { "statut": "validé" }
  }
}

Le même appel sert aussi à modifier d'autres champs de l'encaissement (voir référence des endpoints) ; seul l'objet validation est représenté ici. Les trois circuits (comptable, administrative, metier) sont indépendants et se mettent à jour séparément — modifier l'un ne touche pas le statut des deux autres.

Limite Seules trois valeurs de statut sont acceptées : à valider, indéfini, validé. Une valeur hors de cette liste, ou un nom de circuit inconnu, n'est ni rejeté ni signalé par une erreur : il est silencieusement ignoré, et le statut visé reste inchangé. De même, un champ date soumis dans l'objet de validation est toujours ignoré — la date de validation n'est jamais pilotable par ce biais.
Limite Comme toute modification de cet encaissement, faire évoluer un statut de validation est refusé — sans rien persister — si l'encaissement porte déjà un dépôt bancaire ou si son exercice est clôturé, les mêmes conditions que celles reflétées par estModifiable (voir Modèle & périmètre).
E

Générer ou régénérer les écritures comptables

Cas d'usage : comptabiliser un encaissement resté sans écriture après sa création (Parcours C), ou reconstruire ses écritures après une correction en amont (changement de poste comptable, de mode de paiement…).

POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/encaissement/{idEncaissement}.json
POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/encaissement/{idEncaissement}/rejouer.json

La première route génère un jeu d'écritures pour un encaissement qui n'en a encore aucun. La seconde annule le jeu existant puis en régénère un — c'est celle à utiliser si des écritures existent déjà.

Pourquoi « Rejouer » annule d'abord le jeu d'écritures existant, puis en régénère un nouveau ; si l'ancien jeu portait des rapprochements bancaires, l'API tente de les réassocier automatiquement au nouveau jeu sur la base des montants débit/crédit et du poste comptable concernés — un rapprochement qu'elle ne parvient pas à réassocier ainsi est supprimé plutôt que laissé orphelin.
Limite Contrairement à la suppression et aux autres modifications, « rejouer » ne revérifie pas que l'exercice n'est pas clôturé avant d'agir — l'appeler sur un encaissement d'un exercice clôturé peut donc réussir, alors que la modification ou la suppression du même encaissement serait refusée pour cette même raison.
Limite La route de génération (la première des deux) ne vérifie pas non plus qu'un jeu d'écritures existe déjà avant d'en créer un : l'appeler une deuxième fois sur le même encaissement crée un second jeu en doublon plutôt que d'échouer ou de la remplacer. Utiliser « rejouer » dès qu'un doute existe sur l'état déjà comptabilisé de l'encaissement.
F

Supprimer un encaissement

Cas d'usage : retirer un règlement saisi par erreur.

DELETE/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.json
Limite Un encaissement n'est supprimable que si, au moment même de la suppression : aucun dépôt bancaire ne lui est associé, son exercice n'est pas clôturé, et il n'est ni partiellement ni totalement rapproché. Ces trois conditions sont revérifiées côté serveur à cet instant précis, indépendamment de ce qu'indiquait estSupprimable à une lecture antérieure — une requête qui ne les respecte pas échoue en 400 avec un message explicite plutôt que de supprimer partiellement.
Pourquoi Supprimer un encaissement qui portait déjà un jeu d'écritures l'annule ; si une mutation de lot avait été traitée sur la base de ce règlement, elle est rejouée pour rester cohérente. La suppression a donc des effets de bord comptables, pas seulement le retrait de l'encaissement lui-même.
Illustration C'est ainsi qu'un logiciel de gestion existant présente ces règlements : un tableau chargé exercice par exercice (Parcours A, un appel par exercice affiché), avec un signalement visuel distinct pour tout encaissement encore sans comptabilité (jeuxDecritures vide) et un autre pour tout encaissement déjà rapproché — ce dernier état n'étant en pratique jamais supprimable (Parcours F). La régénération des écritures (Parcours E) y est réservée à un profil avancé de l'interface, par prudence : l'API elle-même ne restreint pourtant cette action à aucun rôle particulier (voir Contrôle d'accès).
04

Référence des endpoints

MéthodeRouteRôle
GET/v2/copro/{idCopro}/exercice/{idExercice}/encaissements.jsonListe des encaissements d'un exercice
GET/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.jsonDétail d'un encaissement
POST/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/paiement/{idCstModePaiement}.jsonCrée un encaissement
PUT/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.jsonModifie un encaissement (champs et/ou statut de validation)
DELETE/v2/copro/{idCopro}/exercice/{idExercice}/encaissement/{idEncaissement}.jsonSupprime un encaissement
POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/encaissement/{idEncaissement}.jsonGénère les écritures comptables d'un encaissement qui n'en a pas encore
POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/encaissement/{idEncaissement}/rejouer.jsonAnnule puis régénère les écritures comptables existantes
GET/v2/type/mode-paiement.jsonListe des modes de paiement disponibles (fournit idCstModePaiement)
GET/v2/copro/{idCopro}/coproprietaires.jsonListe des copropriétaires pouvant être désignés comme bénéficiaire

Toutes ces routes attendent une extension de format explicite en fin de chemin (par exemple .json). Les deux routes auxiliaires en bas de tableau ne portent pas de segment exercice : la liste des modes de paiement est globale, et la liste des copropriétaires est propre à la copropriété seule.

05

Paramètres transverses

La liste des encaissements d'un exercice accepte un paramètre de requête générique, commun à l'ensemble de l'API :

Coût réel, pas seulement de forme Contrairement à d'autres listes de l'API, celle des encaissements n'accepte ni sorts ni pagination : quel que soit le filtre appliqué, l'ensemble des résultats correspondants est toujours renvoyé en un seul appel — un point à anticiper pour une copropriété à l'historique de règlements volumineux.
06

Limites & pièges connus

✕
La liste des encaissements d'un exercice n'est ni triée ni paginée par l'API : elle renvoie toujours l'ensemble des résultats filtrés en une fois (Parcours A).
✕
Il n'existe pas de route listant tous les encaissements d'une copropriété tous exercices confondus : répéter l'appel de liste par exercice (Parcours A).
✕
Le poste comptable n'est déduit automatiquement qu'à la création d'un encaissement en chèque ou en prélèvement ; tout autre mode de paiement l'exige explicitement, sous peine d'échec (Parcours C).
✕
Créer un encaissement ne génère pas automatiquement sa comptabilité, sauf à le demander explicitement (comptabilite: 1) dans la même requête ; sans cela, un appel séparé est nécessaire (Parcours C, E).
✕
Un encaissement est persisté dès sa création, même si la comptabilisation immédiate demandée dans le même appel échoue : vérifier son existence en cas de doute plutôt que retenter la création (Parcours C).
✕
Un statut de validation hors des trois valeurs autorisées, ou un nom de circuit inconnu, est silencieusement ignoré sans erreur ni changement d'état (Parcours D).
✕
Régénérer les écritures comptables d'un encaissement (« rejouer ») ne revérifie pas que son exercice n'est pas clôturé, contrairement à la suppression et aux autres modifications (Parcours E).
✕
« Rejouer » les écritures d'un encaissement déjà rapproché n'est pas garanti sans effet sur ce rapprochement : s'il ne peut pas être réassocié automatiquement au nouveau jeu d'écritures, il est supprimé plutôt que conservé (Parcours E).
✕
Appeler la route de génération des écritures (et non « rejouer ») une deuxième fois sur le même encaissement crée un second jeu en doublon, faute de vérification d'existence côté serveur (Parcours E).
✕
Un encaissement rapproché, même partiellement, n'est jamais supprimable — même si son exercice est ouvert et qu'aucun dépôt ne lui est associé (Parcours F).
✕
Un encaissement n'est ni modifiable ni supprimable dès lors qu'un dépôt bancaire lui est associé ou que son exercice est clôturé : cette même règle bloque aussi bien une simple évolution du statut de validation (Parcours D) que la suppression (Parcours F).
07

Questions de validation

Q1. Si je crée un encaissement sans demander explicitement sa comptabilisation, l'API la génère-t-elle plus tard automatiquement, par exemple à la clôture de l'exercice ?
Non : rien dans le contrat de création ne déclenche une comptabilisation différée. Un encaissement créé sans comptabilite: 1 reste sans aucune écriture tant qu'un appel explicite de génération ou de rejeu n'a pas été effectué — un tableau jeuxDecritures vide à la lecture en est le signal. Parcours C, E
Q2. Un encaissement dont estSupprimable vaut true au moment où je le lis restera-t-il supprimable si je le supprime juste après ?
Pas nécessairement, mais l'API ne prend pas ce risque en silence : les mêmes conditions (dépôt associé, exercice clôturé, rapprochement partiel ou total) sont revérifiées au moment même de la suppression, indépendamment de la valeur lue auparavant. Un encaissement rapproché entre-temps, par exemple, sera refusé en 400 à la suppression même si une lecture antérieure indiquait estSupprimable: true. Parcours F, Modèle & périmètre
Q3. Puis-je régénérer les écritures comptables d'un encaissement dont l'exercice a été clôturé après sa création ?
Oui, et c'est délibérément différent du reste de l'API sur ce point : contrairement à la suppression ou à la modification d'un encaissement, la route de régénération des écritures (« rejouer ») n'effectue aucune vérification de clôture d'exercice avant d'agir. Un appel sur un encaissement d'un exercice clôturé peut donc réussir, alors que le même encaissement serait refusé en modification ou en suppression pour cette unique raison — avec une réserve importante : si l'encaissement portait déjà un rapprochement bancaire, celui-ci n'est reconstitué qu'à condition que l'API parvienne à le réassocier automatiquement au nouveau jeu d'écritures ; à défaut, il est supprimé plutôt que conservé. Réussir n'équivaut donc pas ici à « sans effet de bord » : rejouer un encaissement déjà rapproché n'est jamais strictement anodin, exercice clôturé ou non. Parcours E