# Validation API v1 Changelog

| Version | Date | Details |
|---------|------|---------|
| 1.2.3 | 23.06.2026 | Timezone-aware PDF report caching, new `timezone` query parameter, improved `legislation` description |
| 1.2.2 | 10.06.2026 | `feature-not-enabled` (`403`) problem type, `403`/`415`/`406` responses, and standardized error response coverage |
| 1.2.1 | 20.05.2026 | Unified Problem+JSON error envelope |
| 1.2.0 | 13.05.2026 | Human-readable validation report as signed PDF |
| 1.1.5 | July 2025 | Official release of Validation API v1 |

---

## 1.2.3 — 23.06.2026

### Reports

- **Timezone-aware PDF report caching** — The signed PDF report (`GET /reports/{id}/skribble`) is now cached per validation ID, language, ETSI attachment flag **and timezone**. A new `timezone` query parameter has been added to control the timezone used when rendering date/time values in the report.

### Parameters

- **Improved `legislation` description** — The `legislation` filter parameter now clearly documents each value: `CH` = Swiss law (ZertES), `EU` = EU law (eIDAS Regulation), `CH_EU` = both ZertES and eIDAS, `WORLD` = no specific jurisdiction.

---

## 1.2.2 — 10.06.2026

### Error handling

- **`feature-not-enabled` problem type** — New Problem+JSON type `…/problem/feature-not-enabled` and a shared `403 Forbidden` response, returned when Validation API access (or another required feature) is not enabled for the business.
- **New shared responses** — Added `403 Forbidden`, `415 Unsupported Media Type`, and `406 Not Acceptable` responses, now referenced across the validation, info, report, and billing endpoints.
- **`502` carries a body** — The upstream seal service error (`502`) on `GET /reports/{id}/skribble` now returns the standard Problem+JSON envelope instead of an empty body.
- **Standardized response coverage** — Endpoints that previously declared inline `4xx`/`5xx` descriptions now reference the shared Problem+JSON response components, so every error response documents a consistent body. Fixed `GET /infos/{id}/format`, whose `400` incorrectly referenced the service-unavailable response; it now references `Bad Request`.

See [Error Handling](/error-handling) for the full envelope schema.

---

## 1.2.1 — 20.05.2026

### Error handling

- **Unified error envelope** — All `4xx` and `5xx` responses now return a Problem+JSON body matching the Sign API: `{ type, method, path, status, message }` (plus an optional `key`). Previously, error responses had an empty body.
- **`type` URIs** — The host depends on the environment and region (e.g. `https://document-validation.skribble.com` for `.com` and `https://document-validation.skribble.de` for `.de` production); match on the path segment after `/problem/` rather than the full URI. Known values: `problem-with-message` (generic error with a message), `entity-not-found` (`404`), `constraint-violation` (request violates a domain constraint), and `limit-exceeded` (a usage limit was exceeded).
- **Spec cleanup** — Removed unused `Locked` (423), `UnsupportedMediaType` (415), and `LoginFailed` shared response objects. `/access/login` now references the shared `Unauthorized` (401) response, which carries the same Problem envelope.

See [Error Handling](/error-handling) for the full envelope schema, supported `type` URIs, and parsing patterns.

---

## 1.2.0 — 13.05.2026

### Reports

- **Human-readable validation report as signed PDF** — Validation results can now be downloaded as a human-readable PDF report, signed with the Skribble seal.
