# French company data from a SIREN or SIRET

Source: https://veriport.io/docs/french-company-data (published 2026-10-24)

`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`.

```bash
curl "https://veriport.io/api/v1/fr/company/356000000"
```

```bash
curl -H "Authorization: Bearer vp_live_YOUR_KEY" "https://veriport.io/api/v1/fr/company/35600000000048"
```

```json
{
  "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?

`updatedOn` carries the dates the sources give (registry, INSEE, RNE); `source.fetchedOn` is when we asked. A cached answer is at most 7 days old unless marked stale.

## Read next

- [Reference: French company registry](https://veriport.io/docs/fr-company)
- [API Sirene: what the free government API gives you](https://veriport.io/guides/api-sirene-what-the-free-government-api-gives-you)
- [Reference: EU VAT number validation](https://veriport.io/docs/vat-validation)

## Sources

- API Recherche d’entreprises — open search API over INSEE Sirene and INPI RNE data (no key, 7 requests a second), OpenAPI document — https://recherche-entreprises.api.gouv.fr/docs/ (2026-10-24)
- INSEE — API Sirene 3.11 (siren/{siren}, siret/{siret}), key-based through the INSEE API portal, 30 requests a minute — https://portail-api.insee.fr/ (2026-10-24)
- INPI — Registre national des entreprises (RNE), open data on company officers (dirigeants) re-served by the Recherche d’entreprises API — https://www.inpi.fr/le-registre-national-des-entreprises (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 — https://www.insee.fr/fr/information/2406147 (2026-10-24)
