Skip to content

Factures ​

Ces endpoints permettent à un logiciel externe (comptabilité, ERP, outil de recouvrement…) de lister, filtrer et récupérer les factures d'une structure d'accueil, ainsi que leurs lignes, leurs paiements et leur PDF.

Toutes les URIs ci-dessous sont relatives à https://abcreche.com/api/v1.

{crecheUuid} est l'uuid de la structure d'accueil, récupéré via l'endpoint /me (propriété creches[].uuid).

Headers ​

HeaderValeur
AuthorizationBearer {token}
Acceptapplication/json

Liste des factures ​

Request ​

  • HTTP Method: GET
  • URI: /{crecheUuid}/invoices

Les factures sont triées par référence décroissante (les plus récentes en premier) et paginées.

Pagination ​

PropertyTypeRequiredDescription
pageIntegerfalseNuméro de page. Défaut : 1.
per_pageIntegerfalseNombre de factures par page. Défaut : 50.

Filtres par période ​

PropertyTypeRequiredDescription
billable_monthDate YYYY-MM-DDfalseMois facturé (mois de prestation). N'importe quel jour du mois convient : 2026-05-01 retourne les factures de mai 2026.
fromDate YYYY-MM-DDfalseDate de facture ≥ from. Si to n'est pas envoyé, to vaut automatiquement le dernier jour du mois de from.
toDate YYYY-MM-DDfalseDate de facture ≤ to.
date_from / date_toDate YYYY-MM-DDfalseDate de facture comprise entre ces bornes (sans le comportement automatique de from).
due_date_from / due_date_toDate YYYY-MM-DDfalseDate d'échéance comprise entre ces bornes.
sent_at_from / sent_at_toDate YYYY-MM-DDfalseDate d'envoi au parent comprise entre ces bornes.
paid_at_from / paid_at_toDate YYYY-MM-DDfalseDate de paiement complet comprise entre ces bornes.

Mois facturé vs date de facture

billable_month correspond au mois des prestations (ex. : la facture de mai), date à la date d'émission de la facture (souvent début du mois suivant). Pour une synchronisation comptable, filtrez plutôt sur date_from / date_to.

Filtres par statut et montant ​

PropertyTypeRequiredDescription
statusIntegerfalseStatut de la facture (voir Statuts). Avec status=0 (impayé), seules les factures déjà envoyées sont retournées.
min_totalIntegerfalseMontant total minimum, en centimes.
max_totalIntegerfalseMontant total maximum, en centimes.
onlyOverdueBooleanfalseUniquement les factures impayées ou partiellement payées dont l'échéance est dépassée.
onlyNotSentBooleanfalseUniquement les factures pas encore envoyées au parent.
onlyWithPaymentsBooleanfalseUniquement les factures ayant au moins un paiement.
onlyWithoutPaymentsBooleanfalseUniquement les factures sans aucun paiement.

Filtres par destinataire et type ​

PropertyTypeRequiredDescription
searchStringfalseRecherche dans la référence de facture, la communication structurée, la référence (interne ou externe) de l'inscription, ou le prénom/nom de l'enfant.
registration_uuidUUIDfalseUniquement les factures individuelles d'une inscription (un enfant).
parent_uuidUUIDfalseUniquement les factures adressées à ce parent.
classroom_uuids[]Array of UUIDsfalseUniquement les factures d'enfants inscrits dans ces sections.
onlyGroupedBooleanfalseUniquement les factures groupées (une facture pour plusieurs enfants d'un même parent).
onlyCautionBooleanfalseUniquement les factures de caution (garantie).
onlyEventBooleanfalseUniquement les factures liées à une inscription à un événement.
onlySEPABooleanfalseUniquement les factures dont le parent paie par domiciliation SEPA.
onlyToParentNoEmailBooleanfalseUniquement les factures dont le parent ne reçoit pas ses factures par email.

Filtres sur meta ​

PropertyTypeRequiredDescription
meta[{clé}]StringfalseUniquement les factures dont meta.{clé} vaut cette valeur. Ex. : meta[erp_id]=F-42. Les booléens se comparent en texte : meta[erp_imported]=true. Plusieurs clés peuvent être combinées.
without_metaStringfalseUniquement les factures sans la clé meta.{clé}. Ex. : without_meta=erp_imported retourne les factures pas encore importées.

Les booléens s'envoient sous la forme 1 / 0 (ou true / false). Les filtres sont cumulables.

Exemples ​

Factures émises en juin 2026 :

http
GET /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices?date_from=2026-06-01&date_to=2026-06-30&per_page=100

Factures en retard de paiement de plus de 50 € :

http
GET /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices?onlyOverdue=1&min_total=5000

Factures payées la semaine dernière :

http
GET /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices?paid_at_from=2026-10-19&paid_at_to=2026-10-25

Response ​

json
{
  "data": [
    {
      "uuid": "b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10",
      "reference": "2026-000123",
      "invoicable": {
        "uuid": "4a1f0c3e-2b7d-4e8a-9c55-1d2e3f4a5b6c",
        "reference": "INS-0042",
        "reference_external": "CLIENT-981",
        "baby": {
          "uuid": "c3d2e1f0-...",
          "first_name": "Emma",
          "last_name": "Dupont"
        }
      },
      "parent": {
        "uuid": "7d6c5b4a-3e2f-4a1b-8c9d-0e1f2a3b4c5d",
        "first_name": "Julie",
        "last_name": "Dupont",
        "email": "[email protected]",
        "phone": null,
        "mobile": "+32470123456",
        "street": "Rue des Fleurs",
        "street_number": "8",
        "postal_code": "1000",
        "city": "Bruxelles",
        "bank_account": "BE71096123456769",
        "language": "fr",
        "...": "..."
      },
      "total": 45230,
      "paid_total": 20000,
      "currency": "EUR",
      "receiver_info": "...",
      "sender_info": "...",
      "note": null,
      "meta": {},
      "communication": "+++123/4567/89012+++",
      "tos": null,
      "pdf_path": "...",
      "date": "2026-06-01T00:00:00.000000Z",
      "due_date": "2026-06-15T00:00:00.000000Z",
      "billable_month": "2026-05-01T00:00:00.000000Z",
      "paid_at": null,
      "sent_at": "2026-06-01 09:12:44",
      "created_at": "2026-06-01T07:30:02.000000Z",
      "lines": [
        {
          "id": 9812,
          "invoice_id": 4510,
          "description": "Journée complète",
          "quantity": 18,
          "price": 2450,
          "tax": 0,
          "tax_percentage": 0,
          "meta": null
        }
      ],
      "payments": [
        {
          "uuid": "e8f7a6b5-...",
          "amount": 20000,
          "communication": "+++123/4567/89012+++",
          "note": null,
          "status": 1,
          "payment_date": "2026-06-10",
          "billable_month": "2026-05-01"
        }
      ],
      "status": 1,
      "status_label": "Partiellement payé",
      "iban": "BE68539007547034"
    }
  ],
  "links": {
    "first": "https://abcreche.com/api/v1/{crecheUuid}/invoices?page=1",
    "last": "https://abcreche.com/api/v1/{crecheUuid}/invoices?page=4",
    "prev": null,
    "next": "https://abcreche.com/api/v1/{crecheUuid}/invoices?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 4,
    "per_page": 50,
    "to": 50,
    "total": 187
  }
}

Pour récupérer toutes les factures, suivez links.next jusqu'à ce qu'il vaille null.

Champs retournés ​

PropertyTypeDescription
uuidUUIDIdentifiant unique de la facture. À utiliser comme clé de synchronisation.
referenceStringNuméro de facture lisible.
invoicableObjectObjet facturé : une inscription (facture individuelle, avec l'enfant facturé dans baby) ou un parent (facture groupée, les enfants sont dans registrations du détail). Pour connaître le parent facturé, utilisez plutôt parent.
parentObject/nullParent facturé : le parent à qui la facture est adressée (uuid, first_name, last_name, email, phone, mobile, adresse street / street_number / postal_code / city, bank_account, language…). Présent pour les factures individuelles comme pour les factures groupées. null si aucun parent n'est désigné.
totalIntegerMontant total TTC, en centimes (45230 = 452,30 €).
paid_totalIntegerMontant déjà payé, en centimes. Le solde restant dû est total - paid_total.
currencyStringDevise ISO 4217 (EUR).
communicationString/nullCommunication structurée à utiliser pour le paiement.
dateDateDate d'émission.
due_dateDate/nullDate d'échéance.
billable_monthDate/nullMois des prestations facturées (1er jour du mois).
sent_atDateTime/nullDate d'envoi au parent. null = pas encore envoyée.
paid_atDate/nullDate à laquelle la facture a été entièrement payée.
statusIntegerStatut (voir ci-dessous).
status_labelStringLibellé du statut en français.
ibanString/nullIBAN sur lequel le paiement est attendu.
linesArrayLignes de la facture. price et tax sont en centimes, price est le prix unitaire TTC.
paymentsArrayPaiements enregistrés sur la facture. amount en centimes.
noteString/nullNote libre ajoutée par le gestionnaire.
metaObject/nullDonnées complémentaires au format JSON. Contient des clés gérées par ABCreche (lecture seule, voir Clés réservées) et les clés écrites par votre logiciel (voir Écrire dans meta).

Statuts ​

ValeurDescription
0Impayé
1Partiellement payé
2Payé
3Payé avec surplus
4Annulé
5Clôturé

Détail d'une facture ​

Request ​

  • HTTP Method: GET
  • URI: /{crecheUuid}/invoices/{invoiceUuid}

Retourne une seule facture, avec les mêmes champs que la liste, plus :

  • creche : la structure d'accueil émettrice ;
  • registrations : pour une facture groupée, la liste des inscriptions (enfants) concernées ;
  • activities : l'historique des actions sur la facture (création, envoi, paiements…).
http
GET /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices/b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10
json
{
  "data": {
    "uuid": "b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10",
    "reference": "2026-000123",
    "...": "..."
  }
}

Télécharger le PDF d'une facture ​

Request ​

  • HTTP Method: GET
  • URI: /{crecheUuid}/invoices/{invoiceUuid}/pdf

La réponse est le fichier PDF (Content-Type: application/pdf), identique à celui reçu par le parent.

http
GET /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices/b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10/pdf

Écrire dans meta ​

Votre logiciel peut enregistrer ses propres informations sur une facture, dans l'objet JSON meta : identifiant de la facture dans votre système, date d'import, numéro de pièce comptable… Ces données n'ont aucun effet sur la facture elle-même (montant, statut, envoi au parent).

Request ​

  • HTTP Method: PATCH
  • Content Type: application/json
  • URI: /{crecheUuid}/invoices/{invoiceUuid}/meta

Body ​

PropertyTypeRequiredDescription
metaObjecttrueLes clés à ajouter ou modifier (50 clés max par requête).

Comportement :

  • Fusion : seules les clés envoyées sont modifiées, les autres clés de meta sont conservées.
  • Suppression : envoyez une clé avec la valeur null (ou une chaîne vide) pour la retirer.
  • Valeurs : texte, nombre, booléen, tableau ou objet.
  • Noms de clés : lettres, chiffres et _, commençant par une lettre, 64 caractères max.
  • Taille : l'objet meta complet ne peut pas dépasser 10 000 caractères une fois encodé en JSON.

Préfixez vos clés

Préfixez vos clés avec le nom de votre logiciel (ex. : monerp_id, monerp_imported_at) pour éviter les collisions avec d'autres intégrations.

Clés réservées ​

Les clés suivantes sont gérées par ABCreche et ne peuvent pas être modifiées. Une requête qui en contient une est refusée (422).

CléDescription
is_depositFacture de caution.
is_event_registrationFacture d'inscription à un événement.
is_monthly_billFacture mensuelle générée automatiquement.
ubl_xml, ubl_pathDocument de facturation électronique (Peppol).
imported_at, imported_by_user_idFacture importée par fichier dans ABCreche.

Exemple ​

http
PATCH /9928c211-abd9-4902-8db3-d3e8d2b89b0a/invoices/b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10/meta
json
{
  "meta": {
    "monerp_id": "F-2026-0042",
    "monerp_imported_at": "2026-10-26 14:05:00"
  }
}

Response ​

La facture mise à jour, au même format que le détail d'une facture :

json
{
  "data": {
    "uuid": "b1e4c9a2-6f1d-4c1b-9a77-3f0e2d5c8a10",
    "meta": {
      "is_monthly_bill": true,
      "monerp_id": "F-2026-0042",
      "monerp_imported_at": "2026-10-26 14:05:00"
    },
    "...": "..."
  }
}

Erreur : clé non autorisée ​

json
{
  "message": "Clés non autorisées : is_deposit",
  "errors": {
    "meta": ["Clés non autorisées : is_deposit"]
  }
}

Utilisation typique : import incrémental ​

  1. Récupérer les factures pas encore importées :
    http
    GET /{crecheUuid}/invoices?without_meta=monerp_id
  2. Importer chaque facture dans votre logiciel.
  3. Une fois l'import réussi, enregistrer votre identifiant sur la facture :
    http
    PATCH /{crecheUuid}/invoices/{invoiceUuid}/meta
    {"meta": {"monerp_id": "F-2026-0042"}}

Si l'import échoue, n'écrivez rien : la facture sera reprise au prochain passage.

Pour retrouver plus tard une facture ABCreche à partir de votre identifiant :

http
GET /{crecheUuid}/invoices?meta[monerp_id]=F-2026-0042

TIP

Écrivez dans meta facture par facture, au fur et à mesure de l'import, plutôt qu'en fin de traitement : en cas d'interruption, seules les factures déjà importées seront marquées.

Gestion des erreurs ​

CodeSignificationAction recommandée
401Token absent, invalide ou expiré.Se ré-authentifier via /authenticate.
403L'utilisateur n'a pas accès à cette structure d'accueil.Vérifier l'uuid de la structure et les droits de l'utilisateur.
404Structure d'accueil ou facture introuvable.Vérifier les UUIDs utilisés.
422Paramètre invalide (ex. : date au mauvais format, registration_uuid inconnu).Corriger la requête selon les erreurs retournées.

Implémentation recommandée ​

Import initial ​

  1. Appelez /me pour obtenir l'uuid de chaque structure d'accueil.
  2. Pour chaque structure, parcourez toutes les pages de /{crecheUuid}/invoices (avec date_from si vous ne voulez pas tout l'historique).
  3. Enregistrez chaque facture avec son uuid comme identifiant unique.

Synchronisation régulière ​

L'API ne propose pas de filtre « modifié depuis ». Une facture existante peut changer après sa création (paiement reçu, envoi, annulation). Nous recommandons :

  • Nouvelles factures : interroger chaque jour les factures émises récemment, par exemple date_from = il y a 2 mois.
  • Paiements : interroger les factures payées récemment via paid_at_from, ou re-synchroniser les factures encore ouvertes (status=0 et status=1).
  • Mettre à jour votre copie locale sur base de l'uuid (créer si inconnu, mettre à jour sinon).

Montants en centimes

Tous les montants (total, paid_total, lines[].price, lines[].tax, payments[].amount, min_total, max_total) sont exprimés en centimes. Divisez par 100 pour obtenir le montant en euros.

Documentation ABCreche

Connectez-vous avec vos identifiants ABCreche pour accéder à la documentation.