Documentation d'intégration · API Datacopro

Transferts bancaires

Comment enregistrer, consulter, supprimer et recomptabiliser un mouvement de trésorerie entre deux comptes bancaires 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

Un transfert représente un mouvement de trésorerie entre deux comptes bancaires d'une même copropriété — par exemple du compte courant vers un compte d'épargne. 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 transfert appartient à l'exercice ciblé au moment de sa création, et sa date doit tomber dans les bornes de cet exercice — faute de quoi la création échoue.

Transfert racine

Un mouvement de fonds entre deux comptes bancaires de la copropriété, sur un exercice donné.

iddatemontant modePaiementnumeroreferenceComptable notelibelletags planComptableSourceplanComptableDestination exercicevalidation jeuxDecrituresestRapprocheestSupprimable dateCreation

jeuxDecritures liste les écritures comptables déjà générées pour ce transfert (lecture seule).

estRapproche n'est vrai que si l'ensemble des écritures bancaires du transfert sont couvertes par un rapprochement dont le solde correspond exactement — une seule écriture non couverte suffit à le faire passer à faux. Ce n'est pas le même critère que celui qui bloque la suppression (voir estSupprimable ci-dessous), qui se déclenche dès qu'une seule écriture est rapprochée : un transfert peut donc être estRapproche: false tout en étant déjà non supprimable.

estSupprimable n'est pas un indicateur stocké : il reflète, au moment de la lecture, le résultat des mêmes règles que celles appliquées à la suppression (exercice clôturé, ou écriture déjà rapprochée — voir Limites & pièges connus). Il n'existe pas de champ équivalent estModifiable, cohérent avec l'absence de route de modification (voir Parcours D).

note, libelle, tags et validation sont des champs libres, sans effet sur les règles de création ou de suppression décrites dans ce guide. comptabilite, présent dans le corps de création (Parcours B), est un indicateur de commande et non un champ persistant : il ne réapparaît jamais dans les réponses de lecture — pour savoir si un transfert a été comptabilisé, il faut regarder si jeuxDecritures est vide.

Mode de paiement modePaiement

Le moyen utilisé pour le mouvement — chèque, virement, prélèvement. Se récupère via une route de référence globale plutôt que d'être codé en dur.

idlibelle

Son id est le paramètre de chemin attendu à la création d'un transfert (Parcours B).

Compte comptable planComptableSource / Destination

Le compte comptable qui émet, et celui qui reçoit le mouvement. Doivent être deux comptes bancaires de la copropriété, et impérativement différents l'un de l'autre.

idlibellecomptetype
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. Toute ressource imbriquée dans l'URL (l'exercice, le transfert) est en plus vérifiée comme appartenant réellement à la copropriété — et, pour un transfert, à l'exercice — passés dans le chemin : un identifiant valide mais rattaché ailleurs est refusé, même si le client est par ailleurs autorisé sur la copropriété.

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 quatre parcours suivent le cycle de vie réel d'un transfert : de sa consultation à sa saisie, sa comptabilisation, jusqu'à sa suppression.

A

Lister les transferts d'un exercice

Cas d'usage : afficher l'historique des mouvements de trésorerie entre comptes bancaires d'une copropriété, sur un exercice donné.

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

Un transfert appartient à un seul exercice : afficher tous les transferts 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 transferts d'une copropriété tous exercices confondus.

Pourquoi La réponse est mise en cache côté serveur par exercice, y compris pour un jeu de filtres donné — comme pour la plupart des listes de cette API.
B

Créer un transfert entre deux comptes bancaires

Cas d'usage : enregistrer un virement interne — par exemple la constitution d'une épargne travaux à partir du compte courant — et déclencher (ou non) la génération immédiate des écritures comptables.

POST/v2/copro/{idCopro}/exercice/{idExercice}/transfert/paiement/{idCstModePaiement}.json
{
  "transfert": {
    "date": "2026-09-10 00:00:00",
    "montant": 500000,
    "planComptableSource": 55010,
    "planComptableDestination": 55020,
    "referenceComptable": "VIR-2026-0091",
    "note": "Constitution de l'épargne travaux",
    "tags": [],
    "comptabilite": 1
  }
}

planComptableSource et planComptableDestination sont obligatoires ; les montants s'expriment en centimes. {idCstModePaiement}, dans le chemin, désigne le mode de paiement du mouvement — à obtenir via /v2/type/mode-paiement.json plutôt qu'à coder en dur.

Pourquoi comptabilite: 1 déclenche la génération immédiate des écritures comptables du transfert ; à 0, le transfert est enregistré sans aucune écriture — la comptabilisation peut être déclenchée plus tard (Parcours C).
Limite date doit tomber dans les bornes de l'exercice ciblé par la route (entre sa date de début et sa date de fin) au moment de la création. planComptableSource et planComptableDestination doivent être deux comptes distincts : la création échoue avec une erreur explicite s'ils sont identiques. numero n'est conservé que si le mode de paiement choisi est un chèque : pour tout autre mode, une valeur soumise pour numero est silencieusement ignorée et remplacée par une chaîne vide, sans erreur.
C

Régénérer les écritures comptables d'un transfert

Cas d'usage : déclencher la comptabilisation d'un transfert créé sans comptabilité immédiate (comptabilite: 0), ou recalculer ses écritures après une correction faite ailleurs dans le dossier comptable qui les affecte indirectement.

POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/transfert/{idExerciceTransfert}/rejouer.json

Ce point d'entrée est générique : le même chemin sert à rejouer les écritures de plusieurs types d'objets comptables d'un exercice. Pour un transfert, la valeur littérale transfert est attendue dans le segment de type, et l'identifiant du transfert dans le segment suivant.

Pourquoi Si le transfert a déjà des écritures comptables, elles sont d'abord annulées puis regénérées — l'opération remplace donc l'état comptable existant plutôt que de le compléter, que le transfert ait déjà été comptabilisé ou non.
Limite Si le transfert avait déjà fait l'objet d'un rapprochement bancaire, l'opération tente de le réassocier automatiquement aux nouvelles écritures générées (même compte, même montant) ; un rapprochement qui ne peut pas être réassocié ainsi est supprimé, sans qu'aucun avertissement ne le signale dans la réponse. Un rapprochement déjà en place sur un transfert ne doit donc pas être considéré comme garanti de survivre à un rejeu de ses écritures.
D

Supprimer un transfert

Cas d'usage : annuler un transfert saisi par erreur.

DELETE/v2/copro/{idCopro}/exercice/{idExercice}/transfert/{idExerciceTransfert}.json
Pourquoi Il n'existe pas de route de modification pour un transfert. Supprimer puis recréer — sous réserve que les conditions ci-dessous le permettent — est le seul moyen de corriger un transfert déjà enregistré (montant, comptes, date...).
Limite La suppression est refusée en 400 dans deux cas indépendants : l'exercice du transfert est déjà clôturé, ou l'une des écritures comptables du transfert est déjà couverte par un rapprochement bancaire. Dans ce second cas, le rapprochement concerné doit d'abord être défait avant de pouvoir supprimer le transfert.
04

Référence des endpoints

MéthodeRouteRôle
GET/v2/copro/{idCopro}/exercice/{idExercice}/transferts.jsonListe des transferts d'un exercice
GET/v2/copro/{idCopro}/exercice/{idExercice}/transfert/{idExerciceTransfert}.jsonDétail d'un transfert
POST/v2/copro/{idCopro}/exercice/{idExercice}/transfert/paiement/{idCstModePaiement}.jsonCrée un transfert
DELETE/v2/copro/{idCopro}/exercice/{idExercice}/transfert/{idExerciceTransfert}.jsonSupprime un transfert
POST/v2/copro/{idCopro}/exercice/{idExercice}/ecritures/transfert/{idExerciceTransfert}/rejouer.jsonRégénère les écritures comptables du transfert
GET/v2/type/mode-paiement.jsonListe des modes de paiement disponibles (route de référence, hors périmètre copropriété)

Toutes ces routes attendent une extension de format explicite en fin de chemin (par exemple .json).

05

Paramètres transverses

La liste des transferts d'un exercice accepte les mêmes familles de paramètres de requête génériques que le reste de l'API :

06

Limites & pièges connus

✕
Aucune route de modification n'existe pour un transfert : le corriger implique de le supprimer puis d'en créer un nouveau, sous réserve des conditions de suppression (Parcours D).
✕
numero n'est conservé que pour le mode de paiement chèque ; pour tout autre mode, il est silencieusement vidé sans erreur (Parcours B).
✕
planComptableSource et planComptableDestination doivent être deux comptes distincts, sinon la création échoue (Parcours B).
✕
La suppression d'un transfert est bloquée si son exercice est clôturé, ou si une de ses écritures est déjà rapprochée — ces deux conditions sont indépendantes (Parcours D).
✕
Rejouer les écritures d'un transfert peut supprimer un rapprochement bancaire existant, sans avertissement, s'il ne peut pas être automatiquement réassocié aux nouvelles écritures générées (Parcours C).
✕
Le montant s'exprime en centimes, aussi bien à l'écriture qu'à la lecture (Parcours B).
✕
estRapproche et estSupprimable ne réagissent pas au même seuil de rapprochement : un transfert peut déjà être bloqué en suppression (une seule écriture rapprochée, même partiellement) tout en restant estRapproche: false (qui exige que toutes les écritures bancaires soient intégralement couvertes). Ne pas utiliser estRapproche pour anticiper si une suppression réussira — seul estSupprimable le reflète (Modèle & périmètre).
07

Questions de validation

Q1. Je me suis trompé sur le montant ou le compte de destination d'un transfert déjà créé — comment le corriger ?
Il n'existe pas de route de modification : la seule façon de corriger un transfert est de le supprimer puis d'en créer un nouveau avec les bonnes valeurs. La suppression elle-même n'est possible que si l'exercice du transfert n'est pas clôturé et qu'aucune de ses écritures n'est déjà rapprochée — dans ce dernier cas, le rapprochement doit d'abord être défait. Parcours D
Q2. J'ai créé un transfert avec comptabilite: 0 pour le saisir sans le comptabiliser tout de suite. Comment déclencher la comptabilisation ensuite ?
En appelant la route de rejeu des écritures sur ce transfert : elle génère les écritures manquantes exactement comme le ferait une création avec comptabilite: 1. La même route sert aussi à recalculer des écritures déjà existantes — dans ce cas, elles sont d'abord annulées puis reconstruites, pas simplement complétées ; si un rapprochement bancaire existant ne peut pas être réassocié automatiquement aux nouvelles écritures, il est supprimé sans avertissement. Pour un transfert créé avec comptabilite: 0 ce risque ne se pose pas (il n'y a encore rien à rapprocher), mais il devient réel dès que la route est utilisée pour recalculer des écritures déjà rapprochées. Parcours C
Q3. Un transfert dont l'exercice est toujours ouvert peut-il malgré tout être bloqué en suppression ?
Oui. Le blocage ne dépend pas uniquement du statut de clôture de l'exercice : si une écriture comptable du transfert est déjà couverte par un rapprochement bancaire, la suppression échoue en 400 même si l'exercice est encore ouvert. Le champ estSupprimable renvoyé en lecture reflète cette même règle au moment de l'appel, mais reste un indicateur calculé — il peut changer d'un appel à l'autre si le rapprochement évolue entre-temps. Parcours D, Modèle & périmètre