Data API
API for Swiss company data
Every data point of your plan for your systems, as JSON: a company by UID, or lists by canton, town, industry and legal form. Included in every plan from Start, with the same monthly volume as the export.
Key
Create it in your account (up to 3 per account) and send it with every request. We keep only a hash of the key.
Authorization: Bearer chd_live_…
Endpoints
GET /api/v1/firma/{uid}One company with every layer of your plan. Counts 1 company; an unknown UID counts nothing.
GET /api/v1/suche?kanton=ZH&branche=treuhand&seite=1Companies by filters: q (name or UID), kanton (ZH), ort (zuerich), rechtsform (aktiengesellschaft), branche (treuhand), status (aktiv or alle); seite, pro_seite (up to 100). Counts the companies returned.
GET /api/v1/nutzungPlan and this month's volume. Counts nothing.
Volume and limits
Companies are counted, not calls: a page of 100 companies counts 100. Every answer reports the state in the headers X-Volume-Limit, X-Volume-Used and X-Volume-Left. At most 600 calls a minute per key.
Errors
401 key missing or revoked · 402 no active plan · 404 UID not in the register · 429 volume used up or more than 600 calls a minute.
Example
curl -H "Authorization: Bearer $CHDATA_KEY" \ https://chdata.ch/api/v1/firma/CHE-203.381.047
{
"plan": "profi",
"layers": [
"basis",
"personen",
"verlauf"
],
"company": {
"uid": "CHE-203.381.047",
"name": "PatMi AG",
"legal_form": "aktiengesellschaft",
"legal_form_name": "Aktiengesellschaft",
"status": "active",
"address": {
"care_of": "c/o Michael Hirt",
"street": "Seestrasse 248b",
"zip": "8713",
"city": "Uerikon",
"canton": "ZH"
},
"industries": [],
"purpose": null,
"capital": null,
"registered": "2026-10-23",
"lei": null,
"licences": [],
"people": {
"president": [
"Michael Christian Hirt"
],
"management": [],
"board": [
"Patricia Silvia Hirt"
],
"sole_signature": [
"Michael Christian Hirt",
"Patricia Silvia Hirt"
],
"count": 2,
"auditors": []
},
"history": {
"last_notice": "2026-10-23",
"notices": 1,
"last_events": [
"new"
],
"renames": 0,
"seat_moves": 0,
"people_changes": 0,
"public_awards": {
"count": 0,
"sum_chf": null
}
}
},
"source": "CHdata.ch"
}Fields by plan
Every company has the fields of your plan's layers; an empty field means the register has nothing on it.
Core dataStart
- uid
- name
- legal_form
- legal_form_name
- status
- address
- industries
- purpose
- capital
- registered
- lei
- licences
People & signingfrom Start
- people.president
- people.management
- people.board
- people.sole_signature
- people.count
- people.auditors
Historyfrom Pro
- history.last_notice
- history.notices
- history.last_events
- history.renames
- history.seat_moves
- history.people_changes
- history.public_awards
Signalsfrom Expert
- signals.status_event
- signals.revoked
- signals.auditor_left
- signals.departures
- signals.care_of
- signals.same_address
- signals.proceedings
- signals.enforcements