Synchronisation
Une copie locale des billets et des bracelets du site, chargée une fois puis tenue à jour.
Votre serveur tient une copie locale des billets et des bracelets du site. Il la charge une fois avec l'instantané, puis la tient à jour avec les changements. C'est avec cette copie que le portique lit les bracelets, et que votre serveur décide quand le réseau tombe.
Instantané
/partners/gates/api/v1/gates/entitlements?siteId=…&limit=5000La première page fixe une version. Les pages suivantes (cursor=<nextCursor>) restent à cette version, même si des billets changent pendant le chargement. La dernière page n'a pas de nextCursor. Une page compte 5 000 porteurs au plus.
{
"data": {
"siteId": "0199…",
"eventId": "0199…",
"version": 52,
"items": [
{
"holderId": "0199…",
"kind": "TICKET",
"reference": "WLE26-959WVM-T01",
"category": "STANDARD",
"status": "ACTIVE",
"entitlements": [
{
"sessionId": "0199…",
"sessionCode": "D1",
"operationalDay": "2026-12-26",
"zones": ["PORT"],
"accessRule": "SINGLE_ENTRY",
"status": "ACTIVE"
}
],
"credentials": [
{
"kind": "WRISTBAND_UID",
"value": "6EC387C8",
"status": "ACTIVE",
"chip": { "uuid": "3F2A9C1E7B4D4E8FA21C6D5B0E9F7A13", "lot": "0001" },
"keyA": "112233445566"
}
],
"version": 48,
"consumption": []
}
],
"sessions": {
"eventId": "0199…",
"timeZone": "Africa/Porto-Novo",
"sessions": [
{
"sessionId": "0199…",
"code": "D1",
"operationalDay": "2026-12-26",
"opensAt": "2026-12-26T15:00:00.000Z",
"closesAt": "2026-12-27T03:00:00.000Z"
}
],
"zones": [{ "code": "PORT", "label": "Port" }]
},
"site": {
"siteId": "0199…",
"eventId": "0199…",
"name": "…",
"active": true,
"checkpoints": [
{ "checkpointId": "0199…", "name": "Entrée", "type": "ENTRY", "zone": null, "sessionId": null, "active": true }
]
},
"nextCursor": "eyJ…"
}
}sessions et site ne figurent que sur la première page.
| Champ | Sens |
|---|---|
items[] | un porteur : un billet (TICKET) ou un badge (BADGE) |
status | ACTIVE, BLOCKED ou CANCELLED ; seul ACTIVE entre |
entitlements[] | un droit par jour (session) : zones ouvertes, règle d'accès, statut |
accessRule | SINGLE_ENTRY : une entrée par jour ; REENTRY : entrées et sorties libres |
credentials[] | ce que le portique lit ; un bracelet absent de la liste est inconnu |
credentials[].status | ACTIVE ou BLOCKED : un bracelet bloqué se lit, puis se refuse |
credentials[].chip | ce que les blocs 4 et 5 de la puce doivent contenir, voir Lire un bracelet |
credentials[].keyA | clé A du bracelet, 12 chiffres hexadécimaux, avec le droit gates:keys |
consumption[] | les entrées que votre site a déjà remontées, pour reprendre après une perte de données |
Changements
/partners/gates/api/v1/gates/changes?siteId=…&since=52&limit=1000{
"data": {
"siteId": "0199…",
"since": 52,
"headVersion": 57,
"nextSince": 57,
"hasMore": false,
"items": [
{
"version": 55,
"type": "CREDENTIAL",
"at": "2026-12-26T16:02:11.000Z",
"holder": { "holderId": "0199…", "…": "état complet du porteur" }
}
]
}
}- Appelez
changesen continu, toutes les 2 à 5 secondes, avecsinceégal à la version de l'instantané, puis aunextSincereçu. Tant quehasMorevauttrue, rappelez aussitôt. ENTITLEMENT,CREDENTIAL,BLOCK,UNBLOCKetCANCELportent l'état complet du porteur dansholder;SESSIONportesessions;SITEportesite.- Appliquez chaque élément en remplaçant l'état que vous détenez, sans fusion.
Les clés A
Les clés A arrivent avec la synchronisation, il n'y a pas d'autre chargement.
- L'instantané donne la clé A de chaque bracelet lié.
- Ensuite, un bracelet lié, remplacé ou bloqué pendant le festival revient dans
changesavec sa clé A. - La clé A d'un bracelet ne change pas : une clé reçue n'a jamais besoin d'être rechargée.
Si le portique lit un UID absent de votre copie, appelez changes une fois tout de suite avant de conclure : le bracelet vient peut-être d'être lié.
Accusé
Une fois tout appliqué jusqu'à une version, dites-le :
/partners/gates/api/v1/gates/acknowledgements{ "siteId": "0199…", "appliedVersion": 57 }{ "data": { "siteId": "0199…", "appliedVersion": 57, "publishedVersion": 57, "pendingChanges": 0 } }L'accusé indique la version réellement en place sur votre site. Il ne change pas ce que vous recevez : changes répond selon le since envoyé. Envoyez-le après chaque lot appliqué.
La version accusée ne recule jamais. WeLovEya suit le retard de chaque site pendant les heures d'ouverture : une alerte s'ouvre si un changement attend depuis plus de 60 secondes, et le site est déclaré injoignable après 120 secondes sans aucun appel.
Reprise
Après une perte de données, repartez d'un instantané. Les entrées que votre site avait remontées reviennent dans consumption.