Inpi APIdata.inpi.fr ↗
Search French patents, trademarks, industrial designs, and company registrations from the official INPI national register via a single API endpoint.
What is the Inpi API?
The data.inpi.fr API exposes one search endpoint that queries four INPI databases — patents (brevets), trademarks (marques), industrial designs (dessins et modèles), and company registrations (RNE entreprises) — returning up to 100 results per page with relevance ranking, applicant details, classifications, detail URLs, and document links. The search endpoint accepts free-text queries, a database type filter, and standard pagination controls.
curl -X POST 'https://api.parse.bot/scraper/ef0f53c8-cbd4-49fc-bb28-884deb4d907f/search' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"page": "1",
"type": "companies",
"query": "Tesla",
"results_per_page": "5"
}'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 data-inpi-fr-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: Data INPI SDK — bounded, re-runnable; every call capped."""
from parse_apis.data_inpi_fr_api import DataInpi, RecordType, UpstreamError
client = DataInpi()
# Search patents (brevets) for a keyword
for record in client.records.search(query="Tesla", type=RecordType.PATENTS, limit=3):
print(record.id, record.detail_url)
# Search trademarks (marques)
for record in client.records.search(query="Apple", type=RecordType.BRANDS, limit=2):
print(record.id, record.score)
# Search companies in the RNE
item = client.records.search(query="Renault", type=RecordType.COMPANIES, limit=1).first()
if item:
print(item.id, item.detail_url)
# Typed error handling
try:
for r in client.records.search(query="innovation", type=RecordType.DRAWING_MODELS, limit=2):
print(r.id, r.detail_url)
except UpstreamError as e:
print(f"upstream issue: {e}")
print("exercised: records.search (patents, brands, companies, drawing_models)")
Full-text search across INPI databases: patents (brevets), trademarks (marques), companies (RNE entreprises), and industrial designs (dessins et modèles). Results are ranked by relevance and include metadata, applicant information, classifications, and links to detail pages and associated documents. Each record type returns type-specific fields.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| type | string | Database to search. |
| queryrequired | string | Search terms (name, applicant, SIREN, denomination, representative, keyword). |
| results_per_page | integer | Number of results per page (1-100). |
{
"type": "object",
"fields": {
"page": "Current page number",
"total": "Total number of matching records across all pages",
"results": "Array of search results with type-specific metadata, detail URLs, and document links",
"total_pages": "Total number of pages available",
"results_per_page": "Number of results returned per page"
},
"sample": {
"data": {
"page": 1,
"total": 1564,
"results": [
{
"id": "WO2020038318",
"score": 846.51,
"title": "PROCÉDÉ DE PRÉPARATION POUR DISQUE DE TURBINE TESLA",
"origin": "WO",
"pdf_url": "https://data.inpi.fr/brevets/WO2020038318#documents",
"abstract": "La présente invention concerne un procédé...",
"inventors": [
"JIN PU"
],
"applicants": [
"TECH XANADU OF RESONATORY SOLAR SYSTEMED CO LTD"
],
"detail_url": "https://data.inpi.fr/brevets/WO2020038318",
"application_date": 1566165600000,
"publication_date": 1582758000000,
"publication_kind": "A1",
"application_number": "CN2019101318",
"publication_number": "WO2020038318",
"classifications_ipcr": [
"C04B 35/80"
]
}
],
"total_pages": 313,
"results_per_page": 5
},
"status": "success"
}
}About the Inpi API
What the search endpoint returns
The POST search endpoint accepts a query string and an optional type parameter to restrict results to a single INPI database. Supported databases include brevets (patents), marques (trademarks), dessins et modèles (industrial designs), and RNE entreprises (company registrations). Omitting type runs the query across all four databases simultaneously. Each call returns a results array alongside total, page, total_pages, and results_per_page fields for deterministic pagination.
Result metadata
Each item in results carries type-specific metadata. For patents this includes applicant information, classification codes, and filing dates. For trademarks you get the denomination, owner, and registration status. Company records expose SIREN numbers, legal form, and representative data. Every result includes a detail_url and links to associated documents hosted on data.inpi.fr, so downstream workflows can fetch the full dossier without constructing URLs manually.
Pagination and filtering
Pagination is 1-based via the page integer parameter. The results_per_page parameter accepts values from 1 to 100, giving control over payload size and the number of round-trips needed to walk a large result set. The total field in every response reflects the complete match count across all pages, which is useful for estimating crawl volume before committing to full pagination.
The Inpi API is a managed, monitored endpoint for data.inpi.fr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when data.inpi.fr 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 data.inpi.fr 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?+
- Check trademark availability by querying the marques database with a brand name before filing
- Build a competitor patent landscape by searching brevets for a company's SIREN number
- Monitor new company registrations in the RNE by querying a denomination or representative name
- Retrieve filing and classification data for patents to feed a technology intelligence dashboard
- Cross-reference industrial design registrations against product launches using keyword queries
- Automate due-diligence checks on French companies by resolving SIREN numbers to registration metadata
| 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 INPI provide an official developer API for data.inpi.fr?+
What does the `type` parameter control, and what happens if I omit it?+
type restricts results to one INPI database: brevets, marques, dessins et modèles, or RNE entreprises. If you omit it, the search endpoint queries all four databases and returns interleaved results ranked by relevance. The results array still includes type-specific metadata per record so you can distinguish record types in a mixed result set.Is detail-page data (full patent claims, full trademark images, complete company filings) returned by the API?+
search endpoint returns metadata, applicant information, classifications, and a detail_url per record, but does not fetch the full dossier content. You can fork this API on Parse and revise it to add an endpoint that retrieves the detail page for a given record URL.How fresh is the data, and does the API cover historical records?+
Can I retrieve a list of all records in a database without a specific query term?+
query parameter is required, so a fully unfiltered dump is not directly supported. Broad queries (for example, a common word or a wildcard-style term) can approximate broad coverage, but systematic bulk export is not a designed use case of the search endpoint. You can fork this API on Parse and revise it to add a bulk-export endpoint if your use case requires full database enumeration.