> ## 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 owners

## Retrieve the owners of a company

Get detailed ownership information including shareholders, their ownership percentages, and share capital. This endpoint provides structured ownership data extracted from official register documents including shareholder lists (Gesellschafterlisten) and company registers.

**Cost:** 10 credits (20 credits with `realtime=true`)

### Supported Legal Forms

Ownership data is available for the following legal forms:

* **GmbH** (Gesellschaft mit beschränkter Haftung) - Limited liability company
* **KG** (Kommanditgesellschaft) - Limited partnership
* **e.K.** (eingetragener Kaufmann) - Registered merchant
* **eGbR** (eingetragene Gesellschaft bürgerlichen Rechts) - Registered civil law partnership
* **OHG** (Offene Handelsgesellschaft) - General partnership

### Ownership Data Structure

The response includes each owner's type (natural person, German company, foreign company, etc.), their ownership stake (as percentage and/or nominal shares), and their share class (e.g., Komplementär, Kommanditist for KG structures). For corporate shareholders, you'll receive the company ID to retrieve further details.

### Use Cases

**Ownership Analysis:** Understand who controls a company and identify indirect ownership through corporate shareholders. Map ownership chains to reveal corporate structures.

**Risk Assessment:** Identify concentration of ownership, related party transactions, or complex ownership structures that may require additional scrutiny.

**Network Mapping:** Track ownership connections between companies to identify business groups, family holdings, or corporate networks.


## OpenAPI

````yaml GET /v1/company/{company_id}/owners
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}/owners:
    get:
      tags:
        - v1
      summary: Get company owners
      operationId: getOwners
      parameters:
        - name: company_id
          in: path
          required: true
          description: |
            Unique company identifier.
            Example: DE-HRB-F1103-267645
          schema:
            type: string
        - name: realtime
          in: query
          required: false
          description: >
            Get the most up-to-date company information directly from the
            Handelsregister.

            When set to true, we fetch the latest data in real-time from the
            official German commercial register, ensuring you receive the most
            current company details.

            Note: Real-time requests take longer but guarantee the freshest data
            available.
          schema:
            type: boolean
        - name: export
          in: query
          required: false
          description: >
            Setting this to true will return the owners of the company if they
            exist

            but will skip processing the documents in case they weren't
            processed yet.
          schema:
            type: boolean
        - name: best_available
          in: query
          required: false
          description: >
            When set to true, returns the best available owner data for AG and
            SE companies.

            This data is extracted from Handelsregister documents and may not
            reflect the most current ownership state, as these

            document types are not filed on every ownership change.

            Requests for AG/SE companies without this flag return 404.

            Note: realtime and best_available cannot be used together at the
            moment.
          schema:
            type: boolean
      responses:
        '200':
          description: The owners of the company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyOwners'
        '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.getOwnersV1('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_owners_v1(
                company_id="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.GetOwnersV1(\n\t\tcontext.TODO(),\n\t\t\"company_id\",\n\t\topenregister.CompanyGetOwnersV1Params{},\n\t)\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-owners-v1 \
              --api-key 'My API Key' \
              --company-id company_id
components:
  schemas:
    CompanyOwners:
      type: object
      properties:
        company_id:
          type: string
          description: |
            Unique company identifier.
            Example: DE-HRB-F1103-267645
        owners:
          type: array
          items:
            $ref: '#/components/schemas/CompanyOwnerItem'
        sources:
          description: |
            Sources of the company owners data.
          type: array
          items:
            $ref: '#/components/schemas/Source'
        best_available:
          type: boolean
          description: >
            When true, the returned owner data is the best available but may not
            reflect

            the most current ownership state. This applies to AG and SE
            companies where

            ownership data is sourced from Handelsregister decision and articles
            of

            association documents, which are not filed on every ownership
            change.
      required:
        - company_id
        - owners
        - sources
        - best_available
    CompanyOwnerItem:
      type: object
      properties:
        id:
          description: |
            Unique identifier for the shareholder.
            For companies: Format matches company_id pattern
            For individuals: UUID
            Example: "DE-HRB-F1103-267645" or UUID
            May be null for certain shareholders.
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/EntityType'
          description: The type of shareholder.
        relation_type:
          $ref: '#/components/schemas/CompanyRelationType'
          description: |
            Type of relationship between the entity and the company.
        name:
          description: >-
            The name of the shareholder. E.g. "Max Mustermann" or "Max
            Mustermann GmbH"
          type: string
        natural_person:
          $ref: '#/components/schemas/CompanyOwnerNaturalPerson'
          description: |
            Details about the natural person.
        legal_person:
          $ref: '#/components/schemas/CompanyOwnerLegalPerson'
          description: |
            Details about the legal person.
        nominal_share:
          description: |
            Nominal value of shares in Euro.
            Example: 100
          type: number
          format: double
        percentage_share:
          description: |
            Percentage of company ownership.
            Example: 5.36 represents 5.36% ownership
          type: number
          format: double
          nullable: true
        start:
          description: >
            Date when the relation started. Only available for some types of
            owners.

            Format: ISO 8601 (YYYY-MM-DD)

            Example: "2022-01-01"
          type: string
          format: date
          nullable: true
      required:
        - id
        - type
        - relation_type
        - name
        - natural_person
        - legal_person
        - nominal_share
        - percentage_share
        - start
    Source:
      type: object
      properties:
        document_url:
          description: >
            Url of the source document. In the form of a presigned url
            accessible for 30 minutes.
          type: string
      required:
        - document_url
    EntityType:
      type: string
      enum:
        - natural_person
        - legal_person
    CompanyRelationType:
      type: string
      enum:
        - shareholder
        - stockholder
        - limited_partner
        - general_partner
    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.

````