french-company-check-v1

Legal identity and risk check for French companies. One request reconciles three public registries (SIRENE/RNE, BODACC, VIES) into a single verdict, with an action_required boolean a program can branch on.

Pocket Network service ID: french-company-check-v1. Supplier setup: /operators.

Endpoint

POST https://api.getcompanycheck.com/v1/company with a JSON body. All inputs are in the body; no header changes the answer. Other routes: GET / (service, version, endpoint list), GET /v1/health, GET /v1/version, GET /v1/capabilities, GET /v1/openapi.json (generated OpenAPI schema, request side only).

Request

curl -s -X POST https://api.getcompanycheck.com/v1/company \
  -H 'content-type: application/json' \
  -d '{"siren": "120027016", "directors_limit": 0}'
ParameterTypeDefaultMeaning
sirenstring—9-digit SIREN, Luhn-checked.
siretstring—14-digit SIRET (one establishment).
qstring, ≤ 200—Full-text search on company or director name.
include_insolvencybooltrueQuery BODACC.
include_vatbooltrueCheck the VAT number with VIES.
notices_limitint 0–203BODACC notices listed. Counts always cover all notices.
directors_limitint 0–253Officers listed. 0 omits them.
verboseboolfalseFull notice detail and officers' birth year.

Exactly one of siren, siret or q. A lookup by siren or siret only returns that exact company; a q search returns the best match and up to 4 other_matches.

Response

Every 200 carries the same keys, whatever the status. Real response, VIES timing out at the time:

{
  "service": "french-company-check-v1",
  "version": "1.0.0",
  "query": {
    "siren": "120027016",
    "include_insolvency": true,
    "include_vat": true,
    "notices_limit": 3,
    "directors_limit": 0,
    "verbose": false
  },
  "status": "found",
  "company": {
    "siren": "120027016",
    "siret_headquarters": "12002701600563",
    "legal_name": "INSTITUT NATIONAL DE LA STATISTIQUE ET DES ETUDES ECONOMIQUES",
    "display_name": "INSTITUT NATIONAL DE LA STATISTIQUE ET DES ETUDES ECONOMIQUES (INSEE)",
    "trade_name": null,
    "acronym": "INSEE",
    "legal_form_code": "7120",
    "naf_code": "84.11Z",
    "naf_code_2025": "84.11Y",
    "activity_section": "O",
    "state": "active",
    "incorporated_on": "1983-03-01",
    "closed_on": null,
    "size_category": "ETI",
    "headcount_bracket": "52",
    "establishments": {
      "total": 57,
      "open": 32
    },
    "address": {
      "full": "IMMEUBLE WHITE 88 AVENUE VERDIER 92120 MONTROUGE",
      "postal_code": "92120",
      "city": "MONTROUGE",
      "insee_code": "92049",
      "department": "92",
      "latitude": "48.816302544",
      "longitude": "2.3084504789"
    },
    "directors": [],
    "directors_total": 0,
    "vat_number": "FR85120027016",
    "vat_number_computed": "FR85120027016",
    "vat_number_agrees": true,
    "is_association": false,
    "is_sole_trader": false,
    "registry_updated_at": "2026-09-26T09:14:07"
  },
  "vat": null,
  "insolvency": {
    "notice_count": 0,
    "notices_examined": 0,
    "adverse_count": 0,
    "adverse_recent_count": 0,
    "adverse_last_published_on": null,
    "latest_adverse": null,
    "by_family": {},
    "accounts_filed": null,
    "notices": []
  },
  "complete": false,
  "action_required": true,
  "flags": [
    "partial_check",
    "source_degraded:vies"
  ],
  "match_count": 1,
  "match_count_is_lower_bound": false,
  "other_matches": [],
  "sources": {
    "recherche_entreprises": "ok",
    "bodacc": "ok",
    "vies": "timeout"
  },
  "data_as_of": "2026-09-27T10:55:57+00:00"
}
KeyMeaning
statusfound, ambiguous (several matches for q), not_found, source_unavailable (primary registry did not answer), error (internal fault).
action_requiredtrue whenever flags is non-empty. The field to branch on.
completefalse as soon as one source is neither ok nor skipped. A degraded check never reads as clear.
sourcesPer source: ok, skipped, unavailable, rate_limited, timeout or error.
companyIdentity: legal name, SIREN, head-office SIRET, legal form, NAF code, state (active, ceased, unknown), incorporation and closing dates, size, address, officers, VAT number (upstream and computed from the SIREN).
insolvencyBODACC. Counts over the full history: notice_count (upstream total), adverse_count, adverse_recent_count (last 5 years), by_family (sums to notice_count), latest adverse notice. From the notices_examined latest notices (at most 20): accounts_filed (last filing, null if none among them) and the first notices_limit notices.
vatVIES: number, valid, checked_on, registered_name. null when not checked or not answered.
match_countUpstream total of matches, not the page size. Capped at 10000 by the registry; match_count_is_lower_bound is then true.
data_as_ofTime the answer was assembled (UTC). Upstream answers are cached up to 1 h (VIES: 24 h).

Flags

FlagSet when
partial_checkAt least one source did not answer; see source_degraded:*.
source_degraded:<source>That source is unavailable, rate_limited, timeout or error.
primary_source_unavailableThe company registry did not answer; nothing else was checked.
no_matchThe registry answered and found nothing.
multiple_matchesA q search matched more than one company.
company_ceasedThe company is ceased.
state_unknownThe registry gives no administrative state.
adverse_notices_foundBODACC holds at least one collective procedure, conciliation, deregistration or professional recovery notice, however old.
adverse_notices_recentOne of them was published in the last 5 years.
vat_number_invalidVIES says the VAT number is not valid.
vat_number_mismatchThe registry's VAT number differs from the one computed from the SIREN.
no_accounts_filedBODACC has notices for the company but no accounts filing in its whole history.
internal_errorUnexpected fault on our side; status is error.

Errors and time bounds

Never a 5xx. A bad request gets a 400 of the form {"service", "error": {"code", "message"}}, with code one of invalid_siren, invalid_siret, invalid_request. Direct calls to api.getcompanycheck.com are limited to 60 per minute per IP address, in bursts of 10: beyond, a 429 of the same form with code rate_limited and a Retry-After header. Every request answers within 9 s: a source still pending is cut off and reported as timeout. VIES gets 2.5 s, one retry included.

Sources

SourceProvides
recherche-entreprises.api.gouv.frIdentity from SIRENE (INSEE) and officers from the RNE.
BODACCLegal notices: insolvency procedures, deregistrations, conciliations, accounts filings.
VIESIntra-EU VAT number validity. Often unavailable; the answer is then flagged, not failed.

Registries change continuously: two answers at different times may differ.

Personal data

Officers' names and roles come from the French trade register, which publishes them, but they remain personal data. At most 3 are returned by default; directors_limit: 0 omits them; the birth year appears only with verbose: true. On Pocket Network the answer transits through third-party suppliers and gateways.

The request transits through them too. A q search on a person's name sends that name, in clear, to the Pocket suppliers and gateways relaying the call, and on to recherche-entreprises.api.gouv.fr. Our request logs record the kind of input, never the value of q nor any company data, but we cannot speak for third parties. Prefer siren or siret when you have one.