Drie lijsten zijn gepagineerd: leads, conversations en content-gaps. Je bladert met een cursor: elke pagina vertelt of er meer is en waar de volgende begint. Met since haal je alleen op wat sinds een bepaald moment veranderd is.
Parameters
Queryparameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
| limit | getal | 50 | Aantal rijen per pagina, hoogstens 200. Een grotere waarde wordt 200. |
| cursor | tekst | De nextCursor van de vorige pagina. Dat is het id van de laatste rij op die pagina. | |
| since | datum | Alleen rijen vanaf dit moment, als ISO-datum, bijvoorbeeld 2026-11-01 of 2026-11-01T08:00:00Z. |
Bij leads en conversations wordt een limit met decimalen naar beneden afgerond, en een waarde van 0 of lager, of die geen getal is, wordt 50.
Antwoordvorm
{
"data": [ ... ],
"hasMore": true,
"nextCursor": "<id van de laatste rij op deze pagina>"
}
hasMoreistrueals er na deze pagina nog rijen zijn.nextCursoris het id van de laatste rij op deze pagina alshasMoretrue is, en andersnull.- De volgende pagina begint direct na die rij.
Let op
{"data":[],"hasMore":false,"nextCursor":null}. Geef dus altijd de nextCursor door zoals je hem kreeg.Voorbeeld
Een werkruimte met drie leads, opgehaald per twee. De eerste aanroep geeft twee rijen met hasMore: true:
curl "https://leadforge.nl/api/v1/leads?limit=2" \
-H "Authorization: Bearer LF_LIVE_SLEUTEL"
De tweede aanroep met de nextCursor van de eerste geeft de laatste rij met hasMore: false:
curl "https://leadforge.nl/api/v1/leads?limit=2&cursor=NEXT_CURSOR" \
-H "Authorization: Bearer LF_LIVE_SLEUTEL"
Alles ophalen
Blader door tot hasMore false is. Met limit=200 heb je de minste verzoeken nodig.
cursor=""
while :; do
antwoord=$(curl -s "https://leadforge.nl/api/v1/leads?limit=200${cursor:+&cursor=$cursor}" \
-H "Authorization: Bearer LF_LIVE_SLEUTEL")
echo "$antwoord" | jq -c '.data[]'
[ "$(echo "$antwoord" | jq -r '.hasMore')" = "true" ] || break
cursor=$(echo "$antwoord" | jq -r '.nextCursor')
done
const sleutel = 'LF_LIVE_SLEUTEL';
const leads = [];
let cursor = null;
do {
const url = new URL('https://leadforge.nl/api/v1/leads');
url.searchParams.set('limit', '200');
if (cursor) url.searchParams.set('cursor', cursor);
const antwoord = await fetch(url, { headers: { Authorization: `Bearer ${sleutel}` } });
if (!antwoord.ok) throw new Error(`HTTP ${antwoord.status}`);
const pagina = await antwoord.json();
leads.push(...pagina.data);
cursor = pagina.hasMore ? pagina.nextCursor : null;
} while (cursor);
console.log(leads.length);
import json
import urllib.parse
import urllib.request
SLEUTEL = "LF_LIVE_SLEUTEL"
leads = []
cursor = None
while True:
query = {"limit": 200}
if cursor:
query["cursor"] = cursor
url = "https://leadforge.nl/api/v1/leads?" + urllib.parse.urlencode(query)
verzoek = urllib.request.Request(url, headers={"Authorization": f"Bearer {SLEUTEL}"})
with urllib.request.urlopen(verzoek) as antwoord:
pagina = json.load(antwoord)
leads.extend(pagina["data"])
if not pagina["hasMore"]:
break
cursor = pagina["nextCursor"]
print(len(leads))
Het curl-voorbeeld gebruikt jq om het antwoord te lezen.
Filteren met since
| Lijst | since filtert op | Ongeldige since | Sortering |
|---|---|---|---|
/api/v1/leads | updatedAt, vanaf dit moment | Genegeerd, je krijgt de lijst zonder filter | Nieuwste lead eerst, op createdAt |
/api/v1/conversations | lastMessageAt, vanaf dit moment | Genegeerd, je krijgt de lijst zonder filter | Laatste bericht eerst, op lastMessageAt |
/api/v1/content-gaps | updatedAt, vanaf dit moment | 400 met code bad_request | Vaakst gesteld eerst, op frequency |
Elke lijst heeft daarnaast eigen filters, zoals status bij leads en label bij conversations. Die staan op de pagina van de lijst.
Lijsten zonder paginering
agents, campaigns en modules geven alles in één keer terug, zonder hasMore en nextCursor. Bij campaigns zijn dat hoogstens 100 campagnes.