Pagination
Lire une liste page par page, avec un curseur, et ne relire que ce qui a changé.
Toutes les listes répondent de la même façon :
{
"object": "list",
"data": [ ... ],
"has_more": true,
"next_cursor": "cur_eyJ2IjoxLCJpZCI6NDgyMTN9"
}limit: le nombre d'éléments par page, de 1 à 100 (25 par défaut).starting_after: lenext_cursorde la page précédente, pour lire la suivante.has_more:falsesur la dernière page, oùnext_cursorvautnull.
Une page peut contenir moins d'éléments que limit, voire aucun, sans être la dernière : quand un filtre écarte beaucoup de fiches, Lidmeo rend ce qu'il a examiné et un curseur pour la suite. Continuez tant que has_more vaut true, jamais d'après le nombre d'éléments.
Les listes courtes (GET /v1/campaigns, GET /v1/stages, GET /v1/lists, GET /v1/webhook_endpoints) se rendent en une fois : elles ne prennent ni limit ni starting_after, et leur has_more vaut false.
Un curseur est opaque : ne le lisez pas, ne le fabriquez pas, gardez-le tel quel. Il commence par cur_, ou c'est l'identifiant du dernier élément rendu (evt_… pour les événements). Un curseur abîmé répond 400 invalid_request (champ query.starting_after) : reprenez depuis la première page. Il n'existe pas de pagination par numéro de page : un élément ajouté pendant votre lecture ne décale pas les pages suivantes.
Un paramètre que la route ne connaît pas n'est jamais ignoré : il répond 400 invalid_request, avec le code unknown_parameter et le champ query.<nom>. Ainsi, limit envoyé à une liste courte est refusé.
curl "https://api.lidmeo.com/v1/prospects?limit=100&starting_after=cur_eyJ2IjoxLCJpZCI6NDgyMTN9" \
-H "Authorization: Bearer $LIDMEO_API_KEY"Les SDK parcourent les pages pour vous :
for await (const prospect of lidmeo.paginate((q) => lidmeo.prospects.list({ ...q, limit: 100 }))) {
console.log(prospect.full_name);
}Ne relire que ce qui a changé
updated_since (une date ISO 8601 avec son fuseau, par exemple 2026-10-01T08:00:00+02:00 ; un jour seul commence à minuit, heure de Paris) ne garde que ce qui a changé depuis, sur GET /v1/prospects et GET /v1/conversations. Gardez l'heure de votre dernière lecture, et repartez de là.
- Sur les prospects, c'est un changement de la fiche elle-même : ajouter ou retirer une liste, relier un identifiant externe ou renommer une étape ne la fait pas remonter.
- Sur les conversations, c'est le dernier message, à cette date ou après.
- Avec une vue (
view) ou la recherche, il ne se combine pas :400 invalid_request.
Pour suivre les changements au fil de l'eau, les événements sont faits pour cela.
Une liste très longue
Quand une vue calculée (« À traiter », « À relancer »…) porte plus d'éléments que Lidmeo n'en parcourt en une fois, la réponse porte truncated: true : resserrez-la, par exemple avec campaign, pour voir les autres. Une liste n'est jamais coupée en silence.