Stable Pro API · v1
Événements
Rester synchronisé : lire ce qui s'est passé après votre curseur, dans l'ordre, sans rien perdre.
Chaque fait économique d'une écurie a son événement (un objet event) : un débit est créé, une correction est faite, un encaissement arrive, un reçu est émis ou annulé, les données d'un client changent. Les événements sont écrits par la base de données dans la même transaction que le fait, et ils sont numérotés dans l'ordre où ils deviennent visibles.
GET /events?after=<curseur>&limit=100
La garantie
Si un événement est visible, chaque événement antérieur de la même écurie est déjà visible, ou n'existera jamais.
Ainsi, lire « tout ce qui suit mon curseur » ne saute jamais rien : aucun événement antérieur ne peut apparaître plus tard. La numérotation peut avoir des trous (une transaction annulée), et ils sont sans conséquence, car vous ne demandez jamais « le numéro suivant ».
Comment lire
- La première fois, appelez
GET /eventssansafter: vous partez du premier événement de l'écurie, historique compris. - Traitez chaque événement dans l'ordre : lisez l'objet vers lequel il pointe (
data.url) et faites votre travail. - Quand la page est traitée, enregistrez
next_cursor. - Appelez de nouveau avec
after=<next_cursor>. Recommencez tant quehas_morevauttrue; quand il vautfalse, attendez et redemandez plus tard (par exemple toutes les quelques minutes).
{
"object": "list",
"data": [
{
"object": "event",
"id": "6f1d1e0c-…",
"type": "adjustment.created",
"data": { "object": "adjustment", "id": "8d0c2f6e-…", "url": "/api/v1/adjustments/8d0c2f6e-…" },
"occurred_at": "2026-12-05T09:14:03.512Z",
"recorded_at": "2026-12-05T09:14:03.540Z",
"historical": false
}
],
"has_more": false,
"next_cursor": "6f1d1e0c-…"
}
- Les événements sont légers : ils disent quel objet a été créé ou modifié, jamais les montants. Lisez l'objet.
- Au moins une fois : après une interruption, vous repartez du dernier curseur enregistré, et il peut arriver de lire une page deux fois. Traiter de nouveau un événement ne fait aucun mal — il pointe vers un fait qui ne change pas, ou vers les données actuelles d'un client — et l'
idde l'événement vous permet de reconnaître ceux que vous avez déjà traités. Les identifiants d'événement sont uniques entre toutes les écuries. next_cursorpeut être l'identifiant d'un événement qui ne vous est pas montré : enregistrez-le toujours tel quel.has_more: trueavec moins delimitévénements — voire aucun — signifie que certains événements n'étaient pas pour vous et que le journal continue : redemandez.- Un curseur qui n'est pas un événement de cette écurie donne un
400surafter.
Types d'événement
| Type | Pointe vers | Autorisation |
|---|---|---|
customer.updated | le client | customers:read |
charge.created | le débit | charges:read |
charge.due_date_changed | le débit (lisez sa nouvelle due_date) | charges:read |
charge.tax_changed | le débit (lisez ses nouvelles taxes) | charges:read |
adjustment.created | la correction | charges:read |
payment.created | le mouvement d'argent | payments:read |
allocation.created | l'affectation d'un encaissement à un débit | payments:read |
credit_entry.created | le mouvement du crédit | payments:read |
receipt.issued | le reçu | receipts:read |
receipt.voided | le reçu | receipts:read |
Chaque événement n'est affiché qu'avec l'autorisation de l'objet vers lequel il pointe. Seul le côté à encaisser est affiché, c'est-à-dire ce que les clients doivent à l'écurie, payé ou non : la rémunération du personnel n'apparaît jamais. Il n'y a pas de customer.created : un client naît avec son premier débit, et charge.created porte son customer_id. La liste des types est ouverte : acceptez un type que vous ne connaissez pas encore. Les noms dans chaque langue sont dans /codes (event_type).
Si votre clé obtient une nouvelle autorisation, les événements qu'elle ne voyait pas avant sont derrière votre curseur : relisez depuis le début (sans after) pour les obtenir.
L'historique
Quand une écurie commence à utiliser l'API, tout son historique est déjà dans le journal : les événements des faits antérieurs portent historical: true, sont classés par date du fait et viennent avant tout événement du présent. occurred_at est toujours la date du fait ; recorded_at est le moment où l'événement a été écrit.
Pendant le chargement de l'historique d'une écurie, /events répond 503 avec type: …/events-not-ready et Retry-After. Cela prend quelques secondes.
Un seul événement
GET /events/{id} renvoie un événement, avec les mêmes règles. Un événement d'une autre écurie, d'un type que votre clé ne peut pas lire, ou qui n'existe pas : 404.