{"openapi":"3.1.0","info":{"title":"OpenSirene API","description":"Registre d'entreprises françaises — données ouvertes (SIRENE, BODACC, INPI…).","version":"1.0.0"},"paths":{"/v1/naf-codes":{"get":{"tags":["Référentiels"],"summary":"Liste les codes NAF rév.2 (référentiel INSEE)","description":"Liste les codes NAF rév.2 (référentiel INSEE des activités).\n\n~700 codes au total. Pas de pagination : on retourne la liste complète.\nFiltre `?q=...` : ILIKE sur le libellé OU préfixe sur le code (ex: `?q=62` pour la division 62).","operationId":"get_naf_codes_v1_naf_codes_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100,"description":"Filtre ILIKE sur libellé OU préfixe sur code","default":"","title":"Q"},"description":"Filtre ILIKE sur libellé OU préfixe sur code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_CodeLibelleRef_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/formes-juridiques":{"get":{"tags":["Référentiels"],"summary":"Liste les formes juridiques INSEE","description":"Liste les formes juridiques INSEE (catégories juridiques des unités légales).\n\n~200 formes au total. Pas de pagination.\nFiltre `?q=...` : ILIKE sur le libellé OU préfixe sur le code.","operationId":"get_formes_juridiques_v1_formes_juridiques_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100,"description":"Filtre ILIKE sur libellé OU préfixe sur code","default":"","title":"Q"},"description":"Filtre ILIKE sur libellé OU préfixe sur code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_CodeLibelleRef_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/establishments/{siret}":{"get":{"tags":["Establishments"],"summary":"Fiche établissement par SIRET","description":"Retourne la fiche complète d'un établissement par SIRET.\n\nInclut :\n- Identité de l'établissement (dénomination usuelle, enseignes filtrées des NULL)\n- Adresse complète avec géolocalisation (latitude/longitude depuis BAN)\n- Conventions collectives applicables (IDCC + libellé)\n- Mini-objet `company` pour éviter un second appel à `/v1/companies/{siren}`\n\nLimites :\n- Les champs `departement` et `region` ne sont pas retournés (data gap SIRENE).","operationId":"get_establishment_v1_establishments__siret__get","parameters":[{"name":"siret","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]{14}$","description":"SIRET sur 14 chiffres","title":"Siret"},"description":"SIRET sur 14 chiffres"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstablishmentDetail"}}}},"404":{"description":"Établissement introuvable"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{siren}":{"get":{"tags":["Companies"],"summary":"Fiche entreprise enrichie par SIREN","description":"Retourne la fiche complète d'une entreprise par SIREN.\n\nInclut :\n- Identité (dénomination, forme juridique résolue, NAF résolue, tranche d'effectif)\n- Établissement siège (résumé)\n- Jusqu'à 100 établissements actifs (triés date de création décroissante)\n- Mandataires actifs (date de fin nulle)\n\nLimites :\n- `effectif_exact` est souvent NULL (peu d'entreprises le déclarent à l'INSEE).\n- Pour les entreprises > 100 établissements, seuls les 100 plus récents sont retournés ;\n  le total est exposé via `etablissements_actifs_count`.","operationId":"get_company_v1_companies__siren__get","parameters":[{"name":"siren","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]{9}$","description":"SIREN sur 9 chiffres","title":"Siren"},"description":"SIREN sur 9 chiffres"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDetail"}}}},"404":{"description":"Entreprise introuvable"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"get":{"tags":["Search"],"summary":"Recherche full-text + SIREN exact d'entreprises","description":"Recherche d'entreprises par texte libre ou SIREN exact.\n\nStratégie de matching :\n- Si `q` est exactement 9 chiffres → lookup SIREN exact (1 résultat ou 0).\n- Sinon → full-text français sur `nom_complet`, fallback ILIKE pour les fautes de frappe.\n\nTri : pertinence (ts_rank) décroissante puis nom_complet alphabétique.\n\nLimites :\n- `meta.total` est calculé via `COUNT(*)`, ce qui peut être lent sur des requêtes\n  très larges (ex: `q=\"société\"` qui matche des millions de lignes). À optimiser si besoin.","operationId":"search_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Texte libre OU SIREN exact (9 chiffres)","title":"Q"},"description":"Texte libre OU SIREN exact (9 chiffres)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Numéro de page","default":1,"title":"Page"},"description":"Numéro de page"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Résultats par page","default":25,"title":"Per Page"},"description":"Résultats par page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnvelope_CompanySearchResult_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["system"],"summary":"Health","description":"Vérifie la disponibilité de l'API et de la base de données.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdresseSchema":{"properties":{"numero":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Numero"},"voie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voie"},"complement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Complement"},"code_postal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Postal"},"commune_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Code"},"commune_libelle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Libelle"},"code_cedex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Cedex"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","title":"AdresseSchema"},"CodeLibelleRef":{"properties":{"code":{"type":"string","title":"Code","description":"Code court (ex: '5710', '20.42Z')"},"libelle":{"type":"string","title":"Libelle","description":"Libellé humain en français"}},"type":"object","required":["code","libelle"],"title":"CodeLibelleRef","description":"Référence résolue {code, libelle} (NAF, forme juridique, tranche effectif…)."},"CollectiveAgreementSchema":{"properties":{"idcc":{"type":"string","title":"Idcc"},"libelle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Libelle"}},"type":"object","required":["idcc"],"title":"CollectiveAgreementSchema"},"CompanyDetail":{"properties":{"siren":{"type":"string","title":"Siren"},"denomination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination"},"sigle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sigle"},"nom_complet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nom Complet"},"forme_juridique":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"activite_principale":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"date_creation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Creation"},"date_fermeture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Fermeture"},"etat_administratif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Etat Administratif"},"categorie_entreprise":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Categorie Entreprise"},"tranche_effectif":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"effectif_exact":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Effectif Exact"},"economie_sociale_solidaire":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Economie Sociale Solidaire"},"societe_mission":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Societe Mission"},"capital_social":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capital Social"},"diffusible":{"type":"boolean","title":"Diffusible"},"siege":{"anyOf":[{"$ref":"#/components/schemas/EstablishmentSummary"},{"type":"null"}]},"etablissements_actifs_count":{"type":"integer","minimum":0.0,"title":"Etablissements Actifs Count","default":0},"etablissements":{"items":{"$ref":"#/components/schemas/EstablishmentSummary"},"type":"array","title":"Etablissements"},"dirigeants":{"items":{"$ref":"#/components/schemas/DirigeantSchema"},"type":"array","title":"Dirigeants"}},"type":"object","required":["siren","diffusible"],"title":"CompanyDetail"},"CompanySearchResult":{"properties":{"siren":{"type":"string","title":"Siren"},"denomination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination"},"nom_complet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nom Complet"},"forme_juridique":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"activite_principale":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"etat_administratif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Etat Administratif"},"siege":{"anyOf":[{"$ref":"#/components/schemas/EstablishmentSummary"},{"type":"null"}]}},"type":"object","required":["siren"],"title":"CompanySearchResult","description":"Item de réponse pour /v1/search."},"CompanySummary":{"properties":{"siren":{"type":"string","title":"Siren"},"denomination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination"}},"type":"object","required":["siren"],"title":"CompanySummary"},"DirigeantSchema":{"properties":{"type":{"type":"string","title":"Type"},"nom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nom"},"prenom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prenom"},"denomination_pm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination Pm"},"siren_pm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Siren Pm"},"role":{"type":"string","title":"Role"},"date_debut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Debut"},"date_fin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Fin"}},"type":"object","required":["type","role"],"title":"DirigeantSchema"},"EstablishmentDetail":{"properties":{"siret":{"type":"string","title":"Siret"},"siren":{"type":"string","title":"Siren"},"nic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nic"},"denomination_usuelle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination Usuelle"},"enseignes":{"items":{"type":"string"},"type":"array","title":"Enseignes"},"est_siege":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Est Siege"},"etat_administratif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Etat Administratif"},"date_creation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Creation"},"date_fermeture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Fermeture"},"activite_principale":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"tranche_effectif":{"anyOf":[{"$ref":"#/components/schemas/CodeLibelleRef"},{"type":"null"}]},"adresse":{"$ref":"#/components/schemas/AdresseSchema"},"conventions_collectives":{"items":{"$ref":"#/components/schemas/CollectiveAgreementSchema"},"type":"array","title":"Conventions Collectives"},"company":{"$ref":"#/components/schemas/CompanySummary"}},"type":"object","required":["siret","siren","adresse","company"],"title":"EstablishmentDetail"},"EstablishmentSummary":{"properties":{"siret":{"type":"string","title":"Siret"},"est_siege":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Est Siege"},"etat_administratif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Etat Administratif"},"denomination_usuelle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination Usuelle"},"enseigne":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Enseigne"},"adresse_courte":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adresse Courte"},"code_postal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Postal"},"commune_libelle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Libelle"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","required":["siret"],"title":"EstablishmentSummary"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ListEnvelope_CodeLibelleRef_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CodeLibelleRef"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/ListMeta"}},"type":"object","required":["data","meta"],"title":"ListEnvelope[CodeLibelleRef]"},"ListMeta":{"properties":{"total":{"type":"integer","minimum":0.0,"title":"Total"}},"type":"object","required":["total"],"title":"ListMeta"},"PageMeta":{"properties":{"page":{"type":"integer","minimum":1.0,"title":"Page"},"per_page":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Per Page"},"total":{"type":"integer","minimum":0.0,"title":"Total"},"total_pages":{"type":"integer","minimum":0.0,"title":"Total Pages","default":0}},"type":"object","required":["page","per_page","total"],"title":"PageMeta"},"PaginatedEnvelope_CompanySearchResult_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CompanySearchResult"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PageMeta"}},"type":"object","required":["data","meta"],"title":"PaginatedEnvelope[CompanySearchResult]"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}