Foretak.dev · Schema

CompanyReport

Everything `registry-mcp` knows about one registered entity. This is the single most important shape in the project. It is returned verbatim by ``GET /v1/{country}/company/{id}`` and by the MCP tool ``lookup_company``. A registry module fills what its national register publishes and leaves the rest ``None``. Nothing here is Norway-specific; ``registries/no/`` maps Enhetsregisteret's fields onto it (see ``NORBIZ_SPEC.md`` §3).

CompanyRegistryNorwayUnited KingdomSweden

Properties

Name Type Description
country string ISO-3166-1 alpha-2, upper-case, e.g. 'NO'.
registry string Registry slug, e.g. 'brreg'.
id string Canonical national identifier, digits/letters only, no spaces or dots.
id_formatted object The identifier as a local would write it, e.g. '923 609 016'.
id_scheme object Name of the identifier scheme, e.g. 'organisasjonsnummer'.
euid object European Unique Identifier (EUID, Commission Implementing Regulation (EU) 2021/1042 Article 9), where the register publishes one, e.g. Finland's 'FIFPRO.0112038-9'. None for a register that does not (
name string Current registered name.
previous_names array Former registered names, newest first.
legal_form_code object National legal-form code, e.g. 'AS', 'ASA', 'ENK'.
legal_form object English label, e.g. 'Private limited company'.
legal_form_local object Local label, e.g. 'Aksjeselskap'.
limited_liability object True when owners are not personally liable for debts.
has_board_duty object True when this legal form must have a registered board.
has_annual_accounts_duty object True when this legal form must file annual accounts with the state.
status object Normalised lifecycle status.
status_detail object One sentence in English explaining the status and the flag it came from.
is_active boolean Convenience mirror of `status == active`, so agents need no enum table.
registered_at object Date first entered in the central register.
founded_at object Incorporation / foundation date.
business_register_registered_at object Date entered in the commercial/business register, where that is separate.
bankruptcy_date object Date bankruptcy was opened.
deregistered_at object Date the entity was deleted from the register.
vat_registered object Registered for VAT (Norway: Merverdiavgiftsregisteret).
vat_registered_at object Date of VAT registration.
vat_number object VAT identifier if it differs from `id` (Norway: id + 'MVA').
in_business_register object Listed in the commercial register (Norway: Foretaksregisteret).
registers object Other national sub-registers this entity is or is not in, keyed by a lower-case slug, e.g. {'stiftelsesregisteret': false}.
employees object Registered number of employees. None = not reported.
employees_reported object Whether the registry holds an employee figure at all (distinguishes 0 from unknown).
industry_codes array Industry classifications, primary first.
sector_code object Institutional sector code.
sector object Institutional sector description.
purpose object Statutory purpose / objects clause, joined into one string.
activity object Free-text description of actual activity.
share_capital object Registered share capital.
share_capital_currency object ISO-4217 code for `share_capital`.
business_address object Visiting/registered office.
postal_address object Postal address.
website object Website as registered.
email object Contact email as registered.
phone object Contact phone as registered.
advertising_protected object Whether the register marks this entity as protected against direct-marketing use (Danish CVR-loven § 19 'reklamebeskyttelse', Swedish 'reklamspärr'). True: the register marks it. False: the register p
parent_id object Identifier of the parent/owning entity, if any.
is_subunit boolean True when this record is a branch/sub-unit, not a legal entity.
in_group object Part of a corporate group.
last_annual_accounts_year object Most recent financial year for which accounts were filed.
published_deadlines array Filing dates the upstream register publishes for this entity itself, carried verbatim. Empty for a register that publishes none — most of them. This is the input `Registry.deadlines(report, today)` ne
lei object This entity's Legal Entity Identifier record, from GLEIF — not a national register (D-026(c), D-045(e)). `None` unless `lei` was passed in `include=[...]` — and, even then, `None` if that fetch failed
parents object Corporate parents from GLEIF Level 2 — accounting consolidation, not shareholding (see `ParentBlock`'s own docstring). `None` unless `parents` was passed in `include=[...]` — and, even then, `None` if
charges object Registered charges (mortgages / security interests) against this entity. `None` unless `charges` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which atta
filings object What this entity has filed with its register, and when. `None` unless `filings` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which attachment and why).
insolvency object Insolvency proceedings the register publishes against this entity. `None` unless `insolvency` was passed in `include=[...]`, or that fetch failed. A *present* block with `cases: []` means the register
financials object Key figures from this entity's filed annual accounts. `None` unless `financials` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which attachment and why).
peppol object Whether this entity can be reached over the Peppol e-invoicing network. `None` unless `peppol` was passed in `include=[...]` — and, even then, `None` only if the attachment could not be built at all (
confidence number How sure we are this record is the entity the caller meant (D-005).
confidence_basis object Why that confidence, e.g. 'exact identifier lookup'.
cached boolean True when served from our cache rather than a live fetch.
fetched_at object UTC timestamp of the live fetch this record came from.
source object Human-readable source name, e.g. 'Enhetsregisteret (brreg.no)'.
source_url object Direct URL of the upstream record, for citation.
license object Licence of the upstream data, e.g. 'NLOD 2.0'.
notes array Caveats an agent should surface to the user, plain English, one per item.
View JSON Schema on GitHub

JSON Schema

foretak-dev-company-report-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/foretak-dev/json-schema/foretak-dev-company-report-schema.json",
  "title": "CompanyReport",
  "description": "Everything `registry-mcp` knows about one registered entity.\n\nThis is the single most important shape in the project. It is returned\nverbatim by ``GET /v1/{country}/company/{id}`` and by the MCP tool\n``lookup_company``.\n\nA registry module fills what its national register publishes and leaves the\nrest ``None``. Nothing here is Norway-specific; ``registries/no/`` maps\nEnhetsregisteret's fields onto it (see ``NORBIZ_SPEC.md`` §3).",
  "x-generated": "2026-11-08",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/foretak-dev-openapi.yml#/components/schemas/CompanyReport",
  "properties": {
    "country": {
      "type": "string",
      "title": "Country",
      "description": "ISO-3166-1 alpha-2, upper-case, e.g. 'NO'."
    },
    "registry": {
      "type": "string",
      "title": "Registry",
      "description": "Registry slug, e.g. 'brreg'."
    },
    "id": {
      "type": "string",
      "title": "Id",
      "description": "Canonical national identifier, digits/letters only, no spaces or dots."
    },
    "id_formatted": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Id Formatted",
      "description": "The identifier as a local would write it, e.g. '923 609 016'."
    },
    "id_scheme": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Id Scheme",
      "description": "Name of the identifier scheme, e.g. 'organisasjonsnummer'."
    },
    "euid": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Euid",
      "description": "European Unique Identifier (EUID, Commission Implementing Regulation (EU) 2021/1042 Article 9), where the register publishes one, e.g. Finland's 'FIFPRO.0112038-9'. None for a register that does not (today: all of ours). Three traps: (1) this is not the LEI — the EUID is register-issued, mandatory in the EU and free, the LEI is voluntary, global, LOU-issued and fee-bearing; an entity may carry both, one or neither. (2) 'EUid' also names the EU Digital Identity wallet, a personal credential unrelated to company registers. (3) it is not stable across a register reorganisation, since it encodes the register of origin (e.g. France's RNE replacing the RCS in 2023). Carried verbatim from the register; never constructed from parts."
    },
    "name": {
      "type": "string",
      "title": "Name",
      "description": "Current registered name."
    },
    "previous_names": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Previous Names",
      "description": "Former registered names, newest first."
    },
    "legal_form_code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Legal Form Code",
      "description": "National legal-form code, e.g. 'AS', 'ASA', 'ENK'."
    },
    "legal_form": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Legal Form",
      "description": "English label, e.g. 'Private limited company'."
    },
    "legal_form_local": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Legal Form Local",
      "description": "Local label, e.g. 'Aksjeselskap'."
    },
    "limited_liability": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Limited Liability",
      "description": "True when owners are not personally liable for debts."
    },
    "has_board_duty": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Has Board Duty",
      "description": "True when this legal form must have a registered board."
    },
    "has_annual_accounts_duty": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Has Annual Accounts Duty",
      "description": "True when this legal form must file annual accounts with the state."
    },
    "status": {
      "$ref": "#/$defs/CompanyStatus",
      "description": "Normalised lifecycle status.",
      "default": "unknown"
    },
    "status_detail": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Status Detail",
      "description": "One sentence in English explaining the status and the flag it came from."
    },
    "is_active": {
      "type": "boolean",
      "title": "Is Active",
      "description": "Convenience mirror of `status == active`, so agents need no enum table.",
      "default": false
    },
    "registered_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Registered At",
      "description": "Date first entered in the central register."
    },
    "founded_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Founded At",
      "description": "Incorporation / foundation date."
    },
    "business_register_registered_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Business Register Registered At",
      "description": "Date entered in the commercial/business register, where that is separate."
    },
    "bankruptcy_date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Bankruptcy Date",
      "description": "Date bankruptcy was opened."
    },
    "deregistered_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Deregistered At",
      "description": "Date the entity was deleted from the register."
    },
    "vat_registered": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vat Registered",
      "description": "Registered for VAT (Norway: Merverdiavgiftsregisteret)."
    },
    "vat_registered_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vat Registered At",
      "description": "Date of VAT registration."
    },
    "vat_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vat Number",
      "description": "VAT identifier if it differs from `id` (Norway: id + 'MVA')."
    },
    "in_business_register": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "In Business Register",
      "description": "Listed in the commercial register (Norway: Foretaksregisteret)."
    },
    "registers": {
      "additionalProperties": {
        "type": "boolean"
      },
      "type": "object",
      "title": "Registers",
      "description": "Other national sub-registers this entity is or is not in, keyed by a lower-case slug, e.g. {'stiftelsesregisteret': false}."
    },
    "employees": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0.0
        },
        {
          "type": "null"
        }
      ],
      "title": "Employees",
      "description": "Registered number of employees. None = not reported."
    },
    "employees_reported": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Employees Reported",
      "description": "Whether the registry holds an employee figure at all (distinguishes 0 from unknown)."
    },
    "industry_codes": {
      "items": {
        "$ref": "#/$defs/IndustryCode"
      },
      "type": "array",
      "title": "Industry Codes",
      "description": "Industry classifications, primary first."
    },
    "sector_code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sector Code",
      "description": "Institutional sector code."
    },
    "sector": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sector",
      "description": "Institutional sector description."
    },
    "purpose": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Purpose",
      "description": "Statutory purpose / objects clause, joined into one string."
    },
    "activity": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Activity",
      "description": "Free-text description of actual activity."
    },
    "share_capital": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Share Capital",
      "description": "Registered share capital."
    },
    "share_capital_currency": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Share Capital Currency",
      "description": "ISO-4217 code for `share_capital`."
    },
    "business_address": {
      "anyOf": [
        {
          "$ref": "#/$defs/Address"
        },
        {
          "type": "null"
        }
      ],
      "description": "Visiting/registered office."
    },
    "postal_address": {
      "anyOf": [
        {
          "$ref": "#/$defs/Address"
        },
        {
          "type": "null"
        }
      ],
      "description": "Postal address."
    },
    "website": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Website",
      "description": "Website as registered."
    },
    "email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Email",
      "description": "Contact email as registered."
    },
    "phone": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Phone",
      "description": "Contact phone as registered."
    },
    "advertising_protected": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Advertising Protected",
      "description": "Whether the register marks this entity as protected against direct-marketing use (Danish CVR-loven § 19 'reklamebeskyttelse', Swedish 'reklamspärr'). True: the register marks it. False: the register publishes such a flag for this entity and it is not set. None: this register publishes no such flag at all — the default, and it must never default to False, since False asserts a claim about a register that made none. When True, a country module must also append a `notes` entry containing the phrase 'direct marketing' (case-insensitive) stating the protection — that phrase is the contract this model enforces (see the validator below) — because the marking is a legal condition of passing this record's contact details on, and it must travel with them."
    },
    "parent_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Parent Id",
      "description": "Identifier of the parent/owning entity, if any."
    },
    "is_subunit": {
      "type": "boolean",
      "title": "Is Subunit",
      "description": "True when this record is a branch/sub-unit, not a legal entity.",
      "default": false
    },
    "in_group": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "In Group",
      "description": "Part of a corporate group."
    },
    "last_annual_accounts_year": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Annual Accounts Year",
      "description": "Most recent financial year for which accounts were filed."
    },
    "published_deadlines": {
      "items": {
        "$ref": "#/$defs/PublishedDeadline"
      },
      "type": "array",
      "title": "Published Deadlines",
      "description": "Filing dates the upstream register publishes for this entity itself, carried verbatim. Empty for a register that publishes none — most of them. This is the input `Registry.deadlines(report, today)` needs to prefer the register's own figure over any calculation (DECISIONS.md D-018), and it is what keeps that method the pure function of (report, today) its contract promises."
    },
    "lei": {
      "anyOf": [
        {
          "$ref": "#/$defs/LeiRecord"
        },
        {
          "type": "null"
        }
      ],
      "description": "This entity's Legal Entity Identifier record, from GLEIF — not a national register (D-026(c), D-045(e)). `None` unless `lei` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for why). A country that declares this attachment (`CountryInfo.supported_includes`) returns a *present* block even for an entity GLEIF holds no LEI for: `LeiRecord.lei` is `None` inside it, which is a real answer, never the same as this field being absent (D-011). Declared by default by every country whose identifiers cannot be a natural person's (`Registry.universal_includes`) — Sweden does not declare it, because GLEIF is a third-party host queried by identifier in a URL query string."
    },
    "parents": {
      "anyOf": [
        {
          "$ref": "#/$defs/ParentBlock"
        },
        {
          "type": "null"
        }
      ],
      "description": "Corporate parents from GLEIF Level 2 — accounting consolidation, not shareholding (see `ParentBlock`'s own docstring). `None` unless `parents` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for why). A country that declares this attachment returns a *present* block even for an entity GLEIF holds no LEI for at all, with `direct` and `ultimate` both `None`: GLEIF cannot hold Level 2 for an entity it has no Level 1 for, and that is the answer, not an absence (D-011). Declared by default by every country whose identifiers cannot be a natural person's (`Registry.universal_includes`, alongside `lei`) — Sweden does not declare it, for the same reason it does not declare `lei`."
    },
    "charges": {
      "anyOf": [
        {
          "$ref": "#/$defs/ChargeBlock"
        },
        {
          "type": "null"
        }
      ],
      "description": "Registered charges (mortgages / security interests) against this entity. `None` unless `charges` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which attachment and why). A country that declares this attachment (`CountryInfo.supported_includes`) returns a *present* block with an empty `charges` list for an entity that genuinely has none — the two states never collapse into each other (D-011, D-042(d))."
    },
    "filings": {
      "anyOf": [
        {
          "$ref": "#/$defs/FilingHistory"
        },
        {
          "type": "null"
        }
      ],
      "description": "What this entity has filed with its register, and when. `None` unless `filings` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which attachment and why). Scope differs by country because each register publishes a different subset, and the block's own `notes` says which: Companies House the whole filing history, Bolagsverket the filed annual reports, Regnskapsregisteret the filed annual accounts. A *present* block with `documents: []` means the register lists none — never the same as absent (D-011, D-042(d))."
    },
    "insolvency": {
      "anyOf": [
        {
          "$ref": "#/$defs/InsolvencyBlock"
        },
        {
          "type": "null"
        }
      ],
      "description": "Insolvency proceedings the register publishes against this entity. `None` unless `insolvency` was passed in `include=[...]`, or that fetch failed. A *present* block with `cases: []` means the register publishes no case, which for Companies House is the normal answer for a solvent company — and is not evidence the entity exists, since that register answers the same way for a number never issued. Read `InsolvencyCase.is_liquidation` with its own caveat: a members' voluntary liquidation is a solvent wind-up."
    },
    "financials": {
      "anyOf": [
        {
          "$ref": "#/$defs/FinancialSummary"
        },
        {
          "type": "null"
        }
      ],
      "description": "Key figures from this entity's filed annual accounts. `None` unless `financials` was passed in `include=[...]` — and, even then, `None` if that fetch failed (see `notes` for which attachment and why). Norway returns a *present* block with `periods: []` for an entity Regnskapsregisteret holds no filed accounts for. Sweden instead returns *no block at all*, plus a report-level `notes` sentence naming the reason, because Bolagsverket's digital annual-report channel holds nothing for that entity — a fact about the company, not about the country (D-042(d)(3), `tasks/T55.md`). Norway and Sweden today: Norway's arrive in the register's own open key-figures feed, Sweden's are read out of the entity's own filed annual report. Britain does not declare this attachment because the accounts of the companies that matter are filed on paper or as PDF ahead of the 1 April 2028 machine-readable mandate — a fact about the register's own population, not a parser this project has declined to write (D-043(i), D-047(f))."
    },
    "peppol": {
      "anyOf": [
        {
          "$ref": "#/$defs/PeppolParticipant"
        },
        {
          "type": "null"
        }
      ],
      "description": "Whether this entity can be reached over the Peppol e-invoicing network. `None` unless `peppol` was passed in `include=[...]` — and, even then, `None` only if the attachment could not be built at all (see `notes` for why). A country that declares this attachment returns a **present** block even when the network could not be reached: `PeppolParticipant.registered` carries the three-state answer (`true`/`false`/`null`) and `PeppolParticipant.participant_id` is always populated, because that is the key a caller needs to ask elsewhere regardless (D-011, D-029(c)). Norway only, today (D-046(h)): the participant identifier needs a country's own ISO 6523 ICD and the answer's provenance is a different SMP per participant, neither of which generalises to `Registry.universal_includes` yet."
    },
    "confidence": {
      "type": "number",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Confidence",
      "description": "How sure we are this record is the entity the caller meant (D-005).",
      "default": 1.0
    },
    "confidence_basis": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Confidence Basis",
      "description": "Why that confidence, e.g. 'exact identifier lookup'."
    },
    "cached": {
      "type": "boolean",
      "title": "Cached",
      "description": "True when served from our cache rather than a live fetch.",
      "default": false
    },
    "fetched_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Fetched At",
      "description": "UTC timestamp of the live fetch this record came from."
    },
    "source": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Source",
      "description": "Human-readable source name, e.g. 'Enhetsregisteret (brreg.no)'."
    },
    "source_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Source Url",
      "description": "Direct URL of the upstream record, for citation."
    },
    "license": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "License",
      "description": "Licence of the upstream data, e.g. 'NLOD 2.0'."
    },
    "notes": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Notes",
      "description": "Caveats an agent should surface to the user, plain English, one per item."
    }
  },
  "additionalProperties": false,
  "type": "object",
  "required": [
    "country",
    "registry",
    "id",
    "name"
  ],
  "$defs": {
    "Address": {
      "properties": {
        "lines": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Lines",
          "description": "Street or PO-box lines exactly as the registry supplies them."
        },
        "postal_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Postal Code",
          "description": "Postal / ZIP code."
        },
        "city": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "City",
          "description": "Post town."
        },
        "municipality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Municipality",
          "description": "Municipality name."
        },
        "municipality_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Municipality Code",
          "description": "National municipality code, if the registry has one."
        },
        "country_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Country Code",
          "description": "ISO-3166-1 alpha-2 country code of the address itself."
        },
        "country_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Country Name",
          "description": "Country name as registered."
        }
      },
      "additionalProperties": false,
      "type": "object",
      "title": "Address",
      "description": "A postal or visiting address, flattened to something an LLM can read.\n\n``lines`` keeps the registry's own street/box lines in order; the rest are\nparsed components where the registry provides them."
    },
    "BalanceSheet": {
      "properties": {
        "fixed_assets": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fixed Assets",
          "description": "Fixed assets at period end (`sumAnleggsmidler`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "current_assets": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Current Assets",
          "description": "Current assets at period end (`sumOmloepsmidler`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "total_assets": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total Assets",
          "description": "Total assets at period end (`sumEiendeler`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f)). One of only three fields present on every one of 573 observed filings. Compare with `total_equity_and_liabilities` (DECISIONS.md D-043(e)): the two disagree on 27 of 358 filings, and this block's own `notes` names the gap when they do; neither figure is edited, reconciled or dropped."
        },
        "paid_in_equity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Paid In Equity",
          "description": "Paid-in equity at period end (`sumInnskuttEgenkaptial` — the register's own spelling, not a typo in this field's description). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "retained_equity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Retained Equity",
          "description": "Retained equity at period end (`sumOpptjentEgenkapital`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "equity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Equity",
          "description": "Total equity at period end (`sumEgenkapital`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "non_current_liabilities": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Non Current Liabilities",
          "description": "Non-current liabilities at period end (`sumLangsiktigGjeld`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "current_liabilities": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Current Liabilities",
          "description": "Current liabilities at period end (`sumKortsiktigGjeld`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f))."
        },
        "liabilities": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Liabilities",
          "description": "Total liabilities at period end (`sumGjeld`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f)). Carried exactly as the register states it, including negative: DECISIONS.md D-043(e) records real filings with a negative `sumGjeld` (e.g. -108,837), which is a filing the register relayed without validating, not a company fact this field corrects."
        },
        "total_equity_and_liabilities": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total Equity And Liabilities",
          "description": "Total equity and liabilities at period end (`sumEgenkapitalGjeld`). `None` means the register did not publish this line for this filing — never zero. The register is inconsistent about when it states an explicit zero for an absent figure versus omitting the line entirely, so this field's absence is not evidence the true value is zero, and a stated zero is not evidence the register omits the line elsewhere (DECISIONS.md D-043(f)). One of only three fields present on every one of 573 observed filings. See `total_assets` for the reconciliation note the two together can trigger."
        }
      },
      "additionalProperties": false,
      "type": "object",
      "title": "BalanceSheet",
      "description": "Stocks at the period's last instant — Regnskapsregisteret's\n``eiendeler`` and ``egenkapitalGjeld``, the other of the two sub-objects on\na :class:`FinancialPeriod` (D-043(c)). See :class:`IncomeStatement` for why\nthe two are separate models rather than one flat one.\n\nEvery field is `None` or a whole-unit figure in :attr:`FinancialPeriod.currency`\n— never both `None` and zero at once, and never inferred from the other\n(D-043(f)). **No field here is a ratio or a verdict** — an equity ratio, a\ncurrent ratio and every similar derived figure are declined by D-043(e): the\nregister's own `total_assets` and `total_equity_and_liabilities` disagree\non 27 of 358 filings (7.5%), so a ratio built from this block would be a\nratio of two numbers the register itself does not vouch for jointly. The\none comparison this project makes is a `notes` sentence, never a

# --- truncated at 32 KB (117 KB total) ---
# Full source: https://artifacts.apis.io/foretak-dev/json-schema/foretak-dev-company-report-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/foretak-dev-company-report"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.