registercheckby openlaw group
API referenceCompanies

Compute beneficial owners from register filings

GET
/companies/{company_id}/beneficial-owners

Who the filed shareholder lists and register entries compute as a beneficial owner of this company. Only a natural person can qualify. Each one carries the paths that were multiplied and the percentage along each path.

capital_over_25 and gwg_above_25 are the same GwG test: the summed capital is more than 25%. amlr_25_or_more and amlr_at_least_25 are the AMLR test: the summed capital is 25% or more. Exactly 25% meets the AMLR test and not the GwG capital test. control_chain: the person holds more than half of a company, stakes of several controlled companies in one company are added, and the person's own stake in this company counts with those stakes. The total is more than 25%. A majority is more than half, not half. Votes are not on a shareholder list, so every answer includes voting_rights_unknown; that reason alone does not make status partial.

Two holdings are one person when exactly one person record is linked (matched_by person_id), or, failing that, when both give the same full name and the same birth date (matched_by name_birth_date). Otherwise the holding stays on its own (matched_by unidentified). Direct and indirect stakes combine only in the first two cases. unresolved includes unlinked_person when an unidentified person's largest possible stake is still at least 25% of the capital, or their control stake is 25% or more, or when that person has the same name as an identified holder and the two stakes together could reach that line. Those rows are not combined into one owner. A smaller unidentified stake, which could not reach the line even together with such a holder, does not make status partial.

The walk follows linked companies for five levels and stops at 250 nodes. status is complete when nothing else is unresolved and at least one person qualifies, none_found when the look is complete and nobody qualifies, and partial when a percentage is missing, a holder was withheld, an unidentified person could still reach 25%, a holder is abroad or not linked, the company is an AG, SE or KGaA or has no list, a partnership's terms are not on the list, or the walk hit a depth limit, the node cap, a cycle or a company that holds itself. unresolved names those reasons.

fictitious_rule_applies follows the GwG test only: it is true when the look is complete and nobody has capital_over_25 or control_chain, including when the only qualification is the AMLR test. It is false whenever the look is partial, so a withheld person cannot be read as nobody. The managing directors are not copied into beneficial_owners; they stay on GET /companies/{company_id}/roles.

A person with a Sperrung is left out, the same way as on the shareholder list, and unresolved includes withheld_person. When that check cannot be made, or a reached company cannot be read, the answer is a failure and nothing is charged.

notice is always: computed from register filings (shareholder lists and register entries); may be incomplete. Not an extract from the Transparenzregister, not the beneficial owners reported under §§ 19–20 GwG, and no substitute for an obliged entity's own due diligence.

Costs 25 credits.

Authorization

bearerAuth
AuthorizationBearer <token>

Your API key, sent as Authorization: Bearer rc_live_….

In: header

Path Parameters

company_id*string

The company's id (cmp_…). The raw UUID /v1 published before is still read until 2026-12-31, and such a request is answered with Deprecation and Sunset. An id of another kind, or anything else, answers 400 validation_failed naming company_id.

Match^cmp_[0-7][0-9a-hjkmnp-tv-z]{25}$

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://api.registercheck.de/v1/companies/cmp_01hxn3rys1fh58w4d1pb1x9s81/beneficial-owners" \  -H "Authorization: Bearer $REGISTERCHECK_API_KEY"
{  "object": "beneficial_owner_analysis",  "company": {    "object": "company",    "id": "cmp_1z3gn9wpvx9j59w8bd9w5rm72n",    "name": "Beispiel Analytics GmbH"  },  "as_of": "2026-10-09T08:00:00Z",  "method": "register_filings",  "status": "complete",  "beneficial_owners": [    {      "person": {        "object": "person",        "id": "per_00000000000000000000000000",        "name": "Ada Beispiel"      },      "matched_by": "person_id",      "percentage": 18,      "gwg_above_25": false,      "amlr_at_least_25": false,      "basis": [        "control_chain"      ],      "paths": [        {          "shareholding_ids": [            "shr_1w9nf6yymb9jerw3sa7d65tvkz",            "shr_60zzq0048h88h86ct4ank7f24s"          ],          "percentage": 18        }      ]    }  ],  "unresolved": [    "voting_rights_unknown"  ],  "fictitious_rule_applies": false,  "notice": "Computed from register filings (shareholder lists and register entries); may be incomplete. Not an extract from the Transparenzregister, not the beneficial owners reported under §§ 19–20 GwG, and no substitute for an obliged entity's own due diligence."}