Documentation API

Un seul endpoint pour tout : entreprise, fiche Google, emails. Passez votre recherche en texte libre, comme sur la page web.

Sommaire

Authentification

L'endpoint /api/search nécessite une clé API valide.

🔑 Clé API requise — Transmettez votre clé via l'une des deux méthodes suivantes :

Header HTTP (recommandé)

X-API-Key: cw_votre_cle_api_ici

Paramètre de requête

GET /api/search?q=Mon+Entreprise+21000+Dijon&api_key=cw_votre_cle_api_ici
Les clés API sont générées sur demande à contact@apprendre.co. Chaque clé possède une limite totale de requêtes et un quota horaire.
GET /api/search Recherche complète : entreprise + Google + emails

Passez une entrée brute (nom + adresse) comme sur la page web. L'API parse automatiquement, interroge le registre national, scrape la fiche Google Business et recherche les emails — tout en un seul appel.

Paramètres

ParamètreTypeDescription
q requis string Entrée brute : nom de l'entreprise + adresse (URL encodé)

Exemples

# Nom + adresse complète
curl -H "X-API-Key: cw_votre_cle" \
  "http://localhost:8000/api/search?q=FEVRE-VIELLARD+PAYSAGE+-+50+Route+De+Dijon+21470+Brazey-En-Plaine"

# Nom + code postal
curl -H "X-API-Key: cw_votre_cle" \
  "http://localhost:8000/api/search?q=ESE+France+SAS+71530+Crissey"

# Juste le nom
curl -H "X-API-Key: cw_votre_cle" \
  "http://localhost:8000/api/search?q=ESE+France"

Réponse

{
  "query": "FEVRE-VIELLARD PAYSAGE - 50 Route De Dijon 21470 Brazey-En-Plaine",
  "parsed": {
    "nom": "FEVRE-VIELLARD PAYSAGE",
    "nom_clean": null,
    "code_postal": "21470",
    "commune": "Brazey-En-Plaine"
  },
  "total": 1,
  "from_cache": false,
  "results": [
    {
      "nom": "FEVRE-VIELLARD PAYSAGE",
      "siren": "123456789",
      "siret_siege": "12345678900012",
      "forme_juridique": "5710",
      "libelle_forme_juridique": "SAS",
      "date_creation": "2010-01-15",
      "activite_principale": "81.30Z",
      "libelle_activite": "Services d'aménagement paysager",
      "tranche_effectif": "11",
      "libelle_tranche_effectif": "10 à 19 salariés",
      "adresse_ligne1": "50 Route De Dijon",
      "adresse_ligne2": "21470 Brazey-En-Plaine",
      "commune": "Brazey-En-Plaine",
      "code_postal": "21470",
      "departement": "21",
      "region": "Bourgogne-Franche-Comté",
      "dirigeants": [
        { "nom": "Jean Dupont", "qualite": "Président" }
      ],
      "nombre_etablissements": 1,
      "nombre_etablissements_ouverts": 1,
      "etat_administratif": "A",
      "categorie_entreprise": "PME"
    }
  ],
  "google": {
    "found": true,
    "name": "Fevre-Viellard Paysage",
    "address": "50 Rte de Dijon, 21470 Brazey-en-Plaine",
    "phone": "03 80 XX XX XX",
    "website": "https://www.example.com",
    "rating": 4.5,
    "reviews_count": 12,
    "category": "Paysagiste",
    "hours": { "lundi": "8:00-17:00", "mardi": "8:00-17:00" }
  },
  "emails": {
    "found": true,
    "emails": ["contact@example.com", "info@example.com"],
    "source": "https://www.example.com/contact"
  }
}

Réponse détaillée

Racine

ChampTypeDescription
querystringEntrée brute envoyée
parsedobjectRésultat du parsing (nom, nom_clean, code_postal, commune)
totalintNombre total de résultats entreprise
resultsarrayListe des entreprises trouvées
googleobject|nullFiche Google Business du 1er résultat
emailsobject|nullEmails trouvés sur le site web
from_cachebooltrue si le résultat provient du cache

Champs entreprise (results[])

ChampTypeDescription
nomstringNom complet
sirenstringNuméro SIREN (9 chiffres)
siret_siegestringSIRET du siège (14 chiffres)
forme_juridiquestringCode forme juridique
libelle_forme_juridiquestringLibellé (SAS, SARL, etc.)
date_creationstringDate de création (YYYY-MM-DD)
activite_principalestringCode NAF
libelle_activitestringLibellé de l'activité
tranche_effectifstringCode tranche effectif
libelle_tranche_effectifstringLibellé effectif (ex : 10 à 19)
adresse_ligne1stringAdresse (voie)
adresse_ligne2stringCode postal + commune
dirigeantsarrayListe {nom, qualite}
etat_administratifstringA = Actif, C = Cessé
categorie_entreprisestringPME, ETI, GE

Fiche Google (google)

Contient les données publiques Google Business : name, address, phone, website, rating, reviews_count, category, hours. Vaut null si aucune fiche trouvée ou aucun résultat entreprise.

Emails (emails)

Contient emails (liste d'adresses) et source (page d'origine). Vaut null si pas de site web ou aucun email trouvé.

Codes d'erreur

CodeSignificationDétail
401 Non authentifié Clé API manquante. Ajoutez le header X-API-Key ou le paramètre api_key.
403 Accès refusé Clé invalide, désactivée, résiliée, ou quota épuisé.
422 Paramètre manquant Le paramètre q est requis.
500 Erreur serveur Erreur interne.

Format des erreurs

{
  "error": "Clé API requise. Utilisez le header X-API-Key ou le paramètre api_key."
}

Limites & quotas

Chaque clé API est configurée avec :

Lorsqu'un quota est atteint, l'API retourne une erreur 403 :

{ "error": "Quota horaire atteint (100/h). Réessayez plus tard." }
{ "error": "Limite totale atteinte (1000 requêtes)." }

Cache

Les résultats sont mis en cache 30 jours (configurable via CACHE_TTL_DAYS). Le champ from_cache indique si le résultat provient du cache.

Les résultats vides ne sont jamais mis en cache.