---
title: "BETA — partial data. Daily trend of Market Signals segments (salary percentiles, time-to-fill, listing counts) over 30/90/365 days."
method: GET
path: "/public/market-signals/history"
tags: ["public"]
---

# BETA — partial data. Daily trend of Market Signals segments (salary percentiles, time-to-fill, listing counts) over 30/90/365 days.

`GET /public/market-signals/history`

## Request

- Base URL: `https://api.jobopportunitiesapi.org`
- URL: `https://api.jobopportunitiesapi.org/public/market-signals/history`
- Auth: none required

Keyless. Reads a once-a-day snapshot of the same rollup GET /public/market-signals
reads live (joa.market_signal_segments), taken by joa.snapshot_market_signal_history()
(db/193) into joa.market_signal_history. History begins the day the daily snapshot
first ran — there is no backfill — and every response carries "beta": true,
"partial_data": true and "history_starts" so a caller cannot mistake a short series
for a long one. Same restriction as the live endpoint: family/country/seniority only,
no title, no company. Edge-cached >=1h.

## Query parameters

- `family` string
- `country` string
- `seniority` string
- `days` 30 | 90 | 365

## Response `200`

A daily trend for the requested segment, oldest first.

- object
  - `data` object
    - `beta` boolean
    - `days_requested` integer
    - `history_starts` string, date, nullable: Earliest date any snapshot exists, across every segment. Null before the first snapshot has ever run.
    - `note` string
    - `partial_data` boolean
    - `points` object[]
      - `closed` integer
      - `companies` integer
      - `date` string, date
      - `listings` integer
      - `open` integer
      - `state` 'published' | 'suppressed'

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