Job Monkey

full feed (paid)

POST /v1/jobs

Full jobs by GUID (up to 1,000); closed or unknown GUIDs come back free in `missing`

Full jobs by a list of GUIDs: what you call after new and reopened events. A closed or unknown GUID comes back in missing, marked, free. The order of jobs follows the list. Send Idempotency-Key to make a retry free: the same key inside 24 hours replays the answer (replayed: true) and charges nothing.

Charged: every full job in the answer, every time; a GUID in `missing` is free.

Body

{
 "guids": [
  "<job_guid>",
  "... up to 1,000"
 ]
}

Answer

{
 "jobs": [
  "<full job>"
 ],
 "missing": [
  {
   "job_guid": "<guid>",
   "status": "closed | unknown",
   "closed_at": "<time or null>"
  }
 ],
 "charged": 1,
 "plan_jobs_remaining": 99874,
 "replayed": false
}

Example

curl -s -X POST https://api.jobmonkey.ai/v1/jobs -H 'Authorization: Bearer cb_live_XXXXXXXX' -H 'Content-Type: application/json' -d '{"guids": ["21b3928d-c2ea-4b3b-8281-7bdf05adbf1b", "7a9484c0-87bd-4e8c-98ca-6fbba278ac46"]}'
{
 "jobs": [
  {
   "job_guid": "21b3928d-c2ea-4b3b-8281-7bdf05adbf1b",
   "title": "Contract Staff Software Engineer - Performance Graphics",
   "ai_title": "Staff Software Engineer, Performance Graphics",
   "company": "Mozilla",
   "company_guid": "7e398417-be03-4f42-a7af-badb1f4c10df",
   "industry": "Technology",
   "source": "greenhouse",
   "url": "https://job-boards.greenhouse.io/mozilla/jobs/8220545",
   "description": "The role\n\nYou will take on ...",
   "requirements": "Required qualifications\n- Strong C++ and/or Rust. ...",
   "benefits": null,
   "ai_workplace_type": "Remote Solely",
   "ai_employment_type": "CONTRACTOR",
   "ai_experience_level": "8",
   "ai_salary_min": 131400,
   "ai_salary_max": 186172,
   "ai_salary_currency": "CAD",
   "salary_min": 131400,
   "salary_max": 186172,
   "salary_currency": "CAD",
   "salary_period": "YEAR",
   "posted_date": "2026-09-22T13:46:21Z",
   "expiry_date": null,
   "date_modified": "2026-09-24T12:28:41Z",
   "first_seen": "2026-09-22T14:02:11Z",
   "ai_job_language": "English",
   "ai_education": null,
   "ai_visa_sponsorship": false,
   "location_json": [
    {
     "city": "Toronto",
     "state": "Ontario",
     "country": "Canada",
     "lat": 43.70643,
     "lng": -79.39864,
     "precision": "town",
     "guessed": true
    }
   ],
   "remote_location_json": [],
   "ai_languages": [],
   "ai_onet_code": "",
   "ai_onet_title": "",
   "ai_soc_code": "",
   "ai_soc_title": "",
   "ai_noc_code": "",
   "ai_noc_title": "",
   "ai_isco_code": "",
   "ai_isco_title": "",
   "ai_esco_code": "",
   "ai_esco_title": "",
   "ai_summary": "",
   "ai_skills": [],
   "ai_keywords": [],
   "countries": [
    "Canada"
   ],
   "timezones": [
    "America/Toronto"
   ],
   "derived": [
    "ai_experience_level",
    "ai_visa_sponsorship"
   ],
   "is_active": true,
   "sync_status": "Active",
   "closing_since": null
  }
 ],
 "missing": [
  {
   "job_guid": "7a9484c0-87bd-4e8c-98ca-6fbba278ac46",
   "status": "closed",
   "closed_at": "2026-11-03T11:20:50Z"
  }
 ],
 "charged": 1,
 "plan_jobs_remaining": 99874,
 "replayed": false
}

In Python

import json, urllib.request

KEY = "cb_live_XXXXXXXX"
body = {"guids": ["21b3928d-c2ea-4b3b-8281-7bdf05adbf1b", "7a9484c0-87bd-4e8c-98ca-6fbba278ac46"]}
req = urllib.request.Request("https://api.jobmonkey.ai/v1/jobs", data=json.dumps(body).encode(),
                             headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"})
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 (no guids, a bad GUID, bad JSON)
  • 401 no_key / bad_key / account_off
  • 413 too_many_guids (over 1,000)
  • 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.