> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openregister.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Company UBOs

## Retrieve the UBOs of a company

Identify the Ultimate Beneficial Owners (UBOs) - the natural persons who ultimately own or control a company. This endpoint calculates beneficial ownership by traversing the complete ownership chain, including indirect ownership through multiple corporate layers.

**Cost:** 25 credits

### What are UBOs?

Ultimate Beneficial Owners are the natural persons who ultimately own or control a company through direct or indirect ownership. According to German law (GwG - Geldwäschegesetz), individuals holding more than 25% of shares or voting rights are typically considered beneficial owners. Our API automatically calculates these percentages by analyzing multi-level ownership structures.

### Supported Legal Forms

UBO analysis is currently available for:

* **GmbH** - Limited liability company
* **gGmbH** - Non-profit limited liability company
* **UG** - Entrepreneurial company (mini-GmbH)
* **KG** - Limited partnership

### Use Cases

**AML/KYC Compliance:** Financial institutions, lawyers, and notaries use UBO data to fulfill anti-money laundering and know-your-customer requirements. Identify who ultimately controls a business relationship.

**Enhanced Due Diligence:** For high-risk transactions, identify the natural persons who ultimately benefit from and control the company, even when ownership is structured through complex corporate arrangements.

**Regulatory Reporting:** Many industries require disclosure of beneficial ownership. Use this endpoint to automatically identify reportable UBOs for regulatory filings and transparency registers.


## OpenAPI

````yaml GET /v1/company/{company_id}/ubo
openapi: 3.1.0
info:
  title: OpenRegister API
  version: 2.5.0
  description: >
    API for accessing comprehensive company data from official registers.

    This API provides access to company information, shareholder data, financial
    reports, and contact details.
servers:
  - url: https://api.openregister.de
    description: Production
security:
  - BearerAuth: []
paths:
  /v1/company/{company_id}/ubo:
    get:
      tags:
        - v1
      summary: Get company end owners
      operationId: getUBO
      parameters:
        - name: company_id
          in: path
          required: true
          description: |
            Unique company identifier.
            Example: DE-HRB-F1103-267645
          schema:
            type: string
      responses:
        '200':
          description: The end owners of the company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyUBOs'
        '400':
          description: Bad Request - Invalid parameters provided
        '401':
          description: Unauthorized - Authentication required
        '402':
          description: Payment Required - Insufficient credits for this request
        '429':
          description: Too Many Requests - Rate limit exceeded
        '500':
          description: >-
            Internal Server Error - An error occurred while processing the
            request
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import Openregister from 'openregister';

            const client = new Openregister({
              apiKey: process.env['OPENREGISTER_API_KEY'], // This is the default and can be omitted
            });

            const response = await client.company.getUbosV1('company_id');

            console.log(response.company_id);
        - lang: Python
          source: |-
            import os
            from openregister import Openregister

            client = Openregister(
                api_key=os.environ.get("OPENREGISTER_API_KEY"),  # This is the default and can be omitted
            )
            response = client.company.get_ubos_v1(
                "company_id",
            )
            print(response.company_id)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/oregister/openregister-go\"\n\t\"github.com/oregister/openregister-go/option\"\n)\n\nfunc main() {\n\tclient := openregister.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Company.GetUbosV1(context.TODO(), \"company_id\")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.CompanyID)\n}\n"
        - lang: CLI
          source: |-
            openregister company get-ubos-v1 \
              --api-key 'My API Key' \
              --company-id company_id
components:
  schemas:
    CompanyUBOs:
      type: object
      properties:
        company_id:
          type: string
          description: |
            Unique company identifier.
            Example: DE-HRB-F1103-267645
        ubos:
          type: array
          items:
            $ref: '#/components/schemas/CompanyUBOItem'
      required:
        - company_id
        - ubos
    CompanyUBOItem:
      type: object
      properties:
        id:
          description: |
            Unique identifier for the shareholder.
            For individuals: UUID
            For companies: Format matches company_id pattern
            Example: "DE-HRB-F1103-267645" or UUID
            May be null for certain shareholders.
          type: string
          nullable: true
        name:
          description: The name of the shareholder. E.g. "Max Mustermann"
          type: string
        natural_person:
          $ref: '#/components/schemas/CompanyOwnerNaturalPerson'
        legal_person:
          $ref: '#/components/schemas/CompanyOwnerLegalPerson'
        percentage_share:
          description: >
            Percentage of company ownership.

            Example: 5.36 represents 5.36% ownership

            Is null for all owners that hold a stake as or through a personal
            liable directors or limited partner.
          type: number
          format: double
          nullable: true
        max_percentage_share:
          description: >
            Maximum percentage of company ownership.

            Example: 5.36 represents maximum of 5.36% ownership

            There is no exact percentage share for owners that hold a stake as
            or through a limited partner.

            For these owners, we can only show the maximum percentage share they
            could have based on their deposit as a limited partner.

            Is null for all owners that have an exact percentage share or owners
            that hold a stake as or through a personal liable director.
          type: number
          format: double
          nullable: true
      required:
        - id
        - name
        - natural_person
        - legal_person
        - country
        - percentage_share
        - max_percentage_share
    CompanyOwnerNaturalPerson:
      type: object
      nullable: true
      properties:
        full_name:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        date_of_birth:
          type: string
          nullable: true
        city:
          type: string
        country:
          type: string
      required:
        - full_name
        - first_name
        - last_name
        - date_of_birth
        - city
        - country
    CompanyOwnerLegalPerson:
      type: object
      nullable: true
      properties:
        name:
          type: string
        city:
          type: string
          nullable: true
        country:
          description: |
            Country where the owner is located, in ISO 3166-1 alpha-2 format.
            Example: "DE" for Germany
          type: string
      required:
        - name
        - city
        - country
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: |
        API Key Authentication
        Provide your API key as a Bearer token in the Authorization header.

````