Skip to content
firmus.shdocs

Every page's text, headings and title. Code samples are not indexed.

Masked records

Why some records are withheld, and what a masked one still tells you.

Some records come back with a name of null, an address of null and a partially_disclosed of true. Nothing has gone wrong, the record has not been deleted, and retrying will not fill it in. The register publishes it that way, and it is the law that says so.

What it is

A person registered as a sole proprietor is a company in the register and a private individual everywhere else. French law lets them object to their details being published, and INSEE honours the objection by publishing the record in reduced form — a state Sirene calls diffusion partielle. The record stays in the register, keeps its identifier and keeps answering; the fields that would identify the person do not travel with it.

It is common rather than rare, and it is concentrated in the population most likely to be looked up by name: sole proprietors and very small businesses.

What it looks like

{
  "country_code": "fr",
  "registry_number": "999999999",
  "kind": "sole_proprietor",
  "name": null,
  "legal_form": { "code": "1000", "scheme": "insee_cj_2018" },
  "activity": { "code": null, "scheme": null },
  "workforce": { "range_code": null, "scheme": null, "year": null },
  "size_category": { "code": null, "scheme": null, "year": null },
  "status": "active",
  "registered_on": null,
  "ceased_on": null,
  "registered_address": {
    "line": null,
    "postal_code": "75009",
    "city": "PARIS 9"
  },
  "partially_disclosed": true,
  "data_updated_at": "2026-07-15T07:12:33Z",
  "country_data": null
}

The shape is unchanged. Every key is still present — a masked record is not a shorter document — and the withheld fields are null in the same way any unpublished field is null. Both establishments and legal entities carry the flag, and one company can have some establishments masked and others not.

Less disappears than you might expect. Masking is applied at commune granularity, so postal_code and city survive and only the street does not. The legal form is not masked, and neither is data_updated_at — a masked record still tells you how current it is.

You will never see a masking marker in a response. The source writes [ND] into the text fields it withholds; that marker is removed on the way in, and partially_disclosed carries the meaning instead. Do not string-match it.

Which fields disappear is the register's decision and can differ between records. Treat partially_disclosed as the flag and the nulls as the data; do not hard-code a list of which fields a masked record has.

What it still tells you

A masked record is not an empty one. It is proof that an entity with this identifier is registered, which is often the whole question:

  • The identifier is valid and names a real registration.
  • The record's existence, and whether it is still current, are answerable.
  • Its commune is published, even though its street is not.
  • Its establishments are still listed and still countable.

So verifying a SIREN a customer typed works on a masked record, and so does placing them in a town. Displaying the company's name does not: the name is not published to anyone.

What to do about it

  • Check partially_disclosed before showing a name. A missing name on a masked record is a fact to state, not a loading state to spin on.
  • Say why. "Not published by the register" is a better empty cell than a blank one, which reads to a user as your product being broken.
  • Do not treat it as an error. It is a 200. Counting these as failures makes an otherwise healthy integration look broken.
  • Expect it in search. Autocomplete can only match on what is published, so a masked company cannot be found by name. It is still found by its identifier.
  • Do not fill the gap from elsewhere. The person exercised a right.