Lists and pagination
curl -s "https://estalo.pl/api/v1/leads?limit=50&updated_gte=2026-10-01T00:00:00Z" \
-H "Authorization: Bearer est_live_xxxxxxxxxxxx_<your-key>"
{
"data": [{ "id": "…", "status": "new", "...": "..." }],
"pagination": { "limit": 50, "has_more": true, "next_cursor": "eyJ2Ijox…" }
}
Results are ordered by id ascending. Pass next_cursor back as cursor with the same filters until has_more is false; a cursor reused with different filters or on another resource is rejected with 400. limit is 1–100 (default 25). A page shorter than limit with has_more: false really is the end; nothing is silently cut off.
Date filters take ISO 8601 timestamps with a time zone (Z or +02:00). Date-only values are rejected so that nobody has to guess whether midnight means UTC or Warsaw. In a query string a literal + means a space, so write a positive offset as %2B02:00 (curl does not encode it for you); an unencoded +02:00 is rejected with a message that says so.
| Filter | Meaning | Resources |
|---|---|---|
created_gte, created_lt | created_at >= / < | all |
updated_gte, updated_lt | updated_at >= / < | all |
start_gte, start_lt | start_time | events |
due_gte, due_lt | due_date | tasks |
For incremental sync, keep the time of your last successful run and ask for updated_gte of that time minus a minute or two; deduplicate by id.
Unknown or repeated query parameters are a 400, never ignored. Detail endpoints accept no query parameters.