{"openapi":"3.1.0","info":{"title":"Job Monkey API","description":"Clean, open jobs with GUIDs, kept current. One key (`Authorization: Bearer cb_live_...`), JSON, cursors that never skip.\nThe one thing charged is a full job returned by the full feed (`/v1/jobs`, and a snapshot file), every time it is returned; events, updates,\ncompanies, counts and search cost nothing. A buyer's loop: load a snapshot or page `/v1/jobs` once, then read `/v1/events` from the cursor,\nthen fetch the GUIDs it wants from `/v1/jobs`. Every answer carries `X-Request-Id`, `X-Units-Charged`, `RateLimit` and `RateLimit-Policy`;\nthe full feed adds `X-Plan-Jobs-Remaining`. Errors: `{\"error\": {\"code\": \"...\", \"message\": \"...\"}}`. Times are UTC, ISO 8601.","version":"1.0"},"servers":[{"url":"https://api.jobmonkey.ai"}],"paths":{"/v1/jobs":{"get":{"tags":["full feed (paid)"],"summary":"Full jobs by cursor: a first load cut to countries and systems","operationId":"jobs_by_cursor_v1_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["full feed (paid)"],"summary":"Full jobs by GUID (up to 1,000); closed or unknown GUIDs come back free in `missing`","operationId":"jobs_by_guid_v1_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/jobs/count":{"get":{"tags":["counts (free)"],"summary":"Open jobs, held closures and companies for a cut","operationId":"jobs_count_v1_jobs_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/events":{"get":{"tags":["events (free)"],"summary":"Job events after a cursor: new, changed (with the new values), closed, reopened","operationId":"events_v1_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/updates":{"get":{"tags":["events (free)"],"summary":"Changed fields with their new values: the events stream filtered to `changed`","operationId":"updates_v1_updates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/events/count":{"get":{"tags":["counts (free)"],"summary":"Events after a cursor, by kind: how far behind a buyer is","operationId":"events_count_v1_events_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/companies":{"get":{"tags":["companies (free)"],"summary":"Companies in GUID order for a cut, or by GUID (`guid=a,b,c`)","operationId":"companies_v1_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/companies/events":{"get":{"tags":["companies (free)"],"summary":"Company changes after a cursor (the same ledger numbers as the job events)","operationId":"company_events_v1_companies_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/search":{"get":{"tags":["search (house keys)"],"summary":"Title search over open jobs: shape=page (the card) or shape=match (GUIDs for a campaign)","operationId":"search_v1_search_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/snapshots":{"get":{"tags":["snapshots (paid per file)"],"summary":"The newest weekly snapshot: its files, their jobs, bytes and sha256","operationId":"snapshots_v1_snapshots_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/snapshots/{stamp}/{file}":{"post":{"tags":["snapshots (paid per file)"],"summary":"A 24-hour link to one snapshot file (`everything` or a country); the file's jobs are charged once","operationId":"snapshot_link_v1_snapshots__stamp___file__post","parameters":[{"name":"stamp","in":"path","required":true,"schema":{"type":"string","title":"Stamp"}},{"name":"file","in":"path","required":true,"schema":{"type":"string","title":"File"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/health":{"get":{"tags":["health"],"summary":"200 when every database answers","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}