Get Companies Open Jobs
POST /companies/open-jobs
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.
Authorizations
Parameters
Header Parameters
Request Body required
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.
object
CRM company IDs (mashup_companies.id) - NOT linkedin_company_id
False = counts only (one CH query)
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.
Responses
200
Successful Response
object
object
422
Validation Error