Python SDK for the VynCo Swiss Corporate Intelligence API. Access 500,000+ Swiss companies from the commercial register with change tracking, sanctions screening, AI-powered risk analysis, network graphs, watchlists, webhooks, and bulk data exports.
pip install vyncoOr with uv:
uv add vyncoimport vynco
client = vynco.Client("vc_live_your_api_key")
# List companies with filtering
result = client.companies.list(query="Novartis", canton="BS")
print(f"Found {result.data.total} companies")
# Get a single company
company = client.companies.get("CHE-105.805.080")
print(f"{company.data.name}: {company.data.legal_form}")
# Sanctions screening
screening = client.screening.screen(name="Suspicious Corp")
print(f"Risk: {screening.data.risk_level} ({screening.data.hit_count} hits)")
# AI risk score
risk = client.ai.risk_score(uid="CHE-105.805.080")
print(f"Risk score: {risk.data.overall_score}/100 ({risk.data.risk_level})")
# Credit balance
credits = client.credits.balance()
print(f"Credits remaining: {credits.data.balance}")import vynco
async def main():
async with vynco.AsyncClient("vc_live_your_api_key") as client:
result = await client.companies.list(query="Novartis")
print(result.data.items[0].name)18 resource modules covering 69 endpoints:
| Resource | Methods |
|---|---|
client.health |
check |
client.companies |
list, get, count, events, statistics, compare, news, reports, relationships, hierarchy, fingerprint, nearby |
client.auditors |
history, tenures |
client.dashboard |
get |
client.screening |
screen |
client.watchlists |
list, create, delete, companies, add_companies, remove_company, events |
client.webhooks |
list, create, update, delete, test, deliveries |
client.exports |
create, get, download |
client.ai |
dossier, search, risk_score |
client.api_keys |
list, create, revoke |
client.credits |
balance, usage, history |
client.billing |
create_checkout, create_portal |
client.teams |
me, create, members, invite_member, update_member_role, remove_member, billing_summary |
client.changes |
list, by_company, statistics |
client.persons |
board_members |
client.analytics |
cantons, auditors, cluster, anomalies, rfm_segments, cohorts, candidates |
client.dossiers |
create, list, get, delete |
client.graph |
get, export, analyze |
Every response includes header metadata for credit tracking and rate limiting:
resp = client.companies.get("CHE-105.805.080")
print(f"Request ID: {resp.meta.request_id}") # X-Request-Id
print(f"Credits used: {resp.meta.credits_used}") # X-Credits-Used
print(f"Credits remaining: {resp.meta.credits_remaining}") # X-Credits-Remaining
print(f"Rate limit: {resp.meta.rate_limit_limit}") # X-Rate-Limit-Limit
print(f"Data source: {resp.meta.data_source}") # X-Data-Sourceclient = vynco.Client(
api_key="vc_live_xxx",
base_url="https://api.vynco.ch", # default
timeout=30.0, # seconds, default
max_retries=2, # default, retries on 429/5xx
)The API key can also be set via the VYNCO_API_KEY environment variable:
export VYNCO_API_KEY=vc_live_your_api_keyclient = vynco.Client() # reads from VYNCO_API_KEYThe client automatically retries on HTTP 429 (rate limited) and 5xx (server error) with
exponential backoff (500ms x 2^attempt). It respects the Retry-After header when present.
All API errors are mapped to typed exceptions:
try:
company = client.companies.get("CHE-000.000.000")
except vynco.AuthenticationError:
print("Invalid API key")
except vynco.InsufficientCreditsError:
print("Top up credits")
except vynco.ForbiddenError:
print("Insufficient permissions")
except vynco.NotFoundError as e:
print(f"Not found: {e.detail}")
except vynco.ValidationError as e:
print(f"Bad request: {e.detail}")
except vynco.ConflictError:
print("Resource conflict")
except vynco.RateLimitError:
print("Rate limited, retry later")
except vynco.ServerError:
print("Server error")
except vynco.VyncoError as e:
print(f"Error ({e.status}): {e.detail}")| Exception | HTTP Status |
|---|---|
AuthenticationError |
401 |
InsufficientCreditsError |
402 |
ForbiddenError |
403 |
NotFoundError |
404 |
ConflictError |
409 |
ValidationError |
400, 422 |
RateLimitError |
429 |
ServerError |
5xx |
ServiceUnavailableError |
503 |
ConfigError |
— (client misconfiguration) |
uv sync # install dependencies
uv run pytest # run tests
uv run ruff check src/ # lint
uv run ruff format src/ # format
uv run mypy src/ # type checkApache-2.0