Glossary

Every term below is used with one meaning across this documentation, the API and the dashboard. Where a word is commonly used loosely, the entry says what it is not.

The call and its result

Scan. One call to POST /v1/scans and the result it returns. Not a job, not a transaction, not a document check. A scan is one image; a two-sided card is two scans.

Result. The body a scan returns: eight groups, described key by key on the response. One shape, whatever the outcome.

Reading. One source's value for one field — the machine-readable zone's spelling of a surname, or the printed page's. A document printed in two scripts produces two readings of the same field, and they may differ.

Field. One entry of fields. Not an attribute, not a property, not a key. Every field carries a name, a label, a category, a value, a language and a confidence band; the whole catalogue is on the field catalogue.

Status. meta.status, one of recognized, no_document_found, unreadable, unsupported_document and rejected. A judgement of how far recognition got, never of whether the document itself is genuine.

Recognized. The meta.status value meaning the document type was determined and data came out of it. Not a synonym for successful, valid, verified or accepted, and not a synonym for billed.

Confidence band. high, medium or low. The engine's probability expressed as one of three words, cut at 90 and 60 out of 100. Never a number in the response.

Verdict. A single conclusion drawn from several checks — mrz.status and quality.overall are the two. A verdict names what failed where it can.

The document

MRZ. The machine-readable zone: the block of upper-case letters, digits and < fillers a travel document prints for a machine to read. The formats and the check digits are on the MRZ reference.

Visual zone. The printed face of the document, as a person reads it. The same facts a travel document also encodes in its MRZ.

Check digit. A digit the zone carries over one of the fields it protects, computed by ICAO 9303's arithmetic. Its outcome reaches a caller as part of mrz.status, not as a digit of its own.

TD1, TD2, TD3. The three machine-readable-zone layouts: three lines of 30, two of 36, and two of 44. A passport booklet is TD3; an identity card is usually TD1.

Crop. One of the seven pictures a recognition cuts out of the uploaded image. Capped by height, re-encoded without its metadata, and never stored.

Specimen. An invented document used in an example or a fixture. Every example in this documentation uses one invented holder. The word SPECIMEN printed across a sheet says that the sheet is not a document.

Money

Credit. The unit of the balance. One credit is one US cent, and one recognized document draws one. Not a token, a unit or a point.

Billed. Whether a scan drew a credit. meta.billed is the answer, and it is a separate question from recognized. A scan can be billed without being recognized; the rule that decides is on what a billed scan is.

Balance. The credits an account holds. It is also the number of documents left, because one document is one credit. It never goes negative.

Reservation. A credit held before the engine is called and settled after. A scan that never reached the engine releases it, so nothing is charged.

Top-up. Adding credits to a balance. A crypto top-up quotes an amount at a price that is locked for the life of the quote.

Keys and identity

Live key. sk_live_…. A key that bills. Not a production key, a real key or a secret key.

Sandbox key. An account's own sk_sandbox_… key. Never billed, and answered from a fixed synthetic specimen so a client can build against a stable result. Not a test key or a dev key.

Public sandbox key. sk_sandbox_public, the one printed in every example. No account, never billed, and it runs real recognition on the image it is sent. A lifetime free allowance and a rate limit per address bound it. Not a demo key, a trial key or an anonymous key.

Session. How the dashboard identifies a person, as against how an API key identifies an integration. The two surfaces are kept apart on purpose.

Account. What owns a balance, a set of keys, a history and a retention setting.

Time and storage

Retention window. The hours a result stays readable through GET /v1/scans/{id}. Set per request with retain_hours, or by the account's own setting when the request names none. Not a TTL, a storage period or an expiry.

Zero retention. retain_hours: 0. No history row is written at all, so nothing exists that a later read could find — as against a row that expires immediately.

Thumbnail. A picture of at most 96 px that a retained scan keeps, readable in the dashboard rather than through this API. It is made from the uploaded bytes, not from a crop.

Idempotency key. The Idempotency-Key header that makes a retried scan return the first result instead of running and charging again. The rules are on idempotency.

The interface

The dashboard. The web application at doc.cheap where a person signs in. Not the cabinet, the portal, the console or the panel.

Error code. The stable string in error.code. Twenty-one exist, and branching on the code is what an integration does; the HTTP status groups them.

request_id. req_ and a UUID, on every error body. It identifies that one request in the service's logs. Opaque.

event_id. Present only when the service recorded the failure as something to look at. null on every error a caller is meant to handle. Opaque.

reference. The caller's own correlation string, up to 128 characters, echoed back on the result and on every history row. The service never reads it.

Engine. The recognition engine behind the API. It is always "the Engine" here — never a vendor's name, a library or a model.