Paris Open Data API
Free Paris open data API with no key: 490 city datasets on the Opendatasoft Explore v2.1 API, with per-field types and French descriptions returned in the catalogue itself. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Paris Open Data API?
opendata.paris.fr is the City of Paris open data portal, running the Opendatasoft Explore v2.1 API with no key required. It publishes around 490 datasets covering urban planning, trees, transport, culture and municipal services, and the catalogue endpoint returns each dataset's full field schema alongside its metadata.
Opendatasoft is the third major open data platform after CKAN and Socrata, and it is dominant in France. Its distinguishing feature shows up immediately in the catalogue response: every dataset arrives with a `fields` array giving each column's machine name, human label, type and — often — a French sentence explaining what it means. On CKAN you would have to download a resource to discover its columns; here the schema is part of the catalogue, which makes automated dataset selection genuinely practical.
The Explore v2.1 API also gives you ODSQL, a SQL-shaped query language, on the records endpoint at `/catalog/datasets/{id}/records`, with `where`, `group_by`, `select` and `order_by` clauses evaluated server-side. Paris's own catalogue leans heavily towards planning and environment — PLU zoning perimeters, the street tree register, cycle counts — with descriptions in French only. Note that responses are gzipped whether or not you ask for it, so an HTTP client that does not decompress transparently will hand you binary.
Quick facts
- Base URL
https://opendata.paris.fr/api/explore/v2.1- Authentication
- No API key for public datasets. An Opendatasoft API key exists only for private datasets on paid portals.
- Rate limit
- Anonymous requests are throttled per IP by the platform. Cache catalogue responses, which change slowly.
- Pricing
- Free. Most Paris datasets are under Open Database Licence or Licence Ouverte; check each dataset's metadata.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Paris Open Data API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List datasets in the Paris catalogue
GET https://opendata.paris.fr/api/explore/v2.1/catalog/datasets?limit=1
curl 'https://opendata.paris.fr/api/explore/v2.1/catalog/datasets?limit=1'const res = await fetch("https://opendata.paris.fr/api/explore/v2.1/catalog/datasets?limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://opendata.paris.fr/api/explore/v2.1/catalog/datasets?limit=1", timeout=20)
res.raise_for_status()
print(res.json()){
"total_count": 490,
"results": [
{
"visibility": "domain",
"fields": [
{
"name": "objectid",
"description": null,
"annotations": {},
"label": "objectid",
"type": "int"
},
{
"name": "n_sq_sp",
"description": "Numéro unique du polygone",
"annotations": {},
"label": "n_sq_sp",
"type": "int"
},
{
"name": "nom_pag",
"description": "Nom du périmètre sur le plan",
"annotations": {},
"label": "nom_pag",
"type": "text"
},
{
"name": "a02_nom",
"description": "Nom du périmètre dans l'annexe II du règlement du PLU",
"annotations": {},
"label": "A02_nom",
"type": "text"
},
{
"name": "a02_duree",
"description": "Durée du périmètre indiquée dans l'annexe II du règlement du PLU",
"annotations": {},
"label": "A02_duree",
"type": "text"
},
{
"name": "a02_zone",
"description": "Zone du PLU dans laquelle se trouve le périmètre, indiquée dans l'annexe II du règlement du PLU",
"annotations": {},
"label": "A02_zone",
"type": "text"
},
{
"name": "a02_surf",
"description": "Surface de plancher maximale autorisable indiquée dans l'annexe II du règlement du PLU",
"annotations": {},
"label": "A02_surf",
"type": "text"
},Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | query | Optional | Datasets per page, up to 100. 1 |
offset | query | Optional | Pagination offset, capped at 10,000 total results. 20 |
where | query | Optional | ODSQL filter over catalogue metadata. publisher like 'Ville de Paris' |
order_by | query | Optional | Sort clause over metadata fields. modified desc |
select | query | Optional | Restrict which metadata fields come back — the fix for oversized catalogue responses. dataset_id,metas |
group_by | query | Optional | Aggregate the catalogue, for example counting datasets per theme. theme |
Response fields
total_countinteger- Datasets in the catalogue — 490 at the time of testing.
results[].dataset_idstring- Slug used to build the records endpoint, `/catalog/datasets/{dataset_id}/records`.
results[].fieldsarray- Full column schema: machine `name`, human `label`, `type` and often a French `description` per column.
results[].fields[].typestring- `int`, `text`, `date`, `geo_point_2d`, `geo_shape` and similar — geo types mark spatially queryable columns.
results[].visibilitystring- `domain` for public datasets.
results[].metasobject- Grouped metadata including theme, licence, publisher, record count and modification date.
What you can build with the Paris Open Data API
- Discover which Paris datasets contain geographic columns before mapping them
- Build a French-language city data explorer
- Query municipal records server-side with ODSQL instead of downloading CSVs
- Select datasets automatically by inspecting their field types
- Track changes to the city's planning and environment data
Common errors and how to fix them
Binary or mojibake response
The API gzips responses regardless of Accept-Encoding.
Fix: Use a client that decompresses transparently, or handle `Content-Encoding: gzip` yourself.
400 with an ODSQL parse error
Malformed `where` or `select` clause.
Fix: String literals use single quotes; field names come from the `fields` array, not the human labels.
offset beyond 10000 rejected
Deep pagination is capped by the platform.
Fix: Narrow with `where`, or use the export endpoint for full extracts.
Huge catalogue payloads
Every dataset's full field schema is included by default.
Fix: Add `select=dataset_id,metas` when you only need identifiers and summary metadata.
Paris Open Data API — frequently asked questions
Is the Paris open data API free?
Yes. Public datasets need no key. Opendatasoft API keys apply only to private datasets on portals that have them, which Paris's public catalogue does not.
What is ODSQL?
Opendatasoft's SQL-shaped query language, passed as `where`, `select`, `group_by` and `order_by` parameters. It runs on the server, so you can aggregate a large dataset without transferring its rows.
How do I query the rows of a dataset?
Take `dataset_id` from the catalogue and call `/api/explore/v2.1/catalog/datasets/{dataset_id}/records` with the same ODSQL parameters. The catalogue endpoint returns metadata only.
Does the same API work on other Opendatasoft portals?
Yes. The Explore v2.1 path is identical across every Opendatasoft-hosted portal, so only the hostname changes — the same client works against hundreds of French and international public sector catalogues.
Tools that pair with this API
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
Paris Open Data is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.