---
title: "Per-dataset availability and freshness"
method: GET
path: "/api/v1/freshness/datasets"
tags: ["Coverage"]
---

# Per-dataset availability and freshness

`GET /api/v1/freshness/datasets`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/freshness/datasets`
- Auth: HTTP bearer

## Response `200`

Datasets.

- object
  - `contract_version` number, required
  - `generated_at` string, required
  - `status` string, required
  - `datasets` object[], required
    - `dataset` string, nullable, required
    - `availability` string, nullable, required
    - `freshness` string, nullable, required
    - `freshness_reason` string, nullable, required
    - `refresh` object, required
      - `source_watermark` string, nullable, required
      - `source_age_hours` number, nullable, required
      - `evaluated_at` string, nullable, required
      - `published_at` string, nullable, required
      - `status` string, nullable, required
      - `warning_reason` string, nullable, required
    - `record_activity` object, required
      - `latest_at` string, nullable, required
      - `evaluated_at` string, nullable, required
      - `basis` string, nullable, required
      - `age_hours` number, nullable, required
      - `max_age_hours` number, nullable, required
      - `status` string, nullable, required
      - `future_date_guard` object: Present only when the freshness probe's observed max record date lies in the future (beyond the skew limit) — e.g. a two-digit-year parse artifact. The raw value is kept here; `latest_at` then carries the newest non-future record date when it could be read at serve time (else null).
        - `rejected_observed_max` string, date-time, required
        - `skew_limit_hours` number, required
        - `latest_at_basis` 'max_non_future_record_date' | 'unavailable', required
        - `future_dated_rows` integer, nullable, required
    - `coverage` object, required
      - `status` string, nullable, required
      - `unit` string, nullable, required
      - `covered` number, nullable, required
      - `as_of` string, nullable, required

## Other responses

- `401`: Missing, malformed or invalid credential.
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.

---

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