EN
Copied
API

Recherche d'entreprise

GET /api/company/lookup renvoie l'identité légale d'une entreprise française à partir d'un SIREN, d'un SIRET, d'un numéro de TVA FR, d'un nom d'entreprise ou du nom de la personne qui la dirige, en synchrone. Conçu pour préremplir un formulaire.

Recherche d'entreprise

GET /api/company/lookup transforme ce que saisit un utilisateur en fiche d'entreprise contrôlée, en un seul appel synchrone : raison sociale, forme juridique, code NAF, adresse du siège, numéro de TVA intracommunautaire et son statut VIES, dirigeant, contrôles de clé.

Usage type : un formulaire d'inscription ou de facturation où l'utilisateur tape un SIREN, un SIRET, le début d'un nom d'entreprise ou son propre nom, et votre code remplit tous les autres champs.

Fonctionne avec les clés API comme avec la session navigateur.

Sources

Donnée Source
Identité, forme juridique, NAF, siège, établissement, entrepreneur individuel Registre SIRENE (INSEE), mis à jour chaque jour à partir du flux de modifications de l'INSEE (l'INSEE publie généralement les changements avec un à deux jours de décalage)
Dirigeant d'une société Même registre, lu au moment de la requête ; uniquement sur recherche par identifiant et sur recherche par personne
Statut TVA (tva_statut) VIES (Commission européenne), interrogé au moment de la requête

GET /api/company/lookup

Paramètre Type Notes
q chaîne, obligatoire sauf si nom est fourni Un SIREN (9 chiffres), un SIRET (14 chiffres), un numéro de TVA français (FR + 11 chiffres) ou un nom d'entreprise. Espaces, points, tirets et soulignés sont ignorés dans les identifiants : 995 260 130 fonctionne.
nom chaîne, facultatif À la place de q : nom de famille d'une personne, de 2 à 120 caractères. Renvoie les entreprises que cette personne dirige. Voir Recherche par personne.
prenom chaîne, facultatif Avec nom : prénom de cette personne, 120 caractères au plus.
naf chaîne, facultatif Filtre d'activité d'une recherche par nom ou par personne : un ou plusieurs codes NAF séparés par des virgules, par exemple 66.22Z. Voir Filtre d'activité.
naissance chaîne, facultatif Avec nom : année et mois de naissance de la personne (AAAA-MM, par exemple 1975-04), ou année seule (AAAA). Sert à départager les homonymes. Voir Départager les homonymes.
limit entier de 1 à 10 5 par défaut. Nombre maximum de candidats pour une recherche par nom ou par personne. Un identifiant renvoie au plus une entreprise.

Lecture de q :

curl -s "https://outsend.xyz/api/company/lookup?q=410409460" \
  -H "Authorization: Bearer osk_..."

Réponse : 200 OK

Réponse réelle pour le SIREN 410409460 :

{
  "requete": "410409460",
  "type_requete": "siren",
  "nb_resultats": 1,
  "resultats": [
    {
      "siren": "410409460",
      "siret_siege": "41040946000756",
      "raison_sociale": "AUCHAN HYPERMARCHE",
      "sigle": null,
      "forme_juridique": {
        "code": "5710",
        "libelle": "SAS, société par actions simplifiée"
      },
      "naf": {
        "code": "47.11F",
        "libelle": "Hypermarchés"
      },
      "date_creation": "1997-01-03",
      "etat": "actif",
      "adresse_siege": {
        "rue": "200 RUE DE LA RECHERCHE",
        "code_postal": "59491",
        "ville": "VILLENEUVE-D'ASCQ",
        "code_commune": "59009"
      },
      "etablissement": null,
      "dirigeant": {
        "type": "personne_morale",
        "nom": "AUCHAN RETAIL FRANCE",
        "prenoms": null,
        "qualite": "Président de SAS"
      },
      "naissance_concorde": null,
      "tva_intracom": "FR20410409460",
      "tva_statut": "inconnu",
      "tva_verifiee_le": null,
      "controles": {
        "siren_luhn": true,
        "siret_siege_luhn": true
      }
    }
  ]
}

tva_statut vaut ici inconnu parce que le service VIES français était saturé au moment de l'appel ; voir Statut TVA.

Une recherche sans correspondance renvoie 200 avec nb_resultats: 0 et une liste resultats vide.

Recherche par personne

Envoyez nom et prenom à la place de q pour obtenir les entreprises qu'une personne dirige : les entreprises individuelles immatriculées à ce nom, et les sociétés où cette personne est inscrite comme dirigeant. La réponse a la même forme qu'une recherche par nom, avec type_requete: "personne", et dirigeant désigne cette personne dans chaque résultat.

curl -s "https://outsend.xyz/api/company/lookup?nom=arnault&prenom=bernard&naf=64.20Z&limit=1" \
  -H "Authorization: Bearer osk_..."

Réponse réelle, le 09/10/2026 :

{
  "requete": "bernard arnault",
  "type_requete": "personne",
  "nb_resultats": 1,
  "resultats": [
    {
      "siren": "582110987",
      "siret_siege": "58211098700010",
      "raison_sociale": "CHRISTIAN DIOR",
      "sigle": null,
      "forme_juridique": {
        "code": "5800",
        "libelle": "Société (autre forme)"
      },
      "naf": {
        "code": "64.20Z",
        "libelle": "Activités des sociétés holding"
      },
      "date_creation": "1958-01-01",
      "etat": "actif",
      "adresse_siege": {
        "rue": "30 AVENUE MONTAIGNE",
        "code_postal": "75008",
        "ville": "PARIS",
        "code_commune": "75108"
      },
      "etablissement": null,
      "dirigeant": {
        "type": "personne_physique",
        "nom": "ARNAULT",
        "prenoms": "BERNARD",
        "qualite": "Président du conseil d’administration"
      },
      "naissance_concorde": null,
      "tva_intracom": "FR69582110987",
      "tva_statut": "inconnu",
      "tva_verifiee_le": null,
      "controles": {
        "siren_luhn": true,
        "siret_siege_luhn": true
      }
    }
  ]
}

Comment la personne est reconnue :

Limites :

Départager les homonymes

Si vous connaissez la naissance de la personne, envoyez naissance avec nom et prenom : l'année et le mois (naissance=1949-03), ou l'année seule (naissance=1949). Chaque résultat porte alors naissance_concorde :

naissance_concorde Sens
true Le registre connaît la naissance de ce dirigeant et elle concorde avec la vôtre
false Le registre connaît sa naissance et elle diffère
null On ne peut pas le dire : le registre ne donne pas la naissance de cette personne, il n'en donne que l'année alors que vous avez envoyé un mois de la même année, ou naissance n'a pas été envoyé

Mesuré le 09/10/2026 : nom=arnault&prenom=bernard renvoie d'abord une entreprise individuelle de Charente-Maritime ; avec naissance=1949-03, les cinq résultats sont des sociétés parisiennes marquées true, dont CHRISTIAN DIOR et LVMH ; avec naissance=1961-01, quatre sociétés de Valence marquées true, puis l'entreprise individuelle marquée false.

Quand naissance_concorde vaut null partout, ou quand vous n'avez pas la naissance, chaque résultat porte de quoi choisir à l'œil sans autre appel : raison_sociale, forme_juridique, naf, date_creation, adresse_siege (rue, code postal, ville), siren et dirigeant.qualite. Resserrez d'abord la liste avec naf.

Filtre d'activité

naf ne garde que les entreprises dont l'activité principale (le champ naf.code de la réponse) est l'un des codes envoyés. Il s'applique aux recherches par nom et par personne, avant limit : une entreprise du bon métier n'est pas évincée par des homonymes mieux classés d'un autre métier.

Mesuré le 09/10/2026 : q=dior&limit=3 renvoie DIOR, DIOR SOUSSI et DIOR MONTRES (activités 68.20B, 68.20B, 46.18Z) ; q=dior&naf=64.20Z&limit=3 renvoie CHRISTIAN DIOR en premier.

Champs

Champ Notes
siren 9 chiffres
siret_siege SIRET du siège, ou null si aucun n'est connu
raison_sociale Dénomination. Pour un entrepreneur individuel : prénom et nom (nom d'usage en priorité s'il existe)
sigle Sigle, ou null
forme_juridique Catégorie juridique INSEE : code (ex. 5710) et libelle
naf Activité principale : code NAF/APE et libelle. libelle vaut null pour les codes d'anciennes nomenclatures
date_creation AAAA-MM-JJ
etat actif ou ferme (entreprise cessée)
adresse_siege rue, code_postal, ville, code_commune (code INSEE de la commune), tels que le registre les écrit. null si inconnue
etablissement Seulement si q est un SIRET : l'établissement demandé (siret, est_siege, rue, code_postal, ville). null sinon, ou si cet établissement est introuvable (l'entreprise elle-même est tout de même renvoyée)
dirigeant type (personne_physique ou personne_morale), nom (nom de famille, ou dénomination pour une personne morale), prenoms, qualite. Voir ci-dessous
naissance_concorde true, false ou null. Renseigné seulement sur une recherche par personne avec naissance, null dans tous les autres cas. Voir Départager les homonymes
tva_intracom Numéro de TVA intracommunautaire calculé depuis le SIREN
tva_statut valide, non_attribue ou inconnu. Voir Statut TVA
tva_verifiee_le Horodatage ISO de la réponse VIES, null quand le statut est inconnu
controles Résultat des contrôles de clé. Voir Contrôles

dirigeant n'est renseigné que :

Sur une recherche par nom, dirigeant vaut null pour les sociétés. Il peut aussi valoir null quand le registre n'indique aucun dirigeant, ou quand l'information n'a pas pu être obtenue à temps.

Statut TVA

tva_intracom est toujours calculé (FR + clé + SIREN). Ce calcul ne dit rien de l'attribution réelle du numéro : chaque numéro est donc vérifié auprès de VIES.

tva_statut Sens
valide VIES confirme que le numéro est actif. C'est le seul cas où vous pouvez considérer le numéro de TVA comme valide.
non_attribue VIES répond que le numéro n'est pas valide : jamais attribué, ou plus actif (par exemple une entreprise non immatriculée à la TVA).
inconnu VIES n'a pas répondu à temps (le service français est souvent saturé). La vérification se poursuit en arrière-plan : relancer la même requête quelques secondes plus tard donne en général le statut définitif. Ne considérez jamais inconnu comme valide.

Dans la requête, VIES dispose de 0,8 seconde au plus. S'il n'a pas répondu dans ce délai, la vérification en arrière-plan continue ses relances pendant 20 secondes au plus. Les réponses définitives sont conservées 24 h (valide) et 6 h (non_attribue) ; inconnu n'est jamais conservé.

Sur une recherche par nom, VIES n'est pas interrogé dans la requête : le statut de chaque candidat vient de ce cache, il vaut donc souvent inconnu, et une vérification en arrière-plan part pour chaque candidat absent du cache. Flux recommandé : recherche par nom, choix du candidat par l'utilisateur, puis nouvel appel avec le SIREN de ce candidat pour obtenir le statut vérifié.

Contrôles

Champ Contrôle
siren_luhn Clé de Luhn du SIREN
siret_siege_luhn Clé du SIRET du siège : Luhn, ou règle propre à La Poste (SIREN 356000000, somme des 14 chiffres multiple de 5). null quand aucun SIRET de siège n'est connu

Les mêmes contrôles s'appliquent à q avant toute recherche : un identifiant qui échoue est refusé en 400.

Cache

Les données du registre pour une requête donnée sont gardées 10 minutes. Le statut TVA suit son propre cache (ci-dessus) : un résultat dont le statut était inconnu est revérifié à l'appel suivant.


Erreurs

400 Bad Request

{
  "detail": {
    "code": "siret_invalide",
    "message": "Ce SIRET n'est pas valide : sa clé de contrôle est incorrecte. Vérifiez les 14 chiffres.",
    "suggestion": {
      "siret_siege": "41040946000756",
      "raison_sociale": "AUCHAN HYPERMARCHE"
    }
  }
}

C'est la réponse réelle à q=41040946000750 (dernier chiffre erroné). Basez votre logique sur detail.code, qui est stable ; detail.message est une phrase lisible que vous pouvez afficher à l'utilisateur.

code Cas
siren_invalide 9 chiffres dont la clé est incorrecte
siret_invalide 14 chiffres dont la clé est incorrecte. Quand les 9 premiers chiffres forment un SIREN valide et connu, suggestion donne le SIRET du siège et la raison sociale de cette entreprise
tva_invalide FR suivi d'autre chose que 11 chiffres, ou clé qui ne correspond pas au SIREN
format_invalide Uniquement des chiffres, mais ni 9 ni 14, nom de plus de 120 caractères, ou q et nom envoyés ensemble
requete_trop_courte Moins de 2 caractères, ou prenom envoyé sans nom
naf_invalide naf contient autre chose qu'un code NAF, ou plus de 20 codes
naissance_invalide naissance n'est ni AAAA-MM ni AAAA, ou désigne un mois ou une année impossibles

401 / 403

401 sans identifiants valides. Voir Authentification.

429 Too Many Requests

Les limites s'appliquent par compte (toutes clés et session navigateur confondues) :

Chaque appel compte, y compris ceux qui sont refusés. La réponse porte un en-tête Retry-After (en secondes) :

{ "detail": "Trop de requêtes. Réessayer dans 43s." }

Temps de réponse

Pour un SIREN, un SIRET ou un numéro de TVA, la vérification TVA attend VIES 0,8 s au plus, puis indique un statut inconnu. La première recherche d'une entreprise peut prendre jusqu'à 2 s environ, car son dirigeant est obtenu à ce moment ; la même entreprise est ensuite servie depuis le cache. Une recherche par nom n'attend pas VIES. Mesurée sur 15 noms via l'API publique, mots très courants compris, une recherche par nom a répondu en 0,09 à 0,44 s de bout en bout au premier appel, et en 0,04 à 0,11 s quand elle est répétée. Avec naf, la même recherche a pris 0,06 à 0,26 s sur 3 requêtes ; sur un mot seul très courant, elle s'arrête au bout de 0,7 s environ et renvoie ce qu'elle a trouvé jusque-là.

Une recherche par personne attend les dirigeants de société : 1,1 à 1,6 s au premier appel, mesuré sur 7 recherches dans l'application le 09/10/2026, puis 0,01 s environ pendant 10 minutes quand elle est répétée. Avec naissance, le premier appel a pris de 1,1 à 1,7 s sur 5 recherches le même jour. Elle n'attend jamais plus de 2 s environ, et n'attend pas VIES.

Et ensuite