Démarrage
- Dans Gerelio, un dirigeant du cabinet ouvre Paramètres → API et crée une clé : un nom (l’outil qui l’utilisera), une portée (lecture seule ou lecture et écriture) et, si besoin, une date d’expiration.
- La clé complète (
gk_live_…, 40 caractères) s’affiche une seule fois. Rangez-la dans le coffre de votre outil : Gerelio n’en conserve que l’empreinte SHA-256 et ne pourra pas la réafficher. - Appelez l’API à l’adresse
https://gerelio.com/api/v1, en JSON, encodé en UTF-8.
curl "https://gerelio.com/api/v1/cabinet" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": {
"id": "49a1fc17-2fca-47ea-87f1-bb1d2c618e45",
"nom": "Cabinet Delorme & Associés",
"siren": "912 345 678",
"adresse": "48 rue de la République",
"code_postal": "69002",
"ville": "Lyon",
"email": "contact@delorme-gestion.exemple.fr",
"telephone": "04 72 00 00 00",
"carte_pro_numero": "CPI 6901 2024 000 012 345",
"lecture_seule": false,
"cle": {
"nom": "Documentation",
"prefixe": "gk_live_lTH0",
"portee": "lecture_ecriture",
"expire_le": null
},
"limite_par_minute": 120
}
} Tous les exemples de cette page sont de vraies réponses de l’API, produites sur le cabinet de démonstration (noms et identifiants fictifs), parfois raccourcies à un ou deux éléments.
Authentification et portée
Chaque requête porte l’en-tête Authorization: Bearer gk_live_…. Une clé donne accès aux données de son seul cabinet : un identifiant appartenant à un autre cabinet répond toujours 404.
- Lecture seule : toutes les requêtes
GET. - Lecture et écriture : en plus, création et modification de personnes, enregistrement de factures fournisseurs, import de relevés bancaires. Ces écritures passent par les mêmes règles que l’application et figurent au journal d’audit du cabinet, au nom de la clé.
Une clé révoquée ou expirée est refusée immédiatement (401). La date de dernière utilisation et le nombre d’appels de chaque clé sont visibles dans Paramètres → API. Si l’abonnement du cabinet est en lecture seule, l’API reste disponible en lecture pour exporter vos données ; les écritures répondent 403 lecture_seule.
Une clé est un secret : ne l’insérez jamais dans une page web ou une application mobile. Appelez l’API depuis un serveur.
Limites
| Débit | 120 requêtes par minute et par clé. Chaque réponse indique RateLimit-Limit, RateLimit-Remaining et RateLimit-Reset (secondes avant la minute suivante). Au-delà : 429 avec Retry-After. |
| Pages | 25 éléments par défaut, 100 au plus (limite). |
| Corps | 1 Mo au plus ; 1 000 opérations au plus par import de relevé. |
| Clés | 20 clés actives et 10 webhooks par cabinet. |
Pagination
Les listes sont triées par date de création puis identifiant, et paginées par curseur : un élément ajouté pendant le parcours ne décale pas les pages. Chaque page renvoie donnees, a_suivre et curseur_suivant, à repasser tel quel dans le paramètre curseur.
# Première page
curl "https://gerelio.com/api/v1/lots?limite=100" -H "Authorization: Bearer $GERELIO_CLE"
# Pages suivantes : reprendre la valeur curseur_suivant, tant que a_suivre vaut true
curl "https://gerelio.com/api/v1/lots?limite=100&curseur=MjAyNi0wOS0yNlQx…" -H "Authorization: Bearer $GERELIO_CLE" Les paramètres inconnus sont refusés (400) : une faute de frappe dans un filtre ne renvoie jamais silencieusement toute la liste.
Erreurs
Toute erreur répond en JSON avec un statut HTTP, un code stable et un message en français. requete_id (aussi dans l’en-tête Gerelio-Requete) identifie la requête si vous nous écrivez.
{
"erreur": {
"statut": 404,
"code": "introuvable",
"message": "Immeuble introuvable dans votre cabinet"
},
"requete_id": "5b0f7d52-3c2e-4b8e-9a51-0c7f4d1e2a93"
} | Statut | Codes | Cas |
|---|---|---|
| 400 | parametre_invalide · donnees_invalides · json_invalide | Paramètre inconnu ou mal formé, champ manquant ou d’un mauvais type. Le message nomme le champ. |
| 401 | authentification_requise · cle_invalide · cle_revoquee · cle_expiree | En-tête Authorization absent, clé inconnue, révoquée ou expirée. |
| 403 | portee_insuffisante · lecture_seule · acces_refuse | Écriture avec une clé en lecture seule, ou cabinet dont l’abonnement est en lecture seule (la lecture reste possible). |
| 404 | introuvable · route_inconnue | Aucun objet avec cet identifiant dans votre cabinet (un objet d’un autre cabinet est toujours introuvable). |
| 405 | methode_non_autorisee | Méthode non prise en charge sur ce chemin (voir l’en-tête Allow). |
| 409 | conflit | Doublon, par exemple une facture déjà enregistrée pour ce fournisseur et ce numéro. |
| 413 | corps_trop_gros | Corps de requête de plus de 1 Mo. |
| 415 | type_de_contenu | Écriture sans l’en-tête Content-Type: application/json. |
| 422 | regle_metier | Règle de gestion refusée par Gerelio (même message que dans l’application). |
| 429 | limite_atteinte | Plus de 120 requêtes dans la minute pour cette clé : réessayez après Retry-After secondes. |
| 500 | erreur_interne | Erreur inattendue : réessayez, puis écrivez-nous avec la valeur requete_id. |
| 503 | service_indisponible | API momentanément indisponible. |
Ressources
Montants en centimes d’euro (entiers), dates au format AAAA-MM-JJ, horodatages ISO 8601, identifiants UUID.
Immeubles
Copropriétés dont le cabinet est syndic et immeubles gérés en location. entite_id désigne la comptabilité du syndicat.
- GET
/immeublesListe - GET
/immeubles/{id}Un immeuble
| Paramètre | Valeurs | Effet |
|---|---|---|
gere_en_syndic | true | false | Copropriétés en syndic, ou immeubles en gestion locative seule |
curl "https://gerelio.com/api/v1/immeubles?limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "119be282-fe81-4a6d-b6a1-32c3356495d9",
"nom": "Le Clos Saint-Martin",
"adresse": "3 chemin Saint-Martin",
"code_postal": "69300",
"ville": "Caluire-et-Cuire",
"annee_construction": 1998,
"gere_en_syndic": true,
"rnic_numero": "AC7-455-102",
"exercice_debut_mois": 1,
"entite_id": "c428fca7-2b7c-46d4-83ba-73a855b5a20d",
"nombre_lots": 12,
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDExOWJlMjgyLWZlODEtNGE2ZC1iNmExLTMyYzMzNTY0OTVkOQ"
} Lots
Lots avec leurs tantièmes par clé de répartition (CG : charges générales, base des voix en assemblée).
- GET
/lotsListe - GET
/lots/{id}Un lot
| Paramètre | Valeurs | Effet |
|---|---|---|
immeuble_id | UUID | Lots d’un immeuble |
proprietaire_id | UUID | Lots d’un propriétaire |
curl "https://gerelio.com/api/v1/lots?immeuble_id=119be282-fe81-4a6d-b6a1-32c3356495d9&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "00dbe1f0-e25a-4d1b-a0dc-02b1a1975145",
"immeuble_id": "119be282-fe81-4a6d-b6a1-32c3356495d9",
"numero": "B05",
"type": "appartement",
"etage": "1er",
"surface_m2": 90,
"pieces": 4,
"proprietaire_id": "c2d23cd8-c71b-47c1-8d50-122d5d09a062",
"dpe_classe": "D",
"dpe_date": null,
"tantiemes": {
"CG": 900
},
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDAwZGJlMWYwLWUyNWEtNGQxYi1hMGRjLTAyYjFhMTk3NTE0NQ"
} Personnes
Copropriétaires, propriétaires bailleurs, locataires et fournisseurs. Les rôles sont déduits des données (lots, mandats, baux actifs). L’IBAN n’est jamais renvoyé en entier : seuls ses quatre premiers et quatre derniers caractères le sont.
- GET
/personnesListe - GET
/personnes/{id}Une personne - POST
/personnesCréer (voir Écriture) - PATCH
/personnes/{id}Modifier (voir Écriture)
| Paramètre | Valeurs | Effet |
|---|---|---|
role | coproprietaire | bailleur | locataire | fournisseur | Filtre par rôle |
email | adresse | Adresse exacte, sans tenir compte de la casse |
curl "https://gerelio.com/api/v1/personnes?role=coproprietaire&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "06c6bc6c-8885-436e-b1f2-db6e7da9f81b",
"type": "physique",
"civilite": "Mme",
"nom": "Michel",
"prenom": "Nathalie",
"raison_sociale": null,
"nom_affiche": "Mme Nathalie Michel",
"email": "nathalie.michel1@exemple.fr",
"telephone": "06 37 53 71 89",
"adresse": "18 rue de la République",
"code_postal": "69006",
"ville": "Lyon",
"siren": null,
"iban_masque": null,
"est_fournisseur": false,
"metier": null,
"notification_papier_demandee": false,
"roles": [
"coproprietaire"
],
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDA2YzZiYzZjLTg4ODUtNDM2ZS1iMWYyLWRiNmU3ZGE5ZjgxYg"
} Baux
Baux de la gestion locative, avec le bailleur (via le mandat de gestion) et l’état de la dernière signature électronique.
- GET
/bauxListe - GET
/baux/{id}Un bail
| Paramètre | Valeurs | Effet |
|---|---|---|
statut | actif | resilie | |
lot_id | UUID | |
locataire_id | UUID |
curl "https://gerelio.com/api/v1/baux?statut=actif&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "04170fa2-f189-4919-848d-c9e8528a8717",
"lot_id": "b5d5e3a4-ca66-45e6-a0bb-c67f093a2335",
"immeuble_id": "ae41ac0e-8b82-4bcd-b09c-eb03ac98a0c4",
"mandat_gestion_id": "08367097-6f75-4e68-9bef-169c5982cee3",
"bailleur_id": "a8ee9d90-57e4-476e-ba76-5fce2650dbd7",
"locataire_id": "dc25aa35-77ae-432a-8d05-757ee4fa5cbe",
"type": "vide",
"date_debut": "2024-04-24",
"duree_mois": 36,
"date_fin": null,
"loyer_hc_cents": 94000,
"provisions_charges_cents": 9000,
"depot_garantie_cents": 94000,
"irl_reference": "2024-T2",
"revision_mois": 4,
"statut": "actif",
"signature": null,
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDA0MTcwZmEyLWYxODktNDkxOS04NDhkLWM5ZTg1MjhhODcxNw"
} Entités, écritures et balance
Chaque syndicat de copropriétaires et la gérance ont leur propre comptabilité (entité). Les écritures sont scellées : hash chaîne chaque écriture à la précédente.
- GET
/entitesEntités comptables - GET
/entites/{id}Une entité - GET
/entites/{id}/balanceBalance des comptes - GET
/ecrituresÉcritures avec leurs lignes - GET
/ecritures/{id}Une écriture
| Paramètre | Valeurs | Effet |
|---|---|---|
type | syndicat | gerance | /entites |
date | AAAA-MM-JJ | /balance : arrêtée à cette date (incluse) |
entite_id | UUID | /ecritures |
journal | AC | AP | BQ | OD | QT | AN | /ecritures |
du, au | AAAA-MM-JJ | /ecritures : dates d’écriture (incluses) |
curl "https://gerelio.com/api/v1/entites/09939aab-731e-437d-ae0f-7348bfa4ed2e/balance?date=2026-06-30" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": {
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"date": "2026-06-30",
"comptes": [
{
"compte": "1031",
"libelle": "Avances de trésorerie",
"debit_cents": 0,
"credit_cents": 1627000,
"solde_cents": -1627000,
"tiers": 0
},
{
"compte": "105",
"libelle": "Fonds de travaux",
"debit_cents": 0,
"credit_cents": 2440000,
"solde_cents": -2440000,
"tiers": 0
},
{
"compte": "401",
"libelle": "Fournisseurs — factures parvenues",
"debit_cents": 2194620,
"credit_cents": 2194620,
"solde_cents": 0,
"tiers": 7
},
{
"compte": "4501",
"libelle": "Copropriétaire — budget prévisionnel",
"debit_cents": 1879000,
"credit_cents": 2039751,
"solde_cents": -160751,
"tiers": 16
}
],
"total_debit_cents": 12436991,
"total_credit_cents": 12436991
}
} Exemple : écritures
Journal des achats (AC) d’un syndicat, une écriture par page.
curl "https://gerelio.com/api/v1/ecritures?entite_id=09939aab-731e-437d-ae0f-7348bfa4ed2e&journal=AC&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "00df1e77-0b10-4601-a8a4-264b0cc6951f",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"numero": 84,
"journal": "AC",
"date_ecriture": "2026-07-10",
"libelle": "Maintenance ascenseur — trimestre 3 — ARS-2026-T3",
"piece_ref": "ARS-2026-T3",
"origine_type": "facture",
"origine_id": "9b6a551f-323a-45da-ac22-965ec8edcdbb",
"contrepasse_de": null,
"hash": "f7b788e56bd7b1dee94eb9435d66825f75910479ba3a4abe6865126b0d8b8805",
"hash_precedent": "95d1063ef7a24875d44f9ecf160915a7e45b765cd73dba667cfde848dd5caaa4",
"lignes": [
{
"compte": "614",
"libelle": null,
"personne_id": null,
"lot_id": null,
"cle_id": "bced491a-02dd-4155-8d8a-bdb6022ed174",
"debit_cents": 105000,
"credit_cents": 0
},
{
"compte": "401",
"libelle": null,
"personne_id": "ad4bdd53-d560-40c8-b1f3-37484395f406",
"lot_id": null,
"cle_id": null,
"debit_cents": 0,
"credit_cents": 105000
}
],
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDAwZGYxZTc3LTBiMTAtNDYwMS1hOGE0LTI2NGIwY2M2OTUxZg"
} Appels de fonds
Appels de fonds émis, avec la part de chaque lot (budget et fonds de travaux). lien ouvre l’appel dans l’espace Gerelio (connexion requise).
- GET
/appels-de-fondsListe - GET
/appels-de-fonds/{id}Un appel
| Paramètre | Valeurs | Effet |
|---|---|---|
immeuble_id | UUID | |
annee | AAAA |
curl "https://gerelio.com/api/v1/appels-de-fonds?immeuble_id=119be282-fe81-4a6d-b6a1-32c3356495d9&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "4444237d-cb95-47d4-a23e-167ee3ca8f8b",
"immeuble_id": "119be282-fe81-4a6d-b6a1-32c3356495d9",
"type": "budget",
"annee": 2026,
"trimestre": 1,
"libelle": "Appel de fonds Le Clos Saint-Martin — T1 2026",
"date_echeance": "2026-01-01",
"total_budget_cents": 380500,
"total_fonds_travaux_cents": 40625,
"total_cents": 421125,
"emis": true,
"ecriture_id": "8f6b86d0-ad62-48f2-9a1b-53db0d54b321",
"lien": "https://gerelio.com/espace/documents/appel/4444237d-cb95-47d4-a23e-167ee3ca8f8b",
"lignes": [
{
"lot_id": "e624ede2-d056-41d7-b352-c9abf01fcd76",
"lot_numero": "B01",
"personne_id": "f0ac096e-3c47-4014-b4d4-9ad5a8415877",
"budget_cents": 39838,
"fonds_travaux_cents": 4253,
"total_cents": 44091
},
{
"lot_id": "403284af-567f-4236-ab7b-3ebaa4ba88e7",
"lot_numero": "B02",
"personne_id": "baa41e84-2223-47a3-95dd-9928987f36d1",
"budget_cents": 31155,
"fonds_travaux_cents": 3326,
"total_cents": 34481
}
],
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDQ0NDQyMzdkLWNiOTUtNDdkNC1hMjNlLTE2N2VlM2NhOGY4Yg"
} Factures fournisseurs
Factures reçues, à valider, validées (comptabilisées), payées ou rejetées.
- GET
/facturesListe - GET
/factures/{id}Une facture - POST
/facturesEnregistrer (voir Écriture)
| Paramètre | Valeurs | Effet |
|---|---|---|
statut | a_valider | validee | payee | rejetee | |
entite_id | UUID | |
fournisseur_id | UUID |
curl "https://gerelio.com/api/v1/factures?statut=validee&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "16beb596-7016-48be-8fce-1d5bfff9987b",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"fournisseur_id": "e624740c-9adb-45c8-afde-f447f27a00cb",
"fournisseur_nom": "Enerlyon Services",
"numero": "E-2026-08-TIL",
"date_facture": "2026-08-08",
"date_echeance": "2026-09-07",
"libelle": "Électricité parties communes",
"montant_ttc_cents": 53680,
"compte_charge": "602",
"cle_id": "16065ea2-0e4e-469b-b0a1-4c6b681d4b0d",
"lot_id": null,
"source": "plateforme_agreee",
"statut": "validee",
"motif_rejet": null,
"ecriture_id": "0ab7ec28-dba4-48e9-bd43-f66b55d25765",
"ecriture_paiement_id": null,
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": false,
"curseur_suivant": null
} Opérations bancaires
Opérations des relevés bancaires importés, et leur rapprochement.
- GET
/relevesListe - GET
/releves/{id}Une opération - POST
/relevesImporter un relevé (voir Écriture)
| Paramètre | Valeurs | Effet |
|---|---|---|
entite_id | UUID | |
statut | a_rapprocher | rapproche | ignore |
curl "https://gerelio.com/api/v1/releves?entite_id=09939aab-731e-437d-ae0f-7348bfa4ed2e&statut=a_rapprocher" \
-H "Authorization: Bearer $GERELIO_CLE" Assemblées générales
Assemblées, leurs résolutions et, une fois clôturées, le résultat de chaque vote (majorités des articles 24, 25, 25-1 et 26) et le lien du procès-verbal.
- GET
/assembleesListe - GET
/assemblees/{id}Une assemblée
| Paramètre | Valeurs | Effet |
|---|---|---|
immeuble_id | UUID | |
statut | preparation | convoquee | tenue | pv_diffuse |
curl "https://gerelio.com/api/v1/assemblees/2b584c43-b9ce-4b41-ba35-4d88ecf10def" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": {
"id": "2b584c43-b9ce-4b41-ba35-4d88ecf10def",
"immeuble_id": "1d8969c0-c381-4a46-956a-b809cbad14bd",
"type": "ordinaire",
"date_ag": "2026-05-14T18:30:00+00:00",
"lieu": "Salle paroissiale, 20 rue Duguesclin, Lyon 6e",
"statut": "pv_diffuse",
"convoquee_le": "2026-04-14",
"tenue_le": "2026-05-14",
"president_nom": "Mme Claire Moreau",
"secretaire_nom": "Cabinet Delorme & Associés",
"resolutions": [
{
"id": "04afc43a-c8e6-4d9c-b4e5-621e3a984a65",
"ordre": 1,
"titre": "Approbation des comptes de l'exercice 2025",
"texte": "L'assemblée générale approuve les comptes de l'exercice 2025 en leur forme, teneur, imputation et répartition.",
"majorite": "art24",
"nature": "approbation_comptes",
"resultat": {
"regle": "Majorité des voix exprimées (art. 24)",
"adoptee": true,
"votants": 13,
"voix_pour": 10650,
"defaillants": 0,
"voix_contre": 0,
"membres_pour": 13,
"membres_total": 16,
"passerelle_25_1": false,
"voix_abstention": 0,
"voix_defaillantes": 0,
"voix_total_syndicat": 12750
}
}
],
"proces_verbal": {
"diffuse": true,
"document_id": "df6b3b6f-8715-46d1-abda-db15e05f99ec",
"lien": "https://gerelio.com/espace/documents/pv/2b584c43-b9ce-4b41-ba35-4d88ecf10def"
},
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
} Documents
Documents du cabinet : générés par Gerelio (appels de fonds, procès-verbaux, fiches synthétiques, convocations) ou déposés. lien ouvre le document dans l’espace Gerelio (connexion requise).
- GET
/documentsListe - GET
/documents/{id}Un document
| Paramètre | Valeurs | Effet |
|---|---|---|
immeuble_id | UUID | |
categorie | code | pv_ag, compte_coproprietaire, fiche_synthetique… |
genere | true | false | Documents produits par Gerelio |
curl "https://gerelio.com/api/v1/documents?genere=true&limite=1" \
-H "Authorization: Bearer $GERELIO_CLE" {
"donnees": [
{
"id": "1254c658-2605-4413-b8e1-5ddc3944010d",
"immeuble_id": "1d8969c0-c381-4a46-956a-b809cbad14bd",
"lot_id": null,
"personne_id": null,
"categorie": "compte_coproprietaire",
"titre": "Appel de fonds Résidence Les Tilleuls — T2 2026",
"date_document": "2026-09-26",
"genere": true,
"source_type": "appel",
"source_id": "03c278b9-ea29-4576-aae4-54f1adf99a84",
"publie_extranet": true,
"lien": "https://gerelio.com/espace/documents/appel/03c278b9-ea29-4576-aae4-54f1adf99a84",
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
],
"a_suivre": true,
"curseur_suivant": "MjAyNi0wOS0yNlQxMTozNzozNS44NzcwMDBafDEyNTRjNjU4LTI2MDUtNDQxMy1iOGUxLTVkZGMzOTQ0MDEwZA"
} Écriture
Portée lecture et écriture exigée. Corps en JSON avec Content-Type: application/json ; un champ non prévu est refusé (400) et nommé dans le message. Une création répond 201, une modification 200, avec l’objet tel que l’API le renvoie en lecture.
Créer une personne
POST /personnes. Seul nom est obligatoire. type : physique (par défaut) ou morale (avec raison_sociale) ; est_fournisseur et notification_papier_demandee sont des booléens. L’IBAN est accepté, jamais renvoyé en entier.
curl -X POST "https://gerelio.com/api/v1/personnes" \
-H "Authorization: Bearer $GERELIO_CLE" \
-H "Content-Type: application/json" \
-d '{"type":"physique","civilite":"Mme","nom":"Martin","prenom":"Léa","email":"lea.martin@exemple.fr","telephone":"06 12 34 56 78","iban":"FR76 3000 6000 0112 3456 7890 189"}' {
"donnees": {
"id": "3601516d-99a3-4b7c-ba4b-cbbaec0dd760",
"type": "physique",
"civilite": "Mme",
"nom": "Martin",
"prenom": "Léa",
"raison_sociale": null,
"nom_affiche": "Mme Léa Martin",
"email": "lea.martin@exemple.fr",
"telephone": "06 12 34 56 78",
"adresse": null,
"code_postal": null,
"ville": null,
"siren": null,
"iban_masque": "FR76 **** 0189",
"est_fournisseur": false,
"metier": null,
"notification_papier_demandee": false,
"roles": [],
"cree_le": "2026-09-26T11:37:36.986+00:00"
}
} Modifier une personne
PATCH /personnes/{id}. Seuls les champs présents sont modifiés (type, siren et est_fournisseur ne se modifient pas par l’API). Pour retrouver une personne à partir de votre outil : GET /personnes?email=….
curl -X PATCH "https://gerelio.com/api/v1/personnes/3601516d-99a3-4b7c-ba4b-cbbaec0dd760" \
-H "Authorization: Bearer $GERELIO_CLE" \
-H "Content-Type: application/json" \
-d '{"telephone":"06 98 76 54 32"}' Enregistrer une facture fournisseur
POST /factures. Obligatoires : entite_id (syndicat ou gérance), fournisseur_id, numero, date_facture, libelle, montant_ttc_cents. Facultatifs : date_echeance, lot_id (gérance), source (manuel, lecture_auto ou plateforme_agreee). La facture arrive à valider : son imputation et sa validation se font dans Gerelio (événement facture.validee). Même fournisseur et même numéro : 409.
curl -X POST "https://gerelio.com/api/v1/factures" \
-H "Authorization: Bearer $GERELIO_CLE" \
-H "Content-Type: application/json" \
-d '{"entite_id":"09939aab-731e-437d-ae0f-7348bfa4ed2e","fournisseur_id":"ad4bdd53-d560-40c8-b1f3-37484395f406","numero":"F-2026-0412","date_facture":"2026-09-15","date_echeance":"2026-10-15","libelle":"Entretien des espaces verts, septembre","montant_ttc_cents":48000}' {
"donnees": {
"id": "b72a63fe-5159-4264-aae6-cac49cfa34dd",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"fournisseur_id": "ad4bdd53-d560-40c8-b1f3-37484395f406",
"fournisseur_nom": "Ascenseurs Rhone Services",
"numero": "F-2026-0412",
"date_facture": "2026-09-15",
"date_echeance": "2026-10-15",
"libelle": "Entretien des espaces verts, septembre",
"montant_ttc_cents": 48000,
"compte_charge": null,
"cle_id": null,
"lot_id": null,
"source": "manuel",
"statut": "a_valider",
"motif_rejet": null,
"ecriture_id": null,
"ecriture_paiement_id": null,
"cree_le": "2026-09-26T11:37:36.997+00:00"
}
} Importer un relevé bancaire
POST /releves. entite_id et operations (1 à 1 000) : date_operation, libelle, montant_cents (négatif pour un débit, jamais nul), reference_banque facultative. Une opération déjà présente (même date, montant et libellé) est comptée en doublon et ignorée : vous pouvez renvoyer un relevé sans risque. Les opérations importées se rapprochent ensuite dans Gerelio (événement paiement.recu).
curl -X POST "https://gerelio.com/api/v1/releves" \
-H "Authorization: Bearer $GERELIO_CLE" \
-H "Content-Type: application/json" \
-d '{"entite_id":"09939aab-731e-437d-ae0f-7348bfa4ed2e","operations":[{"date_operation":"2026-09-22","libelle":"VIR SEPA MARTIN LEA APPEL T4","montant_cents":61250,"reference_banque":"VIR20260922-8841"},{"date_operation":"2026-09-23","libelle":"PRLV SEPA EDF COLLECTIVITES","montant_cents":-18430}]}' {
"donnees": {
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"importees": 2,
"doublons": 0
}
} Webhooks
Dans Paramètres → API, un dirigeant ajoute une adresse de réception en https:// et choisit les événements. Un secret propre à cet abonnement (whsec_…) s’affiche une seule fois : il sert à vérifier la signature. Les adresses locales ou privées sont refusées, à l’enregistrement puis à chaque envoi après résolution DNS.
| Événement | Quand |
|---|---|
paiement.recuPaiement reçu | Une opération bancaire créditrice est rapprochée sur le compte d’un copropriétaire (450) ou d’un locataire (411). donnees : operation, payeur, role, compte, montant_cents, date_operation, ecriture_id. |
ag.closeAssemblée générale clôturée | Résultats des votes arrêtés et procès-verbal établi. donnees : l’assemblée (comme GET /assemblees/{id}). |
facture.valideeFacture validée | Facture fournisseur validée et comptabilisée. donnees : la facture (comme GET /factures/{id}). |
appel_de_fonds.emisAppel de fonds émis | Appel généré et comptabilisé sur les comptes des copropriétaires. donnees : l’appel et ses lignes par lot. |
bail.signeBail signé | Tous les signataires ont signé électroniquement le bail. donnees : bail et signature (signataires, date). |
test.pingÉvénement de test | Envoyé uniquement par le bouton « Envoyer un événement de test ». |
Format
Chaque événement est envoyé en POST, corps JSON { id, type, cree_le, cabinet_id, donnees }, avec les en-têtes Gerelio-Signature, Gerelio-Evenement (le type), Gerelio-Livraison et Gerelio-Tentative. Exemple réel, paiement.recu :
{
"id": "39334be2-41c5-426a-91a4-c6e47338e3a4",
"type": "paiement.recu",
"cree_le": "2026-09-26T11:37:37.015+00:00",
"cabinet_id": "49a1fc17-2fca-47ea-87f1-bb1d2c618e45",
"donnees": {
"operation": {
"id": "b9655027-7fba-4368-94c4-d2ff5fd7d3d0",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"date_operation": "2026-09-24",
"libelle": "VIR SEPA APPEL T4 LOT 3",
"montant_cents": 61250,
"reference_banque": "VIR20260924-1182",
"statut": "rapproche",
"personne_id": "06c6bc6c-8885-436e-b1f2-db6e7da9f81b",
"facture_id": null,
"ecriture_id": "ae2a6735-09c2-4222-a058-dbd54c457be2",
"cree_le": "2026-09-26T11:37:37.014+00:00"
},
"payeur": {
"email": "nathalie.michel1@exemple.fr",
"nom_affiche": "Mme Nathalie Michel",
"personne_id": "06c6bc6c-8885-436e-b1f2-db6e7da9f81b"
},
"role": "coproprietaire",
"compte": "4501",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"montant_cents": 61250,
"date_operation": "2026-09-24",
"ecriture_id": "ae2a6735-09c2-4222-a058-dbd54c457be2"
}
} Exemple facture.validee
{
"id": "7aad7480-1429-4127-ad17-fed5c8d11922",
"type": "facture.validee",
"cree_le": "2026-09-26T11:37:37.01+00:00",
"cabinet_id": "49a1fc17-2fca-47ea-87f1-bb1d2c618e45",
"donnees": {
"id": "28cfb4f0-6cfc-4ffd-a421-b36f198c653f",
"entite_id": "09939aab-731e-437d-ae0f-7348bfa4ed2e",
"fournisseur_id": "781ea3e7-e2da-40e0-80ce-e268ddda19d4",
"fournisseur_nom": "Net Lyon Proprete",
"numero": "NLP-2026-027",
"date_facture": "2026-09-22",
"date_echeance": "2026-10-22",
"libelle": "Nettoyage parties communes septembre",
"montant_ttc_cents": 65000,
"compte_charge": "615",
"cle_id": "16065ea2-0e4e-469b-b0a1-4c6b681d4b0d",
"lot_id": null,
"source": "plateforme_agreee",
"statut": "validee",
"motif_rejet": null,
"ecriture_id": "4c5f80ed-35cd-46fa-ba91-756698a65686",
"ecriture_paiement_id": null,
"cree_le": "2026-09-26T11:37:35.877+00:00"
}
} Livraison et nouvelles tentatives
- Répondez par un statut 2xx en moins de 10 secondes ; traitez ensuite l’événement de votre côté. Les redirections ne sont pas suivies.
- Sinon, Gerelio réessaie avec un délai croissant : 1 min, 5 min, 30 min, 2 h, 6 h, 12 h puis 24 h, soit 8 tentatives au plus.
- Après 15 échecs consécutifs, l’abonnement est désactivé automatiquement (visible dans Paramètres → API et au journal d’audit) ; le réactiver remet le compteur à zéro.
- Les événements partent dès l’action qui les produit (dans l’application ou par l’API) ; un passage planifié chaque jour reprend ceux qui restent. Le journal des livraisons, conservé 30 jours, montre chaque tentative, son statut HTTP et le début de votre réponse. Boutons Envoyer un événement de test, Envoyer maintenant et Renvoyer.
- Un même événement peut arriver deux fois (renvoi, réseau) : utilisez
idpour ignorer un doublon. L’ordre d’arrivée n’est pas garanti ; fiez-vous àcree_le.
Vérifier la signature
L’en-tête Gerelio-Signature: t=1790241120,v1=5f3c… contient l’horodatage Unix de l’envoi (t) et l’HMAC-SHA256, en hexadécimal, de la chaîne t.corps (l’horodatage, un point, puis le corps brut reçu) calculé avec le secret de l’abonnement. Recalculez-le, comparez à temps constant et refusez un horodatage de plus de 5 minutes.
Node.js
import { createHmac, timingSafeEqual } from 'node:crypto'
import express from 'express'
const app = express()
// Le corps doit être lu brut : la signature porte sur les octets reçus, pas sur un objet re-sérialisé.
app.post('/webhooks/gerelio', express.raw({ type: 'application/json' }), (req, res) => {
const corps = req.body.toString('utf8')
const entete = req.get('Gerelio-Signature') ?? ''
const { t, v1 } = Object.fromEntries(entete.split(',').map((p) => p.trim().split('=')))
const attendu = createHmac('sha256', process.env.GERELIO_WEBHOOK_SECRET)
.update(`${t}.${corps}`)
.digest('hex')
const valide = typeof v1 === 'string' && v1.length === attendu.length &&
timingSafeEqual(Buffer.from(v1), Buffer.from(attendu))
// Refuser aussi un horodatage de plus de 5 minutes (rejeu d'un ancien message).
if (!valide || Math.abs(Date.now() / 1000 - Number(t)) > 300) {
return res.status(400).send('Signature invalide')
}
const evenement = JSON.parse(corps)
// Une livraison peut être renvoyée : ignorez un evenement.id déjà traité.
console.log(evenement.type, evenement.donnees)
res.sendStatus(204)
})
app.listen(3000) PHP
<?php
// Corps brut, tel que reçu : la signature porte sur ces octets.
$corps = file_get_contents('php://input');
$entete = $_SERVER['HTTP_GERELIO_SIGNATURE'] ?? '';
$parties = [];
foreach (explode(',', $entete) as $partie) {
[$cle, $valeur] = array_pad(explode('=', trim($partie), 2), 2, '');
$parties[$cle] = $valeur;
}
$t = (int) ($parties['t'] ?? 0);
$attendu = hash_hmac('sha256', $t . '.' . $corps, getenv('GERELIO_WEBHOOK_SECRET'));
// Comparaison à temps constant, et horodatage de moins de 5 minutes.
if (!hash_equals($attendu, $parties['v1'] ?? '') || abs(time() - $t) > 300) {
http_response_code(400);
exit('Signature invalide');
}
$evenement = json_decode($corps, true);
// Une livraison peut être renvoyée : ignorez un $evenement['id'] déjà traité.
error_log($evenement['type']);
http_response_code(204); Description OpenAPI
La description complète de l’API (routes, paramètres, schémas, webhooks) est publiée au format OpenAPI 3.1 : https://gerelio.com/api/v1/openapi.json. Importez-la dans Postman, Insomnia ou un générateur de client. L’API est versionnée : une évolution incompatible ouvrirait /api/v2, sans couper /api/v1.
Une question, un besoin d’une ressource absente ? Écrivez-nous.