Swiss Data Atlas API

Everything the app can do is available over HTTPS: company search, contact reveals, industry monitors, digests, reference data and natural-language questions. Keys are scoped, metered and self-service.

Create a key in the app · OpenAPI schema

Authentication

Send your key as a bearer token on every request. Base URL: /api/public/v1.

curl -s https://swissdataatlas.com/api/public/v1/me \
  -H "Authorization: Bearer sda_live_…"

Response format

Successful calls return data plus meta; failures return an error object with a stable code.

{
  "data": { "companies": [ … ] },
  "meta": {
    "requestId": "…",
    "generatedAt": "2026-01-01T12:00:00.000Z",
    "rowsReturned": 42,
    "quota": {
      "rowsUsedThisMonth": 1042,
      "rowsLimitPerMonth": 25000,
      "revealsUsedThisMonth": 3,
      "revealsLimitPerMonth": 25,
      "maxRowsPerRequest": 250
    }
  }
}

Every response also carries x-ratelimit-limit, x-quota-rows-limit/-used and x-quota-reveals-limit/-used.

Scopes

  • companies:readSearch companies and read company details
  • contacts:readReveal signatory contact details (billed per lookup)
  • monitors:readList saved monitors
  • monitors:writeCreate monitors and trigger runs
  • digests:readRead a monitor's current digest
  • ask:writeAsk questions in natural language
  • reference:readRead industry (NOGA) and canton reference data

Endpoints

MethodPathScopeWhat it does
GET/mereference:readKey scopes, limits and current usage.
POST/companies/searchcompanies:readSearch companies by industry, canton, registration window or anniversary.
GET/companies/{uid}companies:readOne company by Swiss UID (CHE-…) or registry id, with signatories.
POST/contacts/revealcontacts:readReveal a signatory's e-mail, phone and profiles. Billed per new lookup.
GET/monitorsmonitors:readList your saved monitors.
POST/monitorsmonitors:writeCreate a monitor.
POST/monitors/{id}/runmonitors:writeRun a monitor now and mail its digest.
GET/digests/{id}digests:readThe current digest of a monitor as JSON.
POST/askask:writeAsk a question in plain language; returns prose, SQL and rows.
GET/reference/nogareference:readIndustry tree (NOGA 2025).
GET/reference/cantonsreference:readCantons and mutation types.

Example: company search

curl -s https://swissdataatlas.com/api/public/v1/companies/search \
  -H "Authorization: Bearer sda_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "anniversary",
    "anniversaryYears": [10, 25],
    "fromMonths": 3,
    "toMonths": 24,
    "cantons": ["ZH", "ZG"],
    "industries": [{ "level": "section", "code": "L" }],
    "websiteOnly": true,
    "limit": 100
  }'

Example: ask a question

curl -s https://swissdataatlas.com/api/public/v1/ask \
  -H "Authorization: Bearer sda_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "question": "How many companies were registered in Zug last month?" }'

Limits and errors

Each key has a per-request row cap, a monthly row allowance, a monthly contact-reveal allowance, a requests-per-minute limit and optional canton or industry restrictions. Error codes you should handle: missing_key, invalid_key, insufficient_scope, canton_not_allowed, rate_limited, row_quota_exhausted, reveal_quota_exhausted, not_found.