# The company/v1 record

`GET /v1/schemas/company` serves the JSON Schema (2020-12) of the record;
this page explains it. The OpenAPI document describes every field too.

## Claims and provenance

Every value is a **claim** of one source: the value, the source,
`observed_at` (first seen), `confirmed_at` (last time the source still said
so), `valid_from` / `valid_to`, `confidence` and the raw document
(`document_ref` with `sha256` and `body_url`). Claims are never overwritten:
when a source reports a different value, the old claim is closed
(`valid_to`) and a new one opened. So the record can show what changed and
when (`GET /v1/companies/{id}/history`).

For each field the record shows the resolved value: the claim of the source
with the highest precedence (official register > official gazette > GLEIF >
regulatory filings > crosswalks > commercial sources), then the field's
preferred sources within that class, then the more recent one. The legal
name is stricter: it is the official national register's primary entry in
its official form and language (in Switzerland Zefix, then the UID
register), ties go by source name rather than by time, so refreshing GLEIF
after the register (or the other way round) never changes it. Other sources'
forms are in `names.alternates` (`{name, source}`), language versions in
`names.translations` (with `source`). `provenance` names the claim behind each field and flags `conflict`
when another source currently says something else; `quality.conflicts`
lists those values. `include=claims` returns every current claim; `sources=`
restricts the record to some sources.

## Fields

| Field | Content |
|---|---|
| `id` | `cmp_<ulid>`, stable; merged records redirect (`redirected_from`) |
| `identifiers[]` | `{scheme, value, issuer, status, parts, sources}` in canonical form |
| `names` | `legal`, `previous[]`, `trading[]`, `translations[]` (each `{name, lang, valid_from, valid_to}`; translations also `source`), `alternates[]` (other sources' forms of the legal name: `{name, source}`) |
| `legal_form` | `{local_code, local_name, elf_code, category}`: ISO 20275 code and one of `corporation`, `partnership`, `sole_trader`, `cooperative`, `foundation`, `association`, `public_body`, `branch`, `other` |
| `status` | `{value, local_value, since, reason}`: `active`, `inactive`, `in_liquidation`, `dissolved`, `merged`, `struck_off`, `unknown` |
| `jurisdiction` | `{country, subdivision, register: {authority, court, entity_id}}` |
| `addresses[]` | `{type: registered/business/postal/branch, lines, street, house_number, postal_code, city, municipality_code, region, country, geo}` |
| `dates` | `incorporated`, `registered`, `deregistered`, `fiscal_year_end` |
| `purpose` | Text per language |
| `activities[]` | `{scheme: nace/noga/wz/sic/naics/isic, code, label, primary, nace}` |
| `capital[]` | `{type: nominal/paid_in/authorised, amount, currency, since}` |
| `size` | Employees and revenue, only from official or filing data |
| `people[]` | Officers as the register publishes them: `{name, role, local_role, function, signing_authority, since, until, residence_city, residence_country, nationality, origin, person_id}` (`include=people`) |
| `ownership[]` | `{type: shareholder/direct_parent/ultimate_parent/beneficial_owner, holder, share_pct, since}` (`include=ownership`) |
| `relationships[]` | `{type: subsidiary/branch_of/head_office/merged_into/predecessor/successor/auditor/…, company, since, until}` |
| `filings[]`, `financials[]` | Filed documents and official figures (`include=filings,financials`) |
| `events[]` | Timeline from gazettes and registers (`include=events`) |
| `securities[]`, `web` | Listings; website and domains |
| `sources[]` | Raw documents (newest first) with `licence` and `parser_version` |
| `freshness[]` | Per source and field group: `last_checked`, `last_changed`, `next_refresh_due`, `error` |
| `quality` | `completeness` (share of core fields filled) and `conflicts` |
| `provenance`, `claims` | See above |

Companies referenced in `ownership` and `relationships` carry the
identifiers the source gave; fetch them with `GET /v1/companies/scheme:value`.

## Identifier schemes

Write identifiers as `scheme:value`; spacing, dots and case do not matter,
check digits are verified, and the record shows the canonical form.

| Scheme | Example | Check |
|---|---|---|
| `ch_uid` | `CHE-101.329.561` | eCH-0097 mod 11 |
| `lei` | `BFM8T61CT2L1QCEMIK50` | ISO 17442 (ISO 7064 mod 97-10) |
| `us_cik` | `320193` | leading zeros dropped |
| `uk_crn` | `00445790`, `SC123456` | format |
| `de_register` | `München:HRB:6684` (also `Amtsgericht München HRB 6684`) | court, type (HRA, HRB, GnR, PR, VR, GsR), number |
| `fr_siren`, `fr_siret` | `552100554`, `55210055400013` | Luhn |
| `no_orgnr`, `dk_cvr`, `fi_ytunnus`, `ee_regcode`, `cz_ico` | `923609016`, `24256790`, `0112038-9`, `10137319`, `45274649` | national check digits |
| `pl_krs`, `be_kbo` | `0000028860`, `0403.170.701` | format, mod 97 |
| `au_abn`, `au_acn`, `nz_nzbn` | `51824753556`, `004085616`, `9429040402307` | national check digits, GS1 |
| `jp_corporate_number`, `br_cnpj`, `sg_uen`, `ca_corp` | `7000012050002`, `33000167000101` | national check digits (CNPJ also alphanumeric) |
| `vat` | `DE129273398`, `CHE101329561` | country format; Swiss VAT numbers are UIDs |
| `isin` | `CH0038863350` | ISO 6166 (Luhn over the letters-as-numbers form); the issuer is found through GLEIF's ISIN-to-LEI mapping |
| `ticker`, `wikidata`, `ch_chid`, `ch_ehraid` | `XNAS:AAPL`, `Q312` | format |

## Legal forms and activity codes

Legal forms map to ISO 20275 Entity Legal Form codes (GLEIF's list, every
jurisdiction) with a normalised `category`. Activity codes keep the scheme
the source uses; NOGA 2008 (Switzerland) and WZ 2008 (Germany) codes also
name their NACE Rev. 2 class (`nace`). Labels are in English.
