Jetons de synchronisation
Pour garder une copie à jour sans tout relire : demandez seulement ce qui a changé.
Les listes qui se synchronisent — /calls et /messages — acceptent sync_token en plus de limit et cursor.
- Sans jeton : la fenêtre complète (les 30 derniers jours), paginée, et un
sync_tokenneuf dans la réponse. - Avec jeton : seulement ce qui a été créé ou modifié depuis (un appel dont l'enregistrement est arrivé, un texto passé à « livré »), et un jeton frais.
- Le jeton est opaque (un base64 de
{"since", "id"}) : gardez-le tel quel, ne le construisez jamais vous-même. - Un jeton invalide ou de plus de 30 jours répond
400 invalid_request« sync_token expired, do a full sync » : recommencez sans jeton.
# 1. first time: no token → the last 30 days, and a token to keep
GET https://api.a1merica.ai/v1/calls?limit=200
→ {"items": [...], "next_cursor": "…", "sync_token": "eyJzaW5jZSI6IjIwMjYtMDktMjVUMTY6MDA6MDBaIiwiaWQiOm51bGx9"}
# 2. later: only what was created or changed since → a fresh token
GET https://api.a1merica.ai/v1/calls?sync_token=eyJzaW5jZSI6…
→ {"items": [ …the delta… ], "next_cursor": null, "sync_token": "eyJzaW5jZSI6…"}
# 3. a token older than 30 days
→ 400 {"error": {"type": "invalid_request", "message": "sync_token expired, do a full sync", "request_id": "…"}}
Parcourez d'abord toutes les pages (next_cursor) avant d'enregistrer le sync_token de la dernière ; c'est lui qui marque « jusqu'ici, j'ai tout ». Un objet peut apparaître dans deux synchronisations consécutives s'il a changé entre-temps : appliquez la ligne par son id, et le résultat est le même.
