A row is either a registry_number (SIREN) with an optional ref, or a row of a
resolve answer sent back exactly as you received it. A
matched resolve row is enriched with its company; an ambiguous, not_found or
invalid one comes back with its own status and a message, since there is no single
company behind it. Any other column on a SIREN row, siren for instance, makes the row
invalid.
fields chooses the columns for the whole batch. Name a field, or a theme to get all of
its fields:
| Theme | Fields |
|---|---|
identity | name, legal_form, registered_on, status, ceased_on |
activity | activity |
size | workforce, size_category |
head_office | head_office_address, head_office_coordinates |
establishments | active_establishments |
events | events |
legal | collective_proceeding, last_accounts_filed, last_business_transfer |
Without fields you get name, status, activity, workforce and
head_office_address. The answer's top-level fields lists what every row carries.
Codes come with their INSEE label, in French; activity also carries its scheme, and its
label is null unless the scheme is naf2008. events is the latest event of each kind
you list in event_kinds, newest first, each with occurred_on, source and bulk. When
you leave event_kinds out it is every legal_entity.* kind of the
timeline but filed accounts
(legal_entity.accounts_filed and its corrections), which you get by naming them.
Establishment event kinds are not available here. A bulk event is returned, with
bulk: true. events is the raw log, as the timeline is: a correction or a
cancellation is a kind of its own and is not applied, so a legal_entity.insolvency.opened
can be there beside the legal_entity.insolvency.opened.cancelled that withdrew it, on a
row whose collective_proceeding says open: false. Only the legal fields below apply
corrections.
The legal fields are read from the notices of the BODACC, France's legal gazette, with
the gazette's history included, bulk or not, and corrections applied: a cancellation
withdraws the notice it names, a correction replaces it, and a court's retraction of an
opening, which names no notice, withdraws the company's latest opening before it.
collective_proceedingis an object on every row read in full.opensays whether an insolvency proceeding is open;procedureissafeguard,accelerated_safeguard,reorganisation,liquidationorcrisis_exit;stageis where the last judgment left it,opened,planorclosed. A company under an adopted plan hasstage: planandopen: true, since the proceeding goes on under it. A liquidation closed and then resumed is the same proceeding opened again:stage: opened, with its firstopened_on.opened_onis the date the proceeding opened, and can benullwhileopenistruewhen the gazette gave no opening this API could read;updated_onandnotice_urlare the date and the notice of the last judgment. With no insolvency notice,openisfalseand the restnull.last_accounts_filedis the latest filing of accounts:published_on, the bulletin's date, andclosing_on, the last day of the fiscal year filed. Not the figures.nullwhen none is recorded.last_business_transferis the latest sale of a business the company was party to:direction(soldoracquired),occurred_on, andcounterparties, the other party's registry numbers.nullwhen none is recorded.
Each carries source: "bodacc" and a notice_url, the notice to cite. A notice about a
company that was partially disclosed in the registry, or that the registry did not hold
yet, when the notice was read is recorded without its values, and stays so: the dates and
open still count, but procedure, closing_on, counterparties or notice_url can be
null on a row whose partially_disclosed is false. The BODACC covers
companies in the trade register only. For an association or a sole trader outside it,
open: false and a null means no notice was published, not that there was nothing to
publish.
Each enriched row carries a sources object that names the source of each group of
fields, null on a row that was not enriched:
{
"sources": {
"registry": "insee_sirene",
"data_updated_at": "2026-09-14T08:30:00Z",
"head_office_data_updated_at": "2026-09-01T12:00:00Z",
"legal": { "registry": "bodacc", "published_on": "2026-06-02" }
}
}registryisinsee_sirene, the source of every value buteventsand thelegalfields.data_updated_atis the registry's timestamp for the company's record, not an import time, andhead_office_data_updated_atthat of the head-office establishment's record, which the département and coordinates come from; it isnullwhen no head-office field was selected.legalnames the BODACC as the source of thelegalfields:registry: "bodacc"andpublished_on, the bulletin date of the latest notice behind the legal fields you selected.published_onisnullwhen no notice is behind them — or only notices recorded without their values, as above — andlegalitself isnullwhen you selected no legal field. On a row withpartial: true, anullpublished_oncan also mean the legal fields were not read in time: send the row again before you conclude there is no notice.- Each event carries its own
sourceandoccurred_on, and each legal fact itssource, dates andnotice_url.
When you republish these values, give each group its source and date — Sirene with
data_updated_at, the BODACC with published_on — rather than the time of your call.
A company whose registry record is partially disclosed comes back with
partially_disclosed: true, and the masked values are null: its name and street address
(postal_code and city survive), the head office's département and coordinates, and the
rename and head-office-move events are left out of events. When only the head office is
partially disclosed, its département and coordinates and those two events are withheld the
same way, and the row also says partially_disclosed: true when the head office was read,
that is when you selected a head-office field or events. The flag says whether something
on this row is masked, so a null on a true row may be withheld by law rather than
absent; the full card's partially_disclosed describes the company alone. The legal
fields follow the company's status only: those of a partially disclosed company keep
open, stage, direction and their dates, and lose procedure, closing_on,
counterparties and notice_url, which are null, while a disclosed company whose head
office is masked keeps them.
A ceased company is enriched, with status: ceased. A valid SIREN the registry does not
hold is not_found.
A batch spends at most 10 seconds reading. A row the budget did not reach comes back
not_processed, with partial: true and a message; it is never reported as
not_found. A row read only in part comes back enriched with partial: true, and the
parts not read are null. Send either kind of row again. The batch is refused with 400 invalid_request only when it
is not a batch (not JSON, no rows array, an empty one, more than 500 rows), when fields
or event_kinds is empty or names something outside the lists above, or when
event_kinds is sent without events in fields. A country other than fr is a 404. One batch runs at a time per
organization, resolve and enrich together, and each server answers one at a time: a
second one gets 429 concurrency_limited, even when batches are sent one after another.
Retry after the Retry-After seconds the response gives, which differ between the two
cases: do not hard-code them. For a file larger than one batch, submit a
file job instead.
A batch is one call, however many rows it holds: on Free, one of the month's 1 000
lookups. Its rows are counted separately, on every plan, against the month's agent rows,
shared with resolve: 1 000 on Free, 25 000 on Pro, 250 000 on Scale. Each row enriched or
not_found is one row, and a SIREN repeated in a batch counts each time. invalid rows,
resolve rows passed through (a resolve not_found included), and not_processed or
partial rows are not counted. The rows your unfinished file jobs hold count as used. As on
resolve, a batch admitted with rows left can take
you past the allowance by up to its own size, and the next batch is refused with
402 quota_exceeded until the start of the next calendar month, UTC.
Call it from a server with a secret key holding the read scope; a publishable fk_pub
key is refused with 403 public_key_forbidden when it holds read, and with
403 insufficient_scope when it does not. Authentication covers both.