Documentation

Pagination

GET /v1/jobs and GET /v1/search return pages. Paging is cursor-based.

Parameters

ParameterTypeDefaultAllowed
limitinteger201 to 100
cursorstringnone — start at the beginningthe next_cursor of the previous page

Page shape

JSONCode
{ "items": [ { "id": 536359, "title": "…" } ], "has_more": true, "next_cursor": "NTM2MzY1" }
KeyTypeMeaning
itemsarray of JobThe jobs on this page, ordered by id ascending.
has_morebooleantrue if at least one more job follows this page.
next_cursorstring or nullPass it as cursor to get the next page; null when has_more is false.

How to walk all pages

  1. Request the first page without cursor.
  2. Process items.
  3. If has_more is true, request again with the same parameters plus cursor=<next_cursor>; otherwise stop.

Complete loops in Python and JavaScript are in the Quick start.

Behaviour you can rely on

  • Order is by id ascending, for both list and search. Because the cursor marks the last id you received, you never see the same job twice in one walk.
  • Cursors are opaque. Pass them back unchanged. A cursor this API did not issue answers 422 {"error": "invalid cursor"}.
  • Cursors do not expire. A cursor holds no server-side state, so you can resume a walk later.
  • Keep the same query when paging a search. The cursor only marks a position; send the same q with every page.
  • A page can be shorter than limit when your monthly allowance has fewer jobs left than limit. has_more still tells you whether more jobs follow. See Errors & limits.