---
title: "BETA — partial data. One company's open-roles count over 30/90/365 days; real daily snapshots from 2026-10-06."
method: GET
path: "/public/companies/{slug}/open-roles-history"
tags: ["public"]
---

# BETA — partial data. One company's open-roles count over 30/90/365 days; real daily snapshots from 2026-10-06.

`GET /public/companies/{slug}/open-roles-history`

## Request

- Base URL: `https://api.jobopportunitiesapi.org`
- URL: `https://api.jobopportunitiesapi.org/public/companies/{slug}/open-roles-history`
- Auth: none required

Keyless. Reads a snapshot of joa.companies.open_roles (already maintained by
refresh_companies()), taken by joa.snapshot_company_open_history() into
joa.company_open_history — never a job row, never a salary or time-to-fill figure.
Snapshots are daily from 2026-10-06. Before that only two snapshots exist
(2026-09-28 and 2026-10-04), so older windows have gaps; nothing is reconstructed
at present. Each point carries a "method": "snapshot" (a count recorded that day) or
"reconstructed" (a value derived afterwards from the ledger; a reconstructed point never
replaces a snapshot). An unknown slug returns 200 with an empty points array rather
than 404. Edge-cached >=1h.

## Path parameters

- `slug` string, required

## Query parameters

- `days` 30 | 90 | 365

## Response `200`

A daily open-roles trend for the named company.

- object
  - `data` object
    - `beta` boolean
    - `days_requested` integer
    - `history_starts` string, date, nullable
    - `note` string
    - `partial_data` boolean
    - `points` object[]
      - `date` string, date
      - `method` 'snapshot' | 'reconstructed': How the point was obtained.
      - `open_roles` integer
    - `slug` string

## Other responses

- `422`: A parameter we will not guess at: an unknown source_type or provider, an unparseable timestamp, a malformed cursor. Note the deliberate exceptions, which are clamps rather than errors: `limit` is capped at the plan maximum (a non-numeric value falls back to the default), and comma-separated lists are truncated to the per-parameter maximum shown on each. Unknown query parameters are ignored.

---

[API](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api.md) · [All operations](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api/llms.txt) · [OpenAPI document](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api/revisions/b5ef9709a0c9?raw)
