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 ou d'un nom, 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 ou le début d'un nom d'entreprise, 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
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 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.
limit entier de 1 à 10 5 par défaut. Nombre maximum de candidats pour une recherche par nom. 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"
      },
      "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.

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
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, ou nom de plus de 120 caractères
requete_trop_courte Moins de 2 caractères

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.

Et ensuite