---
title: "A company's hardest-to-fill reqs"
method: GET
path: "/v1/companies/{company_id}/repost-pain"
---

# A company's hardest-to-fill reqs

`GET /v1/companies/{company_id}/repost-pain`

## Request

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

Hard-to-fill reqs by repost count, hardest first -- LinkedIn-excluded
(ATS tenants plus public job boards and aggregators),
freshness-floored. Free-tier reads are history-capped.

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.

## Headers

- `Idempotency-Key` string, nullable

## Response `200`

Successful Response

- RepostPainResponse
  - `reqs` RepostPainItem[], required
    - `title` string, nullable, required
    - `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.
    - `repost_count` ProvenanceOut, required
      - `value` unknown, required
      - `source_board` string, nullable: The board this value was read from. Null when the value is computed across many boards rather than read from one -- every hiring-pulse scalar is, so it is always null there; the boards behind the pulse are listed once in its `source_boards`.
      - `observed_at` string, date-time, nullable: When this value was observed. For a value computed across the company's whole ledger (every hiring-pulse scalar) this is the time it was computed -- the request time, equal to the pulse's `as_of` -- not when any posting behind it was last seen.
    - `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

## 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)
