Guide

Pagination

Lists come a page at a time with a cursor to the next page. Cursors stay correct while records are added, so you never skip or repeat one.

Cursors

Lists return { data, nextCursor, hasMore }. Ask for up to 200 records with limit (default 50) and pass nextCursor back as cursor for the next page, until hasMore is false. Lists of students, families and staff also take updatedSince to fetch only what changed.

curl "https://api.school360.cloud/v1/students?status=active&limit=200" \
  -H "Authorization: Bearer $SCHOOL360_KEY"
# → { "data": [...], "nextCursor": "eyJpZCI6MjAwfQ", "hasMore": true }

curl "https://api.school360.cloud/v1/students?status=active&limit=200&cursor=eyJpZCI6MjAwfQ" \
  -H "Authorization: Bearer $SCHOOL360_KEY"
# … until "hasMore": false

Only what changed

Lists of students, families and staff take updatedSince (an ISO date-time): keep the time you started your last sync and pass it next time to fetch only what was added or changed. For deletions and other records, poll GET /changes.

curl
# Only the students added or changed since your last sync
curl "https://api.school360.cloud/v1/students?updatedSince=2026-10-01T00:00:00Z&limit=200" \
  -H "Authorization: Bearer $SCHOOL360_KEY"

Good to know

  • Pass the cursor exactly as you got it; don't build or change one.
  • Keep the other parameters (filters, limit) the same while you follow cursors.
  • Use limit=200 for bulk syncs: fewer requests, well inside the rate limit.
  • Short lists (campuses, sessions, classes, sections, subjects) come in one answer, without paging.