# Changelog: September 2026

Changes to the API and to this documentation published in September 2026, newest first.

## 2026-09-17 — 1.0.0, the first production release

The document-recognition API, at version 1.

**Recognition.** `POST /v1/scans` takes one image as base64 and returns the
extracted data in the same response. The call is synchronous: no job to poll,
no callback to register. Passports, identity cards, travel documents and
driving licences are read off the printed page, the machine-readable zone and a
barcode where one is printed.

**One response shape.** Eight groups — `meta`, `document`, `holder`, `fields`,
`mrz`, `images`, `quality` and `authenticity` — described key by key on
[the response](/reference/response). Every key is present; an absent value is
`null` and an absent collection is empty. `meta.schema_version` is `"1.0"`.

**Fields in every script.** Every field the engine reads is re-keyed to a
stable vocabulary and published once per language, resolved from 418 assigned
language identifiers. A document printed in two scripts carries both spellings,
neither chosen for you.

**The machine-readable zone, verbatim.** `mrz` is a verdict with the zone
beside it: the lines exactly as read, and one unbroken `text` a check-digit
routine takes unchanged.

**Result images.** Seven crops, each capped by height — 250 px for the document
crop, 100 px for the rest — returned by the call that produced them and never
stored.

**Billing.** One credit is one US cent, charged only for a recognition that
produced data. A credit is reserved before the engine runs and settled after.
`GET /v1/usage` reports the balance and the period's counters.

**Retention is the caller's choice.** `retain_hours` decides how long a result
stays readable through `GET /v1/scans/{id}`; `0` writes nothing down at all.

**Safe retries.** An `Idempotency-Key` on a scan request returns the first
result instead of running and charging again.

**Errors.** One error shape everywhere, 21 stable codes, each with a page of
its own at `/errors/<code>` that every error body links to.

**Three ways in.** The public sandbox key `sk_sandbox_public` recognizes real
documents without an account; a registered account's own sandbox key answers
from a fixed specimen; a live key bills.
