Skip to main content

Organisations API

Use the canonical /organisations routes for organisation lookup and related registry data. These routes identify an organisation by its Swiss enterprise identification number (UID) or exact legal name.

OperationMethod and pathPurpose
Lookup by UIDGET /organisations/by-uid/{uid}Return detailed organisation data.
Lookup by exact legal nameGET /organisations/by-name/{name}Return detailed organisation data.
List signatoriesGET /organisations/{uid}/signatoriesReturn authorised signatories.
Get signing rulesGET /organisations/{uid}/signatories/rulesReturn signing authorities and competences.
Validate signatoriesPOST /organisations/{uid}/signatories/validateCheck whether a set of signatories can legally sign.
Get ZEFIX excerptGET /organisations/{uid}/excerptReturn download details for the cantonal commercial-register excerpt.
Get UID excerptsGET /organisations/{uid}/excerpt-uidReturn excerpts available from the Swiss UID register.

OAuth 2.0 client credentials are required; see Authentication and Authorization. Which of these operations you can call depends on your plan; see Plans and Base URLs. Calling an operation outside your plan returns 401.

The examples below use these variables. Replace the plan segment with your own plan.

BASE_URL="https://api.swisscom.com/products/business-identity-validator/swiss-registry-signatory-excerpt"
TOKEN="<access-token>"
UID="CHE-110.105.931"

Lookup by UID

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/by-uid/$UID"

The UID may be supplied with or without separators — both CHE-110.105.931 and CHE110105931 are accepted.

{
"organisationName": "Swisscom AG",
"uid": "CHE-110105931",
"legalForm": {
"uid": "0106",
"name": "Corporation (Ltd)"
},
"address": {
"addressCategory": "LEGAL",
"street": "Alte Tiefenaustrasse",
"houseNumber": "6",
"town": "Bern",
"zipCode": {
"swissZipCode": 3048,
"swissZipCodeAddOn": "00",
"municipalityId": 351,
"cantonAbbreviation": "BE"
},
"countryIdISO2": "CH"
}
}
warning

The top-level uid (CHE…) is the organisation identifier you reuse in downstream calls. The nested legalForm.uid (for example 0106) is a separate legal-form code from the UID register — it identifies the legal form, not the company, and is never used as a path parameter.

Use this operation when the exact registered name is already known:

LEGAL_NAME="Swisscom%20AG"

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/by-name/$LEGAL_NAME"

URL-encode the name before placing it in the path. Both lookup operations return the same organisation shape.

List signatories

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/$UID/signatories"
{
"signatories": [
{
"personalDetails": "Strasser, Felix, von Aarau, in Küttigen",
"role": "Member of the Board",
"signingCompetence": "Individual signing authority"
}
],
"sourceURL": "https://be.chregister.ch/cr-portal/auszug/auszug.xhtml?uid=CHE-101.654.423",
"sogcDate": "2025-01-23"
}

Use the personalDetails value as the signer name when validating a combination.

Get signing rules

Retrieve rules when the workflow needs to explain signing requirements. includeSuggestions=true adds possible valid signer combinations, and includeParsedParams=true adds parsed signatory attributes such as first name, last name, and residence.

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/$UID/signatories/rules?includeSuggestions=true"

The response always contains rules; suggestions is included only when requested.

{
"rules": [
{
"name": "Zsigray, Zsolt, von Rümlang, in Zürich",
"role": "secretary (non-member of the board)",
"groups": [],
"signingCompetence": {
"minSigners": 2,
"requiredRoles": [],
"requiredGroups": [],
"mode": "JOINT"
}
},
{
"name": "Hänni, Frank, von Wengi, in Zürich",
"role": "chairperson of the board",
"groups": [],
"signingCompetence": {
"minSigners": 2,
"requiredRoles": [],
"requiredGroups": [],
"mode": "JOINT"
}
}
],
"suggestions": [
{
"explanation": "Valid: Joint signing with 2 signer(s), minimum required: 2",
"minSigners": 2,
"satisfiedRules": [
"Zsigray, Zsolt, von Rümlang, in Zürich",
"Hänni, Frank, von Wengi, in Zürich"
]
}
]
}

Validate signatories

curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"$BASE_URL/organisations/$UID/signatories/validate" \
--data '{
"signers": [
"Strasser, Felix, von Aarau, in Küttigen"
]
}'
warning

A 200 response means the validation ran, not that the combination is valid. Always check isValid. Status codes in the 4xx and 5xx ranges indicate request, authentication, or server errors rather than a negative validation outcome.

{
"isValid": true
}

When validation fails, the response can carry reason, failureCode, and invalidSigners:

{
"isValid": false,
"reason": "One or more signers were not found",
"failureCode": "UNKNOWN_SIGNER",
"invalidSigners": [
{
"name": "Unknown, Person",
"code": "UNKNOWN_SIGNER",
"reason": "Signer was not found in the organisation's signing rules"
}
]
}

For normal rule discovery, use the signing rules operation. Add ?includeRules=true only when troubleshooting; the response then also includes rules.

Get ZEFIX excerpt

For an organisation listed in ZEFIX, retrieve its cantonal commercial-register excerpt:

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/$UID/excerpt"

The response contains instructions as to where to actually download the document, it does not contain PDF binary data:

{
"method": "GET",
"url": "https://.example.com/extract_CHE123456789.pdf?...",
"headers": {
"Content-Type": "application/json",
"Accept": "application/pdf"
},
"body": null,
"fileName": "extract_CHE123456789.pdf",
"sourceURL": "https://be.chregister.ch/cr-portal/auszug/auszug.xhtml?uid=CHE-101.654.423"
}

This response contains all the components to create an HTTP request to fetch the actual document. These components include:

  • URL
  • HTTP method
  • Request headers and body that have to be included

If these components are null or empty, they don't have to be supplied with your onwards HTTP request.

Get UID excerpts

Use this operation for organisations not listed in ZEFIX, or when all excerpts held by the Swiss UID register are required:

curl \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/organisations/$UID/excerpt-uid"

The response contains one entry per available excerpt. ehraId is optional; each pdfs entry always contains downloadRequest.

{
"uid": "CHE-123.456.789",
"pdfs": [
{
"ehraId": "214124",
"downloadRequest": {
"method": "POST",
"url": "https://example.com/download-pdf",
"headers": {
"Content-Type": "application/json",
"Accept": "application/pdf"
},
"body": "",
"fileName": "extract_CHE123456789.pdf",
"sourceURL": "https://be.chregister.ch/cr-portal/auszug/auszug.xhtml?uid=CHE-101.654.423"
}
}
]
}

Downloading excerpts safely

Both excerpt operations hand you a request to execute against an external host, so treat the returned values as untrusted input.

  • Require HTTPS and an approved destination host before issuing the request, and apply response size and time limits.
  • Treat fileName as untrusted: remove path components, write into a controlled storage directory, and verify the content is a PDF before retaining it.
  • Do not log the returned headers or request body, which can carry sensitive values.