Job Monkey

full feed (paid)

GET /v1/jobs

Full jobs by cursor: a first load cut to countries and systems

The first load: pages platinum jobs in GUID order for the cut. The first call has no cursor; it fixes the ledger's seq at that moment. The last page has more: false and ledger_seq: read /v1/events from there. Held closures are in the pages, marked by closing_since. A page is cut to the jobs left on the plan, so you never pay past the plan.

Charged: every full job in the answer, every time.

Parameters

NameTypeDefaultAllowedWhat
countrylistnone (every country)country namesthe cut by country
systemlistnone (every system)ATS namesthe cut by system
limitinteger1001 to 1000jobs a page
cursortextnone (the first page)the next value of the previous page: <seq>:<job_guid>passed back unchanged

An unknown parameter is a 400 bad_request. country and system take one value, a comma list (country=Canada,Mexico) or a repeat (country=Canada&country=Mexico); the country is its English name as the data holds it; the system is the ATS name (greenhouse, lever.co, workday, ...): /v1/jobs/count lists the sizes, /docs/sizes shows them.

Answer

{
 "jobs": [
  "<full job>",
  "..."
 ],
 "next": "9648658:21b3928d-c2ea-4b3b-8281-7bdf05adbf1b",
 "more": true,
 "ledger_seq": 9648658,
 "charged": 100,
 "plan_jobs_remaining": 99900
}

Example

curl -s 'https://api.jobmonkey.ai/v1/jobs?country=Canada&system=greenhouse,lever.co&limit=2' -H 'Authorization: Bearer cb_live_XXXXXXXX'
{
 "jobs": [
  "<full job>",
  "<full job>"
 ],
 "next": "9648658:21b3928d-c2ea-4b3b-8281-7bdf05adbf1b",
 "more": true,
 "ledger_seq": 9648658,
 "charged": 2,
 "plan_jobs_remaining": 99998
}

In Python

import json, urllib.request

KEY = "cb_live_XXXXXXXX"
req = urllib.request.Request("https://api.jobmonkey.ai/v1/jobs?country=Canada&system=greenhouse,lever.co&limit=2", headers={"Authorization": f"Bearer {KEY}"})
with urllib.request.urlopen(req) as r:
    answer = json.load(r)
    print(r.headers.get("X-Request-Id"), r.headers.get("X-Units-Charged"))
print(json.dumps(answer, indent=1)[:800])

Errors

  • 400 bad_request
  • 401 no_key / bad_key / account_off
  • 429 rate_limited
  • 429 plan_exhausted

Headers

  • X-Request-Id
  • X-Units-Charged
  • RateLimit (limit=10, remaining=n, reset=s)
  • RateLimit-Policy (10;w=1, plus 10;w=86400 on a free key calling a free route)
  • X-Plan-Jobs-Remaining (the full feed and snapshots, when the plan has a cap)
  • X-Account: past_due (while an invoice is unpaid)

Every answer carries X-Request-Id; quote it to [email protected]. Times are UTC, ISO 8601.