> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lexio.rent/llms.txt
> Use this file to discover all available pages before exploring further.

# Synchronisation par événements

`GET /events` est le flux ordonné des changements de locations. Il n’y a pas de webhook : vous lisez le flux à votre rythme.

```http theme={null}
GET /api/external/v1/events?cursor=eyJ2Ijox…&limit=100
```

```json theme={null}
{
  "data": [
    {
      "id": "4e1a6b2c-9d3e-4f5a-8b7c-6d5e4f3a2b1c",
      "type": "rental.cancelled",
      "occurredAt": "2026-11-04T09:12:44+01:00",
      "resource": { "type": "RENTAL", "id": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f", "partnerReference": "AV-884213" }
    }
  ],
  "nextCursor": "eyJ2Ijox…"
}
```

* Un événement est mince : relisez la location par [`GET /rentals/{rentalId}`](https://docs.lexio.rent/api-reference/locations/get-rental) pour connaître son état. Une location supprimée ne se relit plus (`404`).
* Traitez les événements dans l’ordre de la page. Cet ordre est celui de l’enregistrement des changements, pas celui d’`occurredAt` (l’heure du changement) : un changement validé tard n’est jamais sauté.
* Scope `rentals.read`. Une clé partenaire ne voit que les événements de ses propres locations.
* `types` filtre par type (`types=rental.created,rental.cancelled`). Ignorez un type que vous ne connaissez pas.

## Ce qui produit un événement

| Type | Produit par |
| - | - |
| `rental.created` | la création d’une location, par l’API ou dans Lexio |
| `rental.updated` | un changement de la location : statut (départ, retour, approbation), dates prévues ou réelles, véhicule, titulaire, prix et TVA, forfait, franchise, caution, lieux, notes, numéro de commande ; l’ajout, la modification ou le retrait d’une option ; tout paiement, caution ou remboursement enregistré, modifié ou supprimé |
| `rental.cancelled` | le passage au statut `CANCELLED` |
| `rental.deleted` | la suppression de la location |

Les changements faits dans une même opération produisent un seul événement par location : la création d’une location et de ses options donne un seul `rental.created`, une annulation un seul `rental.cancelled`. Le type ne dit donc pas tout ce qui a changé : relisez la location.

Ne produisent **aucun** événement, et se relisent au besoin : la fiche du client ou du véhicule (nom, téléphone, immatriculation…), les photos et états des lieux, les documents (contrat, factures, avoirs, avenants).

## Première synchronisation

1. Appelez `GET /events?start=LATEST` : la réponse ne contient aucun événement, mais un curseur sur l’instant présent. Enregistrez-le.
2. Parcourez `GET /rentals` page par page pour constituer l’état initial.
3. Lisez ensuite le flux à partir du curseur enregistré. Ce qui a changé pendant le parcours y figure.

Sans paramètre (ou avec `start=EARLIEST`), le flux part des événements des 29 derniers jours. `start` et `cursor` s’excluent.

## Boucle de lecture

1. Lisez une page à partir du curseur enregistré, avec `limit=100`.
2. Traitez ses événements, puis enregistrez son `nextCursor`. Il est **toujours renvoyé**, même sur une page vide.
3. Si la page est pleine (autant d’événements que `limit`), lisez la suivante aussitôt : vous êtes en retard. Sinon, vous êtes à jour : attendez avant la prochaine lecture.

Un intervalle de 10 à 60 secondes convient. Chaque lecture du flux et chaque relecture de location comptent dans le plafond `PER_KEY` de votre clé : voir [Limites de débit](https://docs.lexio.rent/limites.md).

## Reprise après une longue absence

Les événements sont conservés 30 jours. L’âge d’un curseur se compte depuis le dernier événement qu’il a lu (ou depuis la lecture, pour un curseur de page incomplète) : un curseur trop ancien répond `410 CURSOR_EXPIRED`. Reprenez alors la [première synchronisation](https://docs.lexio.rent/synchronisation.md) : `start=LATEST`, parcours de `GET /rentals`, puis le flux.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.