---
title: "A company's open reqs, deduped across boards"
method: GET
path: "/v1/companies/{company_id}/open-reqs"
---

# A company's open reqs, deduped across boards

`GET /v1/companies/{company_id}/open-reqs`

## Request

- Base URL: `https://api.reqbeat.com`
- URL: `https://api.reqbeat.com/v1/companies/{company_id}/open-reqs`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

The company's current active reqs, deduped across boards --
LinkedIn-excluded: ATS tenants plus public job boards and aggregators; each
row's `boards` names its source. Freshness-floored. The same real req posted on two
boards appears once, with both boards listed.

An unresolvable `function` -- anything that is not a function taxonomy
id -- is rejected with 422 instead of returning a silently-empty
result. `limit` is bounded: an oversized page is rejected with 422
rather than truncated.

Requires the `read` scope.

## Path parameters

- `company_id` integer, required: The plane's company id -- returned as `company_id` by /v1/reqs/search and by every company motion response.

## Query parameters

- `function` string, nullable: Filter to one function: its name as served in `function_name`, e.g. 'Software & IT', or its taxonomy id as served in `function`, e.g. '54f81306-3000-5c4a-a088-dca4350b19ff'. A name covers every function id that serves it; an id matches that one id. Anything else is rejected with 422, which lists the names.
- `country` string, nullable: Filter to one country by name, e.g. 'United States'. Matched against the geocoder's pinned country list.
- `limit` integer: Maximum reqs to return. An out-of-range value is rejected with 422 rather than silently truncated.

## Headers

- `Idempotency-Key` string, nullable

## Response `200`

Successful Response

- OpenReqsResponse
  - `reqs` OpenReqItem[], required
    - `title` string, nullable, required: The normalized posting title, as the crawler normalizer wrote it. OPTIONAL: present on 73.1% of served reqs (309,255 of 422,826, measured 2026-10-07). `null` means the posting's signal produced no normalized title -- it failed normalization, or normalized without one -- never that the req has no title. Read `raw_title` for a label that is always there; it is populated on every served req.
    - `raw_title` string, nullable: The posting title exactly as the board published it. Populated on 100% of served reqs (422,826 of 422,826, measured 2026-10-07), so this is the field to render when `title` is null.
    - `function` string, nullable, required
    - `country` string, nullable, required
    - `first_seen` string, date-time, required: Our first observation of this req (not the employer's posting date). The `since` parameter filters on this value.
    - `source_posted_at` string, date-time, nullable: The posting date the source itself published for this req. Null when the source gave no date, or none has been recorded yet -- `first_seen` is then the only date we hold, and it is our observation time.
    - `boards` string[], required
    - `source_type` 'ats_tenant' | 'board', nullable: What kind of source this req was most recently read from: 'ats_tenant' (the employer's own applicant tracking system) or 'board' (a job board or aggregator). Most served reqs are 'board'; pass `source_type=ats_tenant` to keep only the ones read from the employer's own system.
    - `country_code` string, nullable, required: The posting country's ISO-3166-1 alpha-2 code, uppercase (`DE`, `US`), derived from `country` and never stored. `null` when `country` is absent or is not a country this corpus names — never a guess. Note this is an output only: the `geo`/`country` filter still takes the name, because a bare two-letter code is ambiguous on input (`CA` is Canada to ISO and California to this column).
    - `function_name` string, nullable, required: The job function's human-readable name (`Software & IT`, `Healthcare`), derived from `function` and never stored. The `?function=` filter accepts this name as well as the opaque taxonomy id in `function`. `null` when the req carries no function attribution (`unspecified`, 10.2% of served reqs), or when it was classified from its skills alone, so its id is outside the named title-family vocabulary (16.7%) — never a guess and never the raw id. Named on 73.1% of served reqs (309,251 of 422,826, measured 2026-10-07).
  - `as_of` string, date-time, required
  - `coverage_status` 'ats_direct_hit' | 'board_hit' | 'no_ats_signal' | 'unsupported_ats', required

## Other responses

- `401`: No API key was sent.
- `402`: The key is over its plan's rolling call quota, or the account is past its spend cap. `upgrade_url` and `purchase_url` are the ways out.
- `403`: The presented key is invalid or revoked, or (see `x-required-scope` on this operation) it does not carry the scope this operation requires.
- `422`: Validation Error
- `429`: Too many calls in the current 60-second window. The limit is per API key, set by the key's plan, and shared by every metered REST route and MCP tool; the shared demo key is limited per IP address instead. Wait `Retry-After` seconds and retry. The `RateLimit-*` headers are absent when `reason` is `key_throttled`.

---

[API](https://skmtc.dev/reqbeat/apis/reqbeat-api.md) · [All operations](https://skmtc.dev/reqbeat/apis/reqbeat-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reqbeat/apis/reqbeat-api/revisions/4758e5957e8c?raw)
