CHdata

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=1

    Companies 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/nutzung

    Plan 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