French company data from a SIREN or SIRET
GET /fr/company/{id} turns a French identifier into one normalised record built from the public registries: the open Recherche d’entreprises API (INSEE Sirene and INPI RNE data, no key) and, when the operator has configured a key, the INSEE Sirene API itself. Every answer says which source answered, when, and whether it came from the cache.
- Accepts a SIREN (9 digits), a SIRET (14 digits) or a French VAT number (its SIREN is used); spaces and dots allowed. The Luhn key is checked first (La Poste’s establishments follow their own rule): a bad key is a 400 and no registry is asked.
- Returns: name, legal form (INSEE catégorie juridique, code and label), NAF code and section, status (active / ceased), creation and cessation dates, headquarters address, headcount band and year, company category (PME / ETI / GE), employer flag, establishment counts, the VAT number computed from the SIREN, officers where the open INPI data lists them.
- Cache: 7 days fresh; when the registries do not answer, an answer up to 30 days old is served with
source.cache.stale: true; older ones are deleted. - Cost: 1 call per answer, cached or live; 404 and 503 are free. 20 calls a day without a key, 100 a month with a free key; bulk (100 identifiers) on the monthly plan.
One call
A SIREN gives the company and its headquarters; a SIRET gives the same plus the establishment asked for under establishment.
curl "https://veriport.io/api/v1/fr/company/356000000"curl -H "Authorization: Bearer vp_live_YOUR_KEY" "https://veriport.io/api/v1/fr/company/35600000000048"{
"siren": "356000000",
"name": "LA POSTE",
"legalName": "LA POSTE",
"acronym": null,
"legalForm": {
"code": "5510",
"label": "SA nationale à conseil d’administration"
},
"naf": {
"code": "53.10Z",
"section": "H",
"sectionLabel": "Transportation and storage"
},
"status": "active",
"createdOn": "1991-01-01",
"ceasedOn": null,
"headcountBand": {
"code": "53",
"label": "10,000 employees or more",
"year": "2023"
},
"companyCategory": {
"code": "GE",
"label": "Large enterprise (GE)",
"year": "2023"
},
"employer": true,
"diffusion": "O",
"address": {
"street": "9 RUE DU COLONEL PIERRE AVIA",
"postalCode": "75015",
"city": "PARIS",
"cityCode": "75115",
"country": "FR",
"full": "9 RUE DU COLONEL PIERRE AVIA 75015 PARIS"
},
"headquarters": {
"siret": "35600000000048",
"isHeadquarters": true,
"status": "active",
"naf": "53.10Z",
"address": {
"street": "9 RUE DU COLONEL PIERRE AVIA",
"postalCode": "75015",
"city": "PARIS",
"cityCode": "75115",
"country": "FR",
"full": "9 RUE DU COLONEL PIERRE AVIA 75015 PARIS"
},
"createdOn": "2014-01-01",
"closedOn": null,
"tradeName": null,
"headcountBand": null
},
"establishment": null,
"establishments": {
"total": 12345,
"open": 9876
},
"vatNumber": {
"computed": "FR39356000000",
"activeNumbers": [
"FR39356000000"
],
"note": "computed from the SIREN; validate it with GET /vat/validate before relying on it."
},
"officers": [
{
"type": "person",
"name": "EXEMPLE",
"firstNames": "PRÉNOM",
"role": "Président du conseil d’administration",
"birthYear": null,
"nationality": "Française",
"siren": null
}
],
"updatedOn": {
"registry": "2026-10-20",
"insee": "2026-10-19",
"rne": "2026-10-18"
},
"source": {
"primary": "recherche_entreprises",
"insee": false,
"openData": [
"recherche_entreprises",
"inpi_rne"
],
"fetchedOn": "2026-10-24T09:14:03Z",
"cache": {
"hit": false,
"ageSeconds": 0,
"stale": false
}
}
}Where each field comes from
| Field | Source | Note |
|---|---|---|
| name, legalForm, naf, status, dates, headcountBand, companyCategory, employer, address, establishments | INSEE Sirene (through the open search API, or the INSEE API with a key) | Codes are returned as published; labels for the common legal forms and the 16 headcount bands, the NAF section letter for every code. |
| officers | INPI RNE open data (re-served by the open search API) | Null when the source lists none or when the answer was built from INSEE alone. Persons: name, first names, role, birth year, nationality as published; companies: name, role, SIREN. |
| vatNumber.computed | Computed: FR + (12 + 3 × (SIREN mod 97)) mod 97 + SIREN | A computation, not a registration check: ask /vat/validate whether VIES knows it. |
| source.primary / insee / openData / fetchedOn / cache | This service | primary: insee when the open search API failed and a key let the INSEE API answer alone. |
Rate limits upstream, and what they mean for you
The open search API allows 7 requests a second shared by all its users; the INSEE API 30 a minute per application. Each instance paces its calls to stay inside those limits: a single lookup waits up to a few seconds for a slot, then answers from the cache (marked stale) or a 503 upstream_unavailable with Retry-After; a 429 from a registry pauses that registry for the time it asks. The bulk endpoint goes through the same pacing one identifier at a time, serving cached answers without waiting, so a list of 100 takes up to about fifteen seconds when nothing is cached.
Personal data
Sole traders (entrepreneurs individuels) are natural persons, and officers’ names are personal data, even when the register publishes them. Units that opposed publication (diffusion: "P") have their address withheld by the sources; units whose publication is restricted are not returned at all (404). Answers are cached at most 30 days and then deleted; use the data for the purpose you collected the identifier for (invoicing, KYB, supplier checks), not for prospecting lists.
What it is not
Not a Kbis extract: the legal proof of a company’s registration is the extract issued by the register (INPI / greffes), not an API answer. No financial statements, no beneficial owners (that register is not open), no court decisions. Not affiliated with INSEE, INPI or DINUM.
Questions
- Do I need an INSEE key?
- No. The service works on the open search API alone; the operator’s INSEE key, when configured, fills gaps and keeps answering when the search API is down.
- How fresh is the data?
updatedOncarries the dates the sources give (registry, INSEE, RNE);source.fetchedOnis when we asked. A cached answer is at most 7 days old unless marked stale.
20 calls a day without a key.
Try it without a keySources
- API Recherche d’entreprises — open search API over INSEE Sirene and INPI RNE data (no key, 7 requests a second), OpenAPI document — DINUM / Annuaire des Entreprises, consulted 2026-10-24
- INSEE — API Sirene 3.11 (siren/{siren}, siret/{siret}), key-based through the INSEE API portal, 30 requests a minute — INSEE, consulted 2026-10-24. Called only when INSEE_SIRENE_API_KEY is set; never from this build.
- INPI — Registre national des entreprises (RNE), open data on company officers (dirigeants) re-served by the Recherche d’entreprises API — INPI, consulted 2026-10-24
- INSEE — Nomenclature d’activités française (NAF rév. 2) and the legal-category (catégorie juridique) and headcount-band code lists — INSEE, consulted 2026-10-24