Changes feed
GET /v1/changes?since={next_since}sinceis thenext_sincefrom your previous call. Leave it out once, to start from now.- Any search filter, and
fields, decidematchesfor each change. They never hide a change. limitis 1 to 500 changes, 500 by default.
Every parameter is in the API reference.
Returns changes oldest first:
{ "changes": [ { "change": "updated", "id": "bsj_8f3k2m9q", "matches": true, "job": { } }, { "change": "updated", "id": "bsj_8f3k2mzz", "matches": false, "job": null }, { "change": "closed", "id": "bsj_8f3k2n01", "matches": false, "job": null } ], "next_since": "…", "more": false}changeiscreated,closed, orupdated(anything else a board can see changed, including a job reopening).matchesis true when the job, as it is now, is open and passes your filters. A closed job never matches.jobis the full record whenmatchesis true, otherwisenull.- Every change is listed whatever your filters, so you hear about a job that left your filter or closed, not only jobs that match.
- A job that changed several times appears once, in its latest state.
- Call again with
next_sinceuntilmoreisfalse. A page can be short, even empty, withmore: true. sincevalues never expire. A board that was away for a month just pages through more changes.- A
sincethis feed never handed out is a409: start again from the first run.
Changes appear in the feed within about 15 seconds.
The sync loop
Section titled “The sync loop”first run: s = next_since from /v1/changes (no since) page through /v1/jobs?category=electrical&country=US, upsert every jobevery hour: /v1/changes?since=s&category=electrical&country=US, until more is false matches: upsert the job and show it not matches (including every closed job): hide it if you have it s = next_sinceAlways upsert by id: a created change can arrive for a job you already stored from your first pull.
Poll once an hour; once a day at the same hour also works. Backspin rechecks each employer about every six hours, so polling more often mostly returns nothing.