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 detailscontacts:readReveal signatory contact details (billed per lookup)monitors:readList saved monitorsmonitors:writeCreate monitors and trigger runsdigests:readRead a monitor's current digestask:writeAsk questions in natural languagereference:readRead industry (NOGA) and canton reference data
Endpoints
| Method | Path | Scope | What it does |
|---|---|---|---|
| GET | /me | reference:read | Key scopes, limits and current usage. |
| POST | /companies/search | companies:read | Search companies by industry, canton, registration window or anniversary. |
| GET | /companies/{uid} | companies:read | One company by Swiss UID (CHE-…) or registry id, with signatories. |
| POST | /contacts/reveal | contacts:read | Reveal a signatory's e-mail, phone and profiles. Billed per new lookup. |
| GET | /monitors | monitors:read | List your saved monitors. |
| POST | /monitors | monitors:write | Create a monitor. |
| POST | /monitors/{id}/run | monitors:write | Run a monitor now and mail its digest. |
| GET | /digests/{id} | digests:read | The current digest of a monitor as JSON. |
| POST | /ask | ask:write | Ask a question in plain language; returns prose, SQL and rows. |
| GET | /reference/noga | reference:read | Industry tree (NOGA 2025). |
| GET | /reference/cantons | reference:read | Cantons 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.