Enrichir des données clients

Ajouter des données d’entreprise à ta liste de clients.

1

Associer les entreprises

curl -G "https://handelsregister.ai/api/v1/fetch-organization" \
  -H "x-api-key: TA_CLE_API" \
  --data-urlencode 'q=Hetzner Online GmbH Gunzenhausen'
1{2  "entity_id": "94eb910fef13f94585c48c263fa446d4",3  "name": "Hetzner Online GmbH",4  "status": "ACTIVE",5  "registration": {6    "court": "Ansbach",7    "register_type": "HRB",8    "register_number": "6089"9  },10  "address": {11    "house_number": "25",12    "street": "Industriestraße",13    "postal_code": "91710",14    "city": "Gunzenhausen",15    "county": "Weißenburg-Gunzenhausen",16    "state": "Bayern",17    "country": "DEU",18    "coordinates": {19      "latitude": 49.12483,20      "longitude": 10.7805221    }22  },23  "meta": {24    "request_credit_cost": 5,25    "credits_remaining": 14526  }27}
200 · Exemple de réponse : correspondance par nom et ville (extrait)
Si l’API ne trouve aucune entreprise, tu reçois HTTP 404. Sans mode IA, cela ne coûte rien. Marque le client pour vérification. Utilise le mode IA (ai_search=on-default) de façon ciblée pour les entrées approximatives ; il coûte 20 crédits en plus, même sans correspondance.
2

Récupérer de nombreuses entreprises

Script Python
import csv
import time

import requests

API = "https://handelsregister.ai/api/v1/fetch-organization"
HEADERS = {"x-api-key": "TA_CLE_API", "Accept": "application/json"}
PER_MINUTE = 60  # limite de fetch-organization


def lookup(row):
    # Tribunal du registre plus numéro de registre est unique ; sinon nom et ville
    q = row["register"] or f'{row["name"]} {row["city"]}'
    headers = {**HEADERS, "Idempotency-Key": f'client-{row["id"]}'}
    for attempt in range(5):
        response = requests.get(API, params={"q": q}, headers=headers, timeout=120)
        if response.status_code == 429:
            time.sleep(int(response.headers.get("Retry-After", "10")))
        elif response.status_code in (408, 500, 502, 503, 504):
            time.sleep(30 * (attempt + 1))
        else:
            break
    return response


spent = 0
with open("clients.csv", newline="") as source, open("clients_enrichis.csv", "w", newline="") as target:
    reader = csv.DictReader(source)
    writer = csv.DictWriter(target, fieldnames=reader.fieldnames + ["entity_id", "tribunal_registre", "numero_registre"])
    writer.writeheader()
    for row in reader:
        response = lookup(row)
        if response.status_code == 402:
            print("Pas assez de crédits, exécution arrêtée")
            break
        data = response.json()
        spent += data.get("meta", {}).get("request_credit_cost", 0)
        if response.status_code == 200:
            registration = data.get("registration") or {}
            row["entity_id"] = data["entity_id"]
            row["tribunal_registre"] = registration.get("court")
            row["numero_registre"] = f'{registration.get("register_type")} {registration.get("register_number")}'
        writer.writerow(row)
        time.sleep(60 / PER_MINUTE)

print(f"Consommé : {spent} crédits")
1{2  "entity_id": "94eb910fef13f94585c48c263fa446d4",3  "name": "Hetzner Online GmbH",4  "meta": {5    "request_credit_cost": 0,6    "credits_remaining": 1457  }8}
200 · Exemple de réponse : requête répétée avec la même Idempotency-Key (extrait)
Le SDK Python fournit enrich, un enrichissement prêt à l’emploi pour les fichiers CSV, JSON et Excel.
3

Garder les coûts à l’œil

Coûts et limites
Quoi Crédits
Profil d’entreprise avec les données de base 5
Chaque fonctionnalité, uniquement si elle renvoie des données 1 à 80
Mode IA, même sans correspondance +20
Mode temps réel, pour chaque récupération en direct réussie +10

Limite : 60 requêtes par minute. Le coût réel d’une requête figure dans chaque réponse sous meta.request_credit_cost.

Pièges fréquents

Ensuite