Un seul endpoint pour tout : entreprise, fiche Google, emails. Passez votre recherche en texte libre, comme sur la page web.
L'endpoint /api/search nécessite une clé API valide.
X-API-Key: cw_votre_cle_api_ici
GET /api/search?q=Mon+Entreprise+21000+Dijon&api_key=cw_votre_cle_api_ici
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ètre | Type | Description |
|---|---|---|
| q requis | string | Entrée brute : nom de l'entreprise + adresse (URL encodé) |
# 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"
{
"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"
}
}
| Champ | Type | Description |
|---|---|---|
| query | string | Entrée brute envoyée |
| parsed | object | Résultat du parsing (nom, nom_clean, code_postal, commune) |
| total | int | Nombre total de résultats entreprise |
| results | array | Liste des entreprises trouvées |
| object|null | Fiche Google Business du 1er résultat | |
| emails | object|null | Emails trouvés sur le site web |
| from_cache | bool | true si le résultat provient du cache |
results[])| Champ | Type | Description |
|---|---|---|
| nom | string | Nom complet |
| siren | string | Numéro SIREN (9 chiffres) |
| siret_siege | string | SIRET du siège (14 chiffres) |
| forme_juridique | string | Code forme juridique |
| libelle_forme_juridique | string | Libellé (SAS, SARL, etc.) |
| date_creation | string | Date de création (YYYY-MM-DD) |
| activite_principale | string | Code NAF |
| libelle_activite | string | Libellé de l'activité |
| tranche_effectif | string | Code tranche effectif |
| libelle_tranche_effectif | string | Libellé effectif (ex : 10 à 19) |
| adresse_ligne1 | string | Adresse (voie) |
| adresse_ligne2 | string | Code postal + commune |
| dirigeants | array | Liste {nom, qualite} |
| etat_administratif | string | A = Actif, C = Cessé |
| categorie_entreprise | string | PME, ETI, GE |
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)Contient emails (liste d'adresses) et source (page d'origine). Vaut null si pas de site web ou aucun email trouvé.
| Code | Signification | Dé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. |
{
"error": "Clé API requise. Utilisez le header X-API-Key ou le paramètre api_key."
}
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)." }
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.