---
title: "Get Companies Open Jobs"
method: POST
path: "/companies/open-jobs"
tags: ["Companies"]
---

# Get Companies Open Jobs

`POST /companies/open-jobs`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/companies/open-jobs`
- Auth: HTTP bearer

What are these CRM companies hiring for, right now?

A growth/buying signal: a company staffing up is a company with budget.
Unrelated to `/marketplace/job-posts`, which publishes SDR roles you are
recruiting for - both are called "jobs" but they share no data.

`company_ids` are `mashup_companies.id` values, NOT `linkedin_company_id`.
Both are bare ints, so passing the wrong one addresses a different company
rather than erroring.

Results split into `items` (resolved) and `unresolved`. An unresolved
company is normal: it means the company could not be matched to a LinkedIn
company page, not that it is not hiring. Read `lcid_confidence` before
trusting a match - 1.0 is an exact LinkedIn-URL match, 0.7 is a domain
fallback that can mismatch on shared or parked domains. `open_jobs` counts
postings seen within `window_days`; the source carries no open/closed state,
so a filled role lingers until it ages out.

Org isolation is by Postgres schema, so ids belonging to another org come
back as `unresolved` with no existence disclosure. Owner-level RBAC
(`CompanyScopeFilter`) is deliberately not applied: it reads
`user.permissions`, which an API-key user does not carry, so wiring it in
would resolve every API-key caller to scope "none" and return zero rows.

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Request body

- CompaniesOpenJobsRequest: Request contract for the hiring-signal batch lookup. Field-for-field identical to the main-app model of the same name in ``companies/interfaces/fastapi/router.py``. It is redefined here rather than imported because that module imports ``developer_api.dependencies.hybrid_auth``; importing it back would couple the two app halves at import time. ``test_companies_open_jobs_api.py`` locks the two models together so the duplication cannot silently drift.
  - `company_ids` integer[], required: CRM company IDs (mashup_companies.id) - NOT linkedin_company_id
  - `window_days` integer
  - `include_postings` boolean: False = counts only (one CH query)
  - `limit_per_company` integer
  - `include_subsidiaries` boolean: Roll subsidiary postings into the parent. Off by default: one row = one company. NOTE: when true, `jobs` expands to child companies but `open_jobs` stays parent-only, so len(jobs) can exceed open_jobs.

## Response `200`

Successful Response

- ApiResponseDict
  - `data` object, required
  - `pagination` PaginationMeta
    - `page` integer, required: Current page number (1-indexed)
    - `limit` integer, required: Items per page
    - `total` integer, required: Total number of items
    - `has_next` boolean, required: Whether there are more pages
    - `next_cursor` string, nullable: Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers.
    - `total_available` integer, nullable: Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search.
    - `total_is_lower_bound` boolean, nullable: Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search.
    - `notes` string[], nullable: Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/2e7cfa0ca921?raw)
