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 :
FR+ 11 chiffres : numéro de TVA. La clé à 2 chiffres doit correspondre au SIREN qu'il contient, puis la recherche porte sur ce SIREN.- 9 chiffres : SIREN. 14 chiffres : SIRET. Les deux doivent passer leur contrôle de clé (voir Contrôles).
- Toute autre suite de chiffres : refusée (
format_invalide). - Tout le reste : recherche par nom, de 2 à 120 caractères. Les candidats sont des entreprises distinctes (une par SIREN), meilleure correspondance d'abord.
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 :
- La casse, les accents et les traits d'union sont ignorés. Chaque mot de
nomdoit figurer dans le nom de la personne (nom de naissance ou nom d'usage), et chaque mot deprenomparmi ses prénoms : une personne inscrite comme « Jean Louis » est trouvée avecprenom=jean. Les résultats dont le nom et le premier prénom correspondent exactement passent en tête. prenomest facultatif, mais un nom de famille seul désigne bien plus de personnes quelimitne peut en renvoyer. Envoyez les deux.- Entrepreneurs individuels et sociétés alternent dans la liste : aucune des deux natures n'est évincée par
limit. qetnomne s'envoient pas ensemble (format_invalide).
Limites :
- Seules les entreprises en activité sont renvoyées.
- Deux personnes qui portent le même nom reviennent ensemble. Voir Départager les homonymes.
- Les personnes dont le registre ne diffuse pas les données ne sont pas renvoyées.
- Les dirigeants de société sont lus au moment de la requête, dans une limite de 2 secondes. Quand ils n'ont pas pu être lus, la réponse ne contient que les entrepreneurs individuels et rien ne le signale : cette réponse n'est pas gardée en cache, renvoyer la requête donne donc la liste complète.
dirigeant.prenomsdonne tous les prénoms que le registre connaît pour le dirigeant d'une société, et le premier seulement pour un entrepreneur individuel.
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é |
- Les résultats
truepassent en tête, puis lesnull, puis lesfalse.limits'applique après ce classement. - Les résultats
falsene sont pas retirés : une date du registre peut être fausse. À vous de décider de les écarter. - La comparaison se fait au mois près quand vous envoyez
AAAA-MM, à l'année près avecAAAA. Le registre ne connaît jamais le jour. - La réponse ne contient jamais la date de naissance, seulement ce champ.
- Avec
naissance, les entreprises d'un homonyme né à cette période sont cherchées dans tout le registre, pas seulement parmi les premiers résultats du nom : la bonne personne remonte même quand le nom est très courant. - Quand une société compte deux dirigeants du même nom,
dirigeantest celui dont la naissance concorde. - La naissance d'un dirigeant de société est presque toujours connue. Celle d'un entrepreneur individuel l'est moins souvent : sur 12 entrepreneurs individuels d'une recherche du 09/10/2026, 7 avaient une naissance connue. Pour eux, attendez-vous à des
null. - Sans
nom,naissanceest contrôlé puis ignoré. Une valeur mal formée est refusée avecnaissance_invalide: seulsAAAA-MM(mois de 01 à 12) etAAAAsont acceptés, de 1900 à l'année en cours.
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.
- Un code, ou plusieurs séparés par des virgules, 20 au plus :
naf=66.22Z,66.21Z. 66.22Z,6622Zet66.22zdésignent le même code. Toute autre forme est refusée avecnaf_invalide.- Sur un SIREN, un SIRET ou un numéro de TVA,
nafest ignoré : l'entreprise est renvoyée quelle que soit son activité.
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 :
- pour un entrepreneur individuel (
personne_physique,qualite: "Entrepreneur individuel"), quel que soit le type de requête ; - pour une société, quand la requête est un SIREN, un SIRET ou un numéro de TVA : le premier dirigeant inscrit au registre ;
- pour une société, sur une recherche par personne : le dirigeant qui porte le nom demandé.
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) :
- 60 requêtes par minute ;
- 5 000 requêtes par jour.
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
- Authentification : créer une clé API
- Module SIRENE : extraction en volume depuis le même registre