Swissreg APIswissreg.ch ↗
Retrieve Swiss patent details, publication history, IPC/CPC classifications, holder and inventor data from the official Swissreg registry via a simple REST API.
What is the Swissreg API?
The Swissreg API provides structured access to Swiss patent registry data across 4 endpoints, returning fields including patent title, official patent number, IPC and CPC classifications, holder and inventor records, and full publication history. The get_patent_detail endpoint resolves a patent by its internal numeric ID and returns a complete record including status, addresses, and linked publication URNs.
curl -X GET 'https://api.parse.bot/scraper/a4f089e5-9033-4736-85dc-337f43ee4f3a/get_patent_detail?patent_id=1207223855' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace swissreg-ch-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Swissreg Patent API — bounded, re-runnable; every call capped."""
from parse_apis.swissreg_patent_api import Swissreg, Patent, Publication, Target, RecordNotFound
client = Swissreg()
# List available database targets (patent, design, chmarke, etc.)
for target in client.targets.list(limit=5):
print(target.name)
# Fetch a single patent by its internal ID
patent = client.patents.get(patent_id="1207223855")
print(patent.titel, patent.schutztitelnummer, patent.schutztitelstatus)
print(patent.ipcs)
print(patent.cpcs)
# Navigate to a publication from the patent's sub-resource
pub = patent.publications.get(publication_id="10239520")
print(pub.publikationsdatum, pub.aenderungsgrund, pub.schutztitel_ref)
# Typed error handling: catch not-found on an invalid ID
try:
missing = client.patents.get(patent_id="9999999999")
print(missing.titel)
except RecordNotFound as exc:
print(f"Patent not found: {exc}")
print("exercised: targets.list / patents.get / patent.publications.get / error handling")
Retrieve full detail for a single patent record by its internal numeric ID. Returns title, numbers, dates, status, holder, inventor, IPC/CPC classifications, publication references, and priority data. The ID is the internal Swissreg numeric identifier visible in patent URNs. Returns input_not_found if the patent ID does not exist.
| Param | Type | Description |
|---|---|---|
| patent_idrequired | string | Internal numeric ID of the patent (e.g., 1207223855, 31221348). |
{
"type": "object",
"fields": {
"id": "string, URN identifier of the patent (e.g. urn:ige:schutztitel:patent:1207223855)",
"cpcs": "array of CPC classification strings",
"ipcs": "array of IPC classification strings",
"titel": "string, patent title",
"publikationRefs": "array of URN references to related publications",
"registeradressen": "object containing INHABER (holders) and ERFINDER (inventors) arrays",
"schutztitelnummer": "string, official patent number (e.g. CH720630)",
"schutztitelstatus": "string or null, current status of the patent (e.g. GELOESCHT, AKTIV)"
},
"sample": {
"data": {
"id": "urn:ige:schutztitel:patent:1207223855",
"cpcs": [
"F24S60/00 (2021-08-01)",
"F24S10/00 (2018-05-01)"
],
"ipcs": [
"F24S 10/00 (2018.01)",
"F24S 60/00 (2018.01)"
],
"titel": "Solar-Brenner",
"doctype": "urn:ige:schutztitel:patent",
"anmeldedatum": "22.03.2023",
"gesuchsnummer": "CH000317/2023",
"schutztitelId": "1207223855",
"schutztiteltyp": "CH_PATENT",
"publikationRefs": [
"urn:ige:publikation:patent:10239520",
"urn:ige:publikation:patent:10634021"
],
"registeradressen": {
"INHABER": [
{
"id": "17598071",
"zip": 5620,
"name": "Ulrich Stutz",
"town": "Bremgarten",
"street": "Sonnmattweg 8",
"country": "CH"
}
],
"ERFINDER": [
{
"id": "17598071",
"zip": 5620,
"name": "Ulrich Stutz",
"town": "Bremgarten",
"street": "Sonnmattweg 8",
"country": "CH"
}
]
},
"schutztitelnummer": "CH720630",
"schutztitelstatus": "GELOESCHT",
"veroeffentlichungsdatum": "30.09.2024"
},
"status": "success"
}
}About the Swissreg API
Patent Records
The get_patent_detail endpoint accepts a patent_id (e.g., 1207223855) and returns the full patent record from Swissreg. Response fields include titel (patent title), schutztitelnummer (the official CH patent number), schutztitelstatus (current status), cpcs and ipcs (arrays of CPC and IPC classification strings), registeradressen (an object with INHABER and ERFINDER arrays for holders and inventors), and publikationRefs (URN references linking to associated publication records). If the ID does not exist, the endpoint returns input_not_found.
Publication History
The get_publication_detail endpoint accepts a publication_id — either a short numeric ID (e.g., 7377553) or a full URN — and returns the detail record for a single publication event in a patent's history. Key response fields include aenderungsgrund (reason for the change), publikationsdatum (publication date), publikationstexte (an object keyed by language: de, en, fr, it), and schutztitelRef (the URN of the parent patent). This makes it possible to reconstruct the full lifecycle of a patent by following URN references from the parent record.
Database Targets and Search
The get_targets endpoint requires no inputs and returns the list of available database categories on Swissreg, such as patent, design, and chmarke. This is useful for discovering which registries are accessible. The search_patents endpoint is defined but currently returns HTTP 403 due to active protection on POST requests from the source site, so programmatic patent search is not available at this time.
The Swissreg API is a managed, monitored endpoint for swissreg.ch — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when swissreg.ch changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official swissreg.ch API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Retrieve full patent records including IPC/CPC classifications and holder details for IP research workflows.
- Track the publication history of a Swiss patent by following
publikationRefsURNs fromget_patent_detailtoget_publication_detail. - Monitor
schutztitelstatuschanges to identify when a Swiss patent lapses, is granted, or is opposed. - Extract inventor (
ERFINDER) and holder (INHABER) data fromregisteradressenfor competitive intelligence or due diligence. - Retrieve multilingual publication texts (
de,en,fr,it) frompublikationstextefor translation or legal review pipelines. - Enumerate available Swissreg database targets via
get_targetsto programmatically discover design or trademark registries.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Swissreg provide an official public developer API?+
What exactly does `get_patent_detail` return beyond the patent number?+
schutztitelnummer (e.g., CH720630), the endpoint returns the patent title (titel), current status (schutztitelstatus), arrays of IPC and CPC classification strings, a registeradressen object containing separate INHABER (holder) and ERFINDER (inventor) arrays, a URN identifier for the record, and an array of publikationRefs pointing to related publication records.Can I search for patents by keyword or applicant name?+
search_patents endpoint is defined but blocked by the source site's request protection and returns 403. The API covers direct lookups via get_patent_detail using a known internal numeric ID. You can fork this API on Parse and revise it to add the missing search endpoint once the blocking condition changes.Does the API return design or trademark records, not just patents?+
get_patent_detail and get_publication_detail are scoped to patent records. get_targets shows that Swissreg also covers design and chmarke targets, but detail endpoints for those registry types are not included. You can fork this API on Parse and revise it to add endpoints for design or trademark lookups.How do I navigate a patent's publication history using this API?+
get_patent_detail with a known patent_id to get the full patent record, which includes a publikationRefs array of URNs. Pass each URN (or the numeric portion) as a publication_id to get_publication_detail to retrieve individual publication events, including the change reason (aenderungsgrund), date (publikationsdatum), and multilingual publication texts.