Pagination & sync
List endpoints are paginated and return a meta object next to data:
{
"data": [ { "uuid": "…" }, { "uuid": "…" } ],
"meta": { "page": 1, "per_page": 25, "total": 312, "has_more": true }
}
| Parameter | Default | Max | |
|---|---|---|---|
page |
1 | — | Page number, from 1 |
per_page |
25 | 100 | Items per page |
Fetch everything
import os, requests
def fetch_all(path, **params):
page = 1
while True:
r = requests.get(
f"https://app.jecheck.io/api/ext/v1{path}",
headers={"Authorization": f"Bearer {os.environ['JECHECK_TOKEN']}"},
params={**params, "page": page, "per_page": 100},
)
r.raise_for_status()
body = r.json()
yield from body["data"]
if not body["meta"]["has_more"]:
break
page += 1
tasks = list(fetch_all("/tasks", status="in_progress"))
Incremental sync with updated_since
Most lists accept updated_since (ISO 8601 timestamp). Store the time of your last successful sync and ask only for what changed:
curl "https://app.jecheck.io/api/ext/v1/tasks?updated_since=2026-11-03T09:00:00%2B05:00&sort=updated_desc&per_page=100" \
-H "Authorization: Bearer $JECHECK_TOKEN"
Recommended loop:
- Remember
sync_started = now()before the request. - Page through
updated_since=<last_sync>. - Upsert every record by its id / uuid.
- Save
last_sync = sync_started(not the time you finished — that avoids gaps).
Deleted records disappear from lists. To detect deletions run a periodic full sync of ids.
Filters
Filters are query parameters. Arrays can be passed either repeated or comma-separated — these are equivalent:
/tasks?status[]=new&status[]=in_progress
/tasks?status=new,in_progress
Dates are YYYY-MM-DD; moments are ISO 8601 with a time-zone offset. Analytics endpoints take period (7d, 30d, 90d, 12m or custom with from/to).