LidmeoDevelopers

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 : le next_cursor de la page précédente, pour lire la suivante.
  • has_more : false sur la dernière page, où next_cursor vaut null.

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.

Sur cette page