Held closures and closing_since
Boards go dark for a day: a bad harvest run, a site that timed out, a board being moved. If we closed every job we could not see, you would get a closed and a reopened for thousands of jobs that never changed. So a closure is held first.
What you see
- While a closure is held, the job is still open in the ledger and in your pages, with
closing_sinceset to the time it was last missing. Keep such a job out of matching and search while the field is set; do not drop it yet. - When the job comes back,
closing_sincegoes back to null. No event is written for the hold or the return: for you, nothing happened. - When it does not come back inside the hold (up to 48 hours), one
closedevent is written. Itsatis when the closure was published; itsclosed_atis when the job last left its board.
In numbers
GET /v1/jobs/count answers jobs (open jobs in your cut, held ones included) and held (how many of them are held right now). The home page's "jobs live" leaves held closures out.
What to do
for job in page["jobs"]:
upsert(job)
if job["closing_since"]:
hide(job["job_guid"]) # out of search and matching, still in the store
else:
show(job["job_guid"])
On a closed event, drop the job. On a reopened event, fetch it again by GUID (it may have changed while closed): the GUID is the same one it had before.
curl -s 'https://api.jobmonkey.ai/v1/events?event=closed,reopened&country=Canada&cursor=9600000' \
-H 'Authorization: Bearer cb_live_XXXXXXXX'
Closed jobs are never served by the full feed: a closed GUID in POST /v1/jobs comes back in missing with status: closed and its closed_at, free.