Skip to main content

vynco

Python SDK for the VynCo Swiss Corporate Intelligence API. Access 780,000+ Swiss companies from the commercial register with historical timelines, change tracking, sanctions screening, AI-powered risk analysis, UBO resolution, network graphs, watchlists, webhooks, market-flow analytics, and bulk data exports.

VynCo compliance dashboard

Installation

pip install vynco

Or with uv:

uv add vynco

Quick Start

import vynco

client = vynco.Client("vc_live_your_api_key")

# Search the Swiss commercial register
result = client.companies.list(query="UBS", canton="BS")
uid = result.data.items[0].uid

# Get a single company
company = client.companies.get(uid)
print(f"{company.data.name} ({company.data.legal_form})")

# Full company details with persons, changes, relationships
full = client.companies.get_full(uid)
print(f"Board: {len(full.data.persons)} persons, {len(full.data.recent_changes)} recent changes")

# Historical timeline — every change the company ever made
timeline = client.companies.timeline(uid)
print(f"Timeline: {timeline.data.total_events} events")

# UBO resolution — identify ultimate beneficial owners
ubo = client.companies.ubo(uid)
print(f"UBO persons: {len(ubo.data.ubo_persons)} (chain depth: {ubo.data.chain_depth})")

# Sanctions screening (batch — up to 100 UIDs in one call)
batch = client.screening.batch(uids=[uid, "CHE-101.049.653"])
for r in batch.data.results:
    print(f"  {r.company_name}: {r.risk_level} ({r.total_hits} hits)")

# AI risk score
risk = client.ai.risk_score(uid=uid)
print(f"Risk: {risk.data.overall_score}/100 ({risk.data.risk_level})")

# Industry benchmarking — percentile ranks vs industry peers
bench = client.analytics.benchmark(uid=uid)
for d in bench.data.dimensions:
    print(f"  {d.name}: {d.percentile:.0f}th percentile")

Async Usage

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)

Examples and Notebooks

The examples/ directory contains runnable scripts for common workflows. The notebooks/ directory contains Jupyter notebooks that produce publication-ready charts.

Example Use Case
examples/quickstart.py Search, fetch details, response metadata
examples/due_diligence.py KYC/AML screening, risk score, classification, fingerprint
examples/watchlist_monitor.py Portfolio monitoring with event feed
examples/company_network.py Board members, relationships, hierarchy, graph
examples/bulk_export.py CSV export and async bulk export jobs
examples/historical_timeline.py Chronological company timeline + AI narrative
examples/ubo_resolution.py UBO + ownership chain + batch screening
Notebook Featured Figures
notebooks/swiss_market_analytics.ipynb Canton distribution, auditor market share, RFM segments
notebooks/company_deep_dive.ipynb Company profile card, board, risk score, corporate network
notebooks/compliance_screening.ipynb Batch screening, risk heatmap, compliance dashboard
notebooks/market_flows.ipynb Registrations vs dissolutions, canton migrations
notebooks/similar_companies.ipynb Peer discovery + industry benchmark radar

See examples/README.md and notebooks/README.md for details.

Swiss companies by canton Swiss audit market

API Coverage

20 resource modules covering 100+ endpoints:

Resource Methods
client.health check
client.companies list, get, get_full, count, events, statistics, compare, news, reports, relationships, hierarchy, classification, fingerprint, structure, acquisitions, nearby, timeline, timeline_summary, similar, ubo, media, media_analyze, notes, create_note, update_note, delete_note, tags, create_tag, delete_tag, all_tags, export_csv
client.auditors history, tenures
client.dashboard get
client.screening screen, batch, browse_sanctions
client.watchlists list, create, delete, companies, add_companies, remove_company, events
client.watches list, add, remove
client.webhooks list, create, update, delete, test, deliveries
client.exports create, get, download, bulk_profiles
client.bulk export, screening, add_to_watchlist
client.ai dossier, search, risk_score, risk_score_batch, comparative, predictive_risk
client.risk v2
client.api_keys list, create, revoke
client.usage current
client.billing create_checkout, create_portal
client.teams me, create, members, invite_member, update_member_role, remove_member, billing_summary, join
client.changes list, by_company, statistics, review, diff
client.persons board_members, search, get, network
client.analytics cantons, auditors, cluster, anomalies, rfm_segments, cohorts, candidates, prospects, flows, migrations, benchmark
client.dossiers create, list, get, delete, generate
client.graph get, export, analyze
client.alerts list, create, delete
client.ownership trace, analytics
client.audit playbook
client.compliance scope
client.pipelines list, create, get, update, delete, add_entry, update_entry, remove_entry, stats
client.reports industries, get, generate
client.saved_searches list, create, get, update, delete
client.notifications list, mark_read, get_preferences, update_preferences, test
client.settings get_preferences, update_preferences
client.sync status

New in v3.1

  • Historical timelinecompanies.timeline() and AI narrative via companies.timeline_summary()
  • Similar companiescompanies.similar() scored on industry, canton, capital, legal form, auditor tier
  • UBO resolutioncompanies.ubo() walks the ownership chain and identifies natural persons
  • Ownership traceownership.trace() exposes the full chain with circular-ownership detection
  • Media with sentimentcompanies.media() filtered by positive/neutral/negative
  • Batch operationsscreening.batch() (up to 100 UIDs) and ai.risk_score_batch() (up to 50 UIDs)
  • Market analyticsanalytics.flows(), analytics.migrations(), analytics.benchmark()
  • Person networkpersons.network() for person-centric investigations with co-directors
  • Saved alerts — persistent saved queries with optional webhook delivery
  • Pagination on board_members — pass page= and page_size= (max 500)
  • Typed hierarchyHierarchyResponse now uses HierarchyEntity (was Any)
  • Enriched watchlistsWatchlistCompaniesResponse.companies includes name/status/canton
  • export_csv — new canonical name (export_excel kept as a deprecated alias)

Response Metadata

Every response includes header metadata for request tracing and rate limiting:

resp = client.companies.get("CHE-101.329.561")

print(f"Request ID: {resp.meta.request_id}")               # X-Request-Id
print(f"Rate group: {resp.meta.rate_limit_group}")         # X-RateLimit-Group
print(f"Rate window: {resp.meta.rate_limit_window}")        # X-RateLimit-Window
print(f"Rate limit: {resp.meta.rate_limit_limit}")          # X-RateLimit-Limit
print(f"Rate remaining: {resp.meta.rate_limit_remaining}")  # X-RateLimit-Remaining
print(f"Rate reset: {resp.meta.rate_limit_reset}")          # X-RateLimit-Reset
print(f"Data source: {resp.meta.data_source}")              # X-Data-Source

Configuration

client = vynco.Client(
    api_key="vc_live_xxx",
    base_url="https://vynco.ch/api",  # 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_key
client = vynco.Client()  # reads from VYNCO_API_KEY

The client automatically retries on HTTP 429 (rate limited) and 5xx (server error) with exponential backoff (500ms x 2^attempt). It respects the Retry-After and X-RateLimit-Reset headers when present.

Error Handling

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.ServiceUnavailableError:
    print("AI backend temporarily unavailable")
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)

Requirements

  • Python 3.11+
  • httpx (async + sync HTTP)
  • Pydantic v2 (model validation)

Development

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 check

License

Apache-2.0

Release files for vynco 4.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vynco 4.0.0
File Size Uploaded
vynco-4.0.0.tar.gz 5.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for vynco 4.0.0
File Interpreter ABI Platform
vynco-4.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 5.0 MB

Release files / vynco-4.0.0.tar.gz

Download URL vynco-4.0.0.tar.gz
Size 5.0 MB
Tags Source
SHA-256 checksum
How to use checksums
fe5ac24f5ecbdf368b5b4cb88e135b68b434669ff076ea5e904ac8f9b2104700
BLAKE2b-256 checksum
How to use checksums
f1f7b3c254a523dd0b56ccd5b0cbc7d398f52c8b0ba1ef5295de04133ac2e756
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release files / vynco-4.0.0-py3-none-any.whl

Download URL vynco-4.0.0-py3-none-any.whl
Size 75.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42b48862fd45edb993c02da22c71eeebc7c0e04b1f528e898fe6b1e4d3ecfc2a
BLAKE2b-256 checksum
How to use checksums
e3a608d8b8f4e35447bd0e03310639b09f80a456eff5c49ecb0e6bec079c6e77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

4.0.0 This release

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page