Page through list endpoints with limit and cursor.
List endpoints use cursor-based pagination.
Parameters
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
limit | integer | 10 | 1 to 50 | Number of records to return. A value above 50 returns 422 validation_error. |
cursor | string | — | Opaque | The nextCursor from the previous response. Omit on the first request. |
Response
| Field | Description |
|---|---|
data | The records on this page. |
nextCursor | The cursor for the next page, or null on the last page. |
Lists are sorted by createdAt, oldest first, unless the endpoint states otherwise.
Example
# First page
curl "https://api.join.com/v3/candidates?limit=50" \
-H "Authorization: Bearer $JOIN_API_TOKEN"
# Next page
curl "https://api.join.com/v3/candidates?limit=50&cursor=eyJpZCI6NDIxMH0" \
-H "Authorization: Bearer $JOIN_API_TOKEN"async function listAll(path) {
const records = []
let cursor = null
do {
const url = new URL(`https://api.join.com/v3${path}`)
url.searchParams.set('limit', '50')
if (cursor) url.searchParams.set('cursor', cursor)
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.JOIN_API_TOKEN}` },
})
if (!res.ok) throw new Error(`${res.status} ${(await res.json()).error.code}`)
const body = await res.json()
records.push(...body.data)
cursor = body.nextCursor
} while (cursor)
return records
}Rules
- Cursors are opaque. Pass them back unchanged. Do not parse, build, or store them long term.
- Keep the same filters. A cursor continues the query it came from. Send the same filters with every page.
- An invalid or expired cursor returns
400 cursor_invalid. Restart from the first page. - No total count. Responses do not include a total. Page until
nextCursorisnull.
Filters
Filters combine with AND. A filter that matches nothing returns an empty list, not 404.
To sync changes incrementally, filter on the update time and keep the latest updatedAt you have processed:
curl "https://api.join.com/v3/applications?updatedAfter=2026-10-01T00:00:00Z&limit=50" \
-H "Authorization: Bearer $JOIN_API_TOKEN"