/v1/search-organizations
1 credit • 60/minSearch and filter German companies, with pagination. At least one of q or filters is required.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| api_key | string | Conditional* | Your API key. Only required if you use neither the x-api-key header nor a Bearer token. |
| q | string | Conditional* | Search term with 2 to 500 characters. You may omit q when filters contains at least one criterion; otherwise q is required. |
| skip | integer | optional | Number of results to skip (default: 0). |
| limit | integer | optional | Results per page (default: 10, max: 30). |
| filters | string (JSON object) | optional | A URL-encoded JSON object. The reference below covers the filters available in the current main search playground and shows their required nesting. |
| sort | string | optional | Sort field: relevance (default), registration_date, financial_year, revenue, profit, employees, total_assets, equity, liabilities, cash, equity_ratio, share_capital, last_activity, largest_share_ratio, management_size, md_oldest_birth_date, md_youngest_birth_date, fb_entity_id or distance (requires the geo filter). An unknown field is answered with 422. |
| order | string | optional | Sort direction: asc or desc. Each sort field has a sensible default. |
| match_context | boolean | optional | match_context=1 adds _match_context to every hit: the entries that satisfied the register-derived filters. Without it the response stays lean. |
Filters
All filters are optional. Range filters accept {"gte": min, "lte": max} — either bound may be omitted — and are nested under a financial_filters object, e.g. {"financial_filters":{"pl_revenue":{"gte":1000000}}}.
GET /v1/search-organizations?limit=10&filters={"city":"München","industry_code":["62.10.1","62.10.3"],"industry_scheme":"WZ2025","financial_filters":{"pl_revenue":{"gte":1000000}}}
Shown unencoded for readability — in real requests, URL-encode the filters value.
Identity & Registration
8-
registration_date_fromdate - Earliest registration date (ISO 8601, YYYY-MM-DD).
-
registration_date_todate - Latest registration date (ISO 8601, YYYY-MM-DD).
-
legal_form_codestring - Exact legal-form code, for example GmbH, AG, e.V. or UG (haftungsbeschränkt). Send one string; arrays are rejected.
-
industry_codestring / array - NACE/WZ industry code. A single code or an array of codes — an array matches companies in any of them, e.g. ["62.10.1","62.10.3"].
-
industry_schemestring - Classification scheme paired with industry_code. Default: WZ2025.
-
activeboolean - true = active companies only, false = inactive only. Omit for both.
-
statusenum - Exact register status: ACTIVE, INACTIVE, TERMINATED, DISSOLVED or INSOLVENT. Values are case-sensitive. Use status for a specific lifecycle state; active is the simpler boolean alternative.
-
legal_form_liability_typeenum - Liability model: limited, unlimited or mixed.
Location
5-
postal_codestring - German 5-digit postal code (PLZ).
-
citystring - City name.
-
statestring - German federal state (e.g. Bayern, Hessen).
-
location_coordinatesobject {lat, lon} - Center of the radius search in WGS84 decimal degrees, as {"lat":48.137,"lon":11.576}. Latitude must be between -90 and 90, longitude between -180 and 180. Send this together with location_max_distance_km.
-
location_max_distance_kmnumber - Search radius in kilometres (1–100). Send this together with location_coordinates.
Court & Register
3-
registration_typestring / array - Register type: HRA, HRB, GnR, PR or VR. Single value or array.
-
registration_authority_namestring - Register court (e.g. München).
-
registration_numberstring - Register number (e.g. HRB 12345).
Size & Employees
2-
company_size_categoryenum - Size bucket: micro, small, medium or large.
-
emp_countrange - Employee count range.
Balance Sheet
7-
bs_assets_totalEUR range - Total assets / Bilanzsumme, in EUR.
-
bs_equity_totalEUR range - Equity / Eigenkapital, in EUR.
-
bs_liabilities_totalEUR range - Total liabilities / Verbindlichkeiten, in EUR.
-
bs_cash_and_equivalentsEUR range - Cash & cash equivalents, in EUR.
-
bs_cash_to_liabilitiesdecimal range - Liquidity ratio (cash ÷ liabilities), decimal.
-
bs_equity_ratioratio (0–1) - Equity ratio (equity ÷ total assets), decimal 0–1.
-
bs_debt_to_assetsratio (0–1) - Debt-to-assets ratio, decimal 0–1.
Profit & Loss
3-
pl_revenueEUR range - Annual revenue / Umsatz, in EUR.
-
pl_net_incomeEUR range - Net income / Jahresüberschuss, in EUR.
-
pl_ebitEUR range - EBIT / operating profit, in EUR.
Register-Derived Filters (Ownership, Management, Insolvency)
3-
ownership_filtersconditions - Ownership and succession criteria used by the playground: structure, owner_managed, likely_family_owned, largest_share_ratio (0–1), oldest_owner_birth_date and youngest_owner_birth_date.
-
executive_filtersconditions - Management-age criteria used by the playground: md_oldest_birth_date and md_youngest_birth_date.
-
lifecycle_filtersconditions - Insolvency criteria used by the playground: insolvency_active, insolvency_status and insolvency_opened_date.
Register-derived filters in detail
These are the ownership, management and insolvency criteria available in the current main search playground, including its AI query and quick-start options. Each group is a condition object inside filters and combines with every other filter.
ownership_filters
Ownership structure
One condition object
-
structureenum -
How the group of owners is composed.
Values:
sole_personSingle person ·partnersSeveral partners ·sole_companySingle company ·familyFamily ·fragmentedFragmented ·corporate_groupCorporate group -
owner_managedboolean - At least one owner is also registered in management.
-
likely_family_ownedboolean - Several owners share a family name — an indication of family ownership, not an official finding.
-
largest_share_ratiorange - Largest single share, decimal between 0 and 1.
-
oldest_owner_birth_datedate - Date of birth of the oldest owner.
-
youngest_owner_birth_datedate - Date of birth of the youngest owner.
Match context: _match_context.ownership
executive_filters
Management metrics
One condition object
-
md_oldest_birth_datedate - Date of birth of the oldest active managing director.
-
md_youngest_birth_datedate - Date of birth of the youngest active managing director.
Match context: _match_context.executive
lifecycle_filters
Lifecycle & insolvency
One condition object
-
insolvency_activeboolean - true = proceedings currently running. The field only exists where any proceeding was recorded — so {"exists": false} finds companies with no insolvency proceeding at all.
-
insolvency_statusenum -
State of the most recent proceeding.
Values:
openedOpened ·provisionalProvisional ·discontinuedDiscontinued ·concludedConcluded ·rejected_no_assetsRejected for lack of assets ·plan_monitoringPlan monitoring ·opening_rescindedOpening rescinded -
insolvency_opened_datedate - Date the proceeding was opened.
Match context: _match_context.lifecycle
Each field takes a scalar, a list (any of them), or an operator object with gte, lte, gt, lt, eq or exists. Dates accept YYYY, YYYY-MM or YYYY-MM-DD; a partial date covers its whole period. Shares travel as a decimal between 0 and 1 — 0.25 means 25%.
With match_context=1 every hit reports under _match_context which entries satisfied the filter — each group under its own key.
GET /v1/search-organizations?limit=10&match_context=1&filters={"state":"Bayern","ownership_filters":{"owner_managed":true,"likely_family_owned":true,"oldest_owner_birth_date":{"lte":"1959"}}}
Shown unencoded for readability — in real requests, URL-encode the filters value.
Excerpt from the response
{
"name": "Muster Beteiligungs-GmbH",
"_match_context": {
"ownership": {
"owner_managed": true,
"likely_family_owned": true,
"oldest_owner_birth_date": "1948-04-29"
}
}
}
Names and identifiers are replaced in this example.
Example Request
curl 'https://handelsregister.ai/api/v1/search-organizations?api_key=your_api_key_here&q=tech&limit=10&filters=%7B%22postal_code%22%3A%2280992%22%7D'
Example Response
{
"results": [
{
"entity_id": "65063129c1bf565e4244b943a188bbda",
"name": "m50 GmbH",
"registration": {
"court": "München",
"register_type": "HRB",
"register_number": "189767"
},
"address": {
"house_number": "20",
"street": "Gubestraße",
"postal_code": "80992",
"city": "München",
"county": "München (Stadt)",
"state": "Bayern",
"country": "DEU",
"coordinates": {
"latitude": 48.18005,
"longitude": 11.51116
}
},
"registration_date": "2011-01-04T00:00:00",
"purpose": "Film- und Fernsehproduktion..."
}
],
"total": 988,
"meta": {
"request_credit_cost": 1,
"credits_remaining": "73841333"
}
}