Overview
Every company in every registry has some notion of status. But registries express it very differently:
- Germany’s Handelsregister records dozens of granular event codes
- Belgium’s KBO has 36 juridical situation codes across 6 categories
- Cyprus simply says “Active” or “Dissolved”
Topograph normalises all of these into a three-layer model so you can write one piece of logic that works across all supported countries.
"status": {
"localName": "Ouverture de faillite",
"active": false,
"statusDetails": {
"status": "UNDER_INSOLVENCY_PROCEEDING",
"closureReason": "BANKRUPTCY",
"insolvencyStartDate": "2024-03-15"
}
}
The Three Layers
Layer 1 — active (boolean)
The simplest signal. true means the company is legally operating; false means it is not. This is derived deterministically from the registry and is always present.
Use this for quick filtering: “show me only active companies”.
Layer 2 — localName (string)
The raw status label from the source registry, in its original language. Examples:
| Country | Example localName |
|---|
| Belgium | Ouverture de faillite |
| Germany | Konkurs |
| Sweden | Likvidation |
| France | En liquidation judiciaire |
| Poland | W upadłości |
This is useful when you need to display the exact registry wording to your users.
Layer 3 — statusDetails (object)
The standardised, cross-country representation. Always use this layer for logic that needs to work across countries.
| Field | Type | Description |
|---|
status | CompanyStatus | Standardised status enum (see below) |
closureReason | CompanyClosureReason | Why the company closed, when applicable |
closureDate | string (ISO date) | When the company was formally closed |
insolvencyStartDate | string (ISO date) | When insolvency proceedings started |
additionalInfo | string | Free-text context from the registry |
statusDetails is populated for all countries where the registry provides
sufficient data. For countries with very limited registry data (e.g. some
offshore jurisdictions), only active and localName may be present.
CompanyStatus Values
ACTIVE
The company is registered and operating. No special proceedings are in effect.
"statusDetails": {
"status": "ACTIVE"
}
UNDER_INSOLVENCY_PROCEEDING
An insolvency or restructuring proceeding has been opened but not yet concluded. The company still legally exists — it has not yet been struck off the register. This covers:
- Bankruptcy proceedings opened (company is technically still alive while the liquidator works)
- Judicial reorganisation / restructuring (court-supervised debt restructuring)
- Payment suspension proceedings
The key distinction from CLOSED: the company has not yet been deregistered. It still appears on the register, but its legal situation is exceptional.
"statusDetails": {
"status": "UNDER_INSOLVENCY_PROCEEDING",
"closureReason": "BANKRUPTCY",
"insolvencyStartDate": "2024-03-15"
}
Use insolvencyStartDate to assess how long the proceeding has been ongoing.
Proceedings that have been open for several years without closure may indicate
a complex or contested case.
CLOSED
The company has been deregistered from the registry. It no longer exists as a legal entity. Use closureReason and closureDate to understand how and when it ended.
"statusDetails": {
"status": "CLOSED",
"closureReason": "VOLUNTARY_DISSOLUTION",
"closureDate": "2023-11-01"
}
UNKNOWN
The registry provides a status that cannot be mapped to any of the above (e.g. a cancelled registration file, data quality issues). Treat with caution.
CompanyClosureReason Values
Only present when status is CLOSED or UNDER_INSOLVENCY_PROCEEDING.
| Value | When used |
|---|
BANKRUPTCY | Company went bankrupt. Covers both open proceedings and concluded cases. |
LIQUIDATION | Liquidation process completed and company was struck off. |
VOLUNTARY_DISSOLUTION | Shareholders or owners chose to wind down the company voluntarily. |
ADMINISTRATIVE_DISSOLUTION | Registry or authorities dissolved the company (e.g. failure to file, struck off by law). |
COURT_ORDER | A court ordered the dissolution (e.g. judicial dissolution for nullity, illegal activity). |
MERGER | Company was absorbed into or merged with another entity. The surviving entity continues. |
SPLIT | Company divided into two or more entities. The original company ceases to exist; new entities carry on. |
ACQUISITION | Company was acquired and deregistered as a separate entity. |
OTHER | Registry confirmed the company is closed but the reason doesn’t fit any above category. |
UNKNOWN | Company is closed but the reason is not available or cannot be mapped. |
Merger vs Split
These two are often confused:
| MERGER | SPLIT |
|---|
| Direction | Many → One | One → Many |
| What happens | Two or more companies combine | One company divides into two or more |
| Original company | Ceases to exist (absorbed) | Ceases to exist (divided) |
| Result | One surviving entity | Two or more new or existing entities |
Example:
- Merger: Company A + Company B → Company C (A and B are
CLOSED + MERGER)
- Split: Company A → Company B + Company C (A is
CLOSED + SPLIT, B and C are new)
Example API Responses
Active company (normal)
"status": {
"localName": "Aktiv",
"active": true,
"statusDetails": {
"status": "ACTIVE"
}
}
Active company under judicial reorganisation (Belgium)
The company is legally still active — no deregistration — but a restructuring proceeding is open.
"status": {
"localName": "Sursis (réorganisation)",
"active": true,
"statusDetails": {
"status": "UNDER_INSOLVENCY_PROCEEDING",
"insolvencyStartDate": "2024-06-01"
}
}
Bankrupt company with ongoing proceedings
"status": {
"localName": "Ouverture de faillite",
"active": false,
"statusDetails": {
"status": "UNDER_INSOLVENCY_PROCEEDING",
"closureReason": "BANKRUPTCY",
"insolvencyStartDate": "2023-11-15"
}
}
Company closed by voluntary dissolution
"status": {
"localName": "Dissolution anticipée",
"active": false,
"statusDetails": {
"status": "CLOSED",
"closureReason": "VOLUNTARY_DISSOLUTION",
"closureDate": "2022-04-30"
}
}
Company closed after merger
"status": {
"localName": "Fusion par absorption",
"active": false,
"statusDetails": {
"status": "CLOSED",
"closureReason": "MERGER",
"closureDate": "2021-09-01"
}
}
Company split into two entities
"status": {
"localName": "Scission",
"active": false,
"statusDetails": {
"status": "CLOSED",
"closureReason": "SPLIT",
"closureDate": "2023-07-15"
}
}
Recommended Patterns
Filter for companies you can still do business with
const isOperational = company.status.active === true;
Detect companies in financial distress
const inDistress =
company.status.statusDetails?.status === 'UNDER_INSOLVENCY_PROCEEDING';
Understand why a company closed
const { status, closureReason, closureDate } =
company.status.statusDetails ?? {};
if (status === 'CLOSED') {
switch (closureReason) {
case 'BANKRUPTCY':
// Flag for credit risk review
break;
case 'MERGER':
case 'SPLIT':
// Look up the successor entity
break;
case 'VOLUNTARY_DISSOLUTION':
// Owner choice — low risk signal
break;
}
}
Show status in a UI component
function statusBadge(company) {
const { active, statusDetails, localName } = company.status;
if (statusDetails?.status === 'UNDER_INSOLVENCY_PROCEEDING') {
return { label: 'Insolvent', color: 'orange' };
}
if (!active) {
return { label: localName, color: 'red' };
}
return { label: 'Active', color: 'green' };
}
Migration from statusDetailsBeta
As of Week 9, 2026, statusDetailsBeta has been renamed to statusDetails. The field name is the only change — all values, types, and semantics are identical.
- company.status.statusDetailsBeta?.status
+ company.status.statusDetails?.status