Accueil/Blog/Développeurs
Développeurs

API Risk Scoring : Intégrer la Due Diligence dans son ERP/CRM

Comment intégrer une API de risk scoring dans un ERP, CRM ou marketplace. Use cases, authentification, webhooks, code Python/curl.

Code et intégration API
L'équipe RiskSonnar · 2026-06-01 · 9 min

L'intégration d'une API de risk scoring dans un système d'information change l'économie de la due diligence : au lieu de vérifier les fournisseurs un par un dans une interface dédiée, le scoring s'exécute automatiquement à chaque création de contact CRM, à chaque ouverture de fournisseur ERP, à chaque inscription marketplace. Ce guide technique présente les use cases, les patterns d'intégration, l'authentification et des exemples concrets en Python et curl.

Pourquoi intégrer plutôt qu'utiliser l'interface web

Volume et automatisation

Une PME qui contractualise avec 200 fournisseurs par an peut se contenter d'une interface web. Une plateforme marketplace qui onboarde 200 vendeurs par jour ne peut pas. L'API permet de traiter le volume sans charge humaine.

Cohérence des données

Quand le scoring s'exécute depuis l'ERP, le résultat est stocké directement dans la fiche fournisseur. Pas de copier-coller, pas de scoring perdu, pas d'incohérence entre l'outil de DD et la base de référence.

Workflows automatisés

Un score < 50 peut déclencher automatiquement : notification au compliance officer, suspension de la fiche fournisseur, blocage des paiements en attente, escalade au management. C'est impossible en mode interface manuelle.

Architecture type d'une intégration

Voici l'architecture standard recommandée pour une intégration robuste :

[ERP/CRM] ───► [Backend client] ───► [API RiskSonnar] ───► [Sources données]
                       │                      │
                       │                      ▼
                       │             [Webhook /score-changed]
                       └──────────────────────┘

Trois flux principaux :

  1. Scan synchrone : à la création d'un fournisseur, le backend client appelle l'API et bloque le formulaire jusqu'à réception du score (60s max)
  2. Scan asynchrone par batch : un cron quotidien envoie les fournisseurs nouveaux ou modifiés en CSV bulk, reçoit les résultats par fichier
  3. Webhook événementiel : RiskSonnar pousse les changements de score vers le backend client (procédure collective détectée, sanction ajoutée, etc.)
Gagnez 3 jours sur chaque due diligence
24 sources officielles, scoring IA, rapport en 60 secondes. À partir de 9,90 €.
Essayer →

Authentification — Bearer token

L'API RiskSonnar utilise un Bearer token simple, à inclure dans le header HTTP de chaque requête :

Authorization: Bearer rk_live_xxxxxxxxxxxxxxxxxxxxxxxx

Bonnes pratiques :

  • Stocker le token dans un secret manager (AWS Secrets Manager, Vault, Doppler) — jamais en dur dans le code
  • Utiliser un token de test (rk_test_) en environnement de staging, et un token live (rk_live_) uniquement en production
  • Rotation : régénérer le token tous les 90 jours minimum
  • Scoping : créer plusieurs tokens si plusieurs équipes utilisent l'API, pour pouvoir révoquer indépendamment

Endpoints essentiels

POST /api/v1/scan — scan synchrone

curl -X POST https://api.risksonnar.com/api/v1/scan \
  -H "Authorization: Bearer $RK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Attijariwafa Bank",
    "country": "MA"
  }'

Réponse type (60 secondes) :

{
  "analysis_id": "abc-123-def",
  "score_global": 72,
  "rating": "B",
  "decision": "approve_with_conditions",
  "summary": "Etablissement bancaire majeur, regule par BAM...",
  "sources_count": 24,
  "alerts": [],
  "report_pdf_url": "https://www.risksonnar.com/verify/abc-123-def"
}

POST /api/v1/scan/bulk — scan par batch CSV

Pour un volume > 50 entités, utiliser le bulk pour éviter le rate limiting :

curl -X POST https://api.risksonnar.com/api/v1/scan/bulk \
  -H "Authorization: Bearer $RK_TOKEN" \
  -F "file=@suppliers.csv"

Le CSV doit avoir les colonnes name et country. La réponse contient un job_id à interroger ensuite via GET /api/v1/scan/bulk/{job_id}.

GET /api/v1/person/{slug} — recherche dirigeant

Pour vérifier un dirigeant et récupérer toutes ses sociétés :

curl https://api.risksonnar.com/api/v1/person/thibaud-assier \
  -H "Authorization: Bearer $RK_TOKEN"

Permet de détecter les nominees professionnels (ex. dirigeant cumulant 6 536 sociétés).

POST /api/v1/webhooks — créer un abonnement

Pour recevoir les événements en push :

curl -X POST https://api.risksonnar.com/api/v1/webhooks \
  -H "Authorization: Bearer $RK_TOKEN" \
  -d '{
    "url": "https://erp.client.com/risksonnar-webhook",
    "events": ["scan.completed", "score.changed", "sanction.detected"]
  }'

Exemple Python — intégration ERP

import os
import requests

RK_TOKEN = os.environ["RISKSONNAR_TOKEN"]
RK_BASE = "https://api.risksonnar.com/api/v1"

def score_supplier(name: str, country: str = "FR") -> dict:
    # Score un fournisseur, retourne le rapport complet.
    response = requests.post(
        f"{RK_BASE}/scan",
        headers={"Authorization": f"Bearer {RK_TOKEN}"},
        json={"name": name, "country": country},
        timeout=90,
    )
    response.raise_for_status()
    return response.json()

def on_supplier_created(supplier):
    # Hook ERP appele a la creation d'un fournisseur.
    result = score_supplier(supplier.legal_name, supplier.country)
    supplier.risk_score = result["score_global"]
    supplier.risk_rating = result["rating"]
    supplier.risk_decision = result["decision"]
    supplier.risk_report_url = result["report_pdf_url"]
    supplier.save()
    if result["score_global"] < 50:
        notify_compliance(supplier, result)
        supplier.status = "blocked_pending_review"
        supplier.save()

Vérification HMAC des webhooks

Chaque webhook envoyé par RiskSonnar inclut une signature HMAC-SHA256 dans le header X-RiskSonnar-Signature. Il est obligatoire de vérifier cette signature pour rejeter les requêtes forgées :

import hmac, hashlib

def verify_webhook(body: bytes, signature: str, secret: str) -> bool:
    expected = "sha256=" + hmac.new(
        secret.encode(), body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

@app.post("/risksonnar-webhook")
async def webhook_handler(request):
    body = await request.body()
    signature = request.headers.get("X-RiskSonnar-Signature", "")
    if not verify_webhook(body, signature, WEBHOOK_SECRET):
        return {"status": "invalid_signature"}, 401
    payload = json.loads(body)
    handle_event(payload)
    return {"status": "ok"}

Patterns d'intégration par use case

Use case 1 — Marketplace B2B

Onboarding d'un nouveau vendeur. Le scan s'exécute pendant que le vendeur remplit le reste du formulaire (~3 min). Si le score < 50 à la fin du formulaire, le compte est créé en statut "review" et un humain valide. Sinon, validation automatique.

Use case 2 — ERP achats

Tout fournisseur créé dans l'ERP est scoré au moment de la création. Le score est stocké comme attribut. Un cron mensuel re-scane les 100 fournisseurs avec le plus de paiements pour détecter les dégradations.

Use case 3 — CRM commercial

À la qualification d'un prospect (lead → opportunity), le scan vérifie l'absence de sanctions, le statut PEP, et la santé financière. Score affiché dans le pipeline pour aider le commercial à prioriser.

Use case 4 — Plateforme de financement

Avant tout déboursement, scan complet avec rapport PDF archivé pour traçabilité réglementaire. Webhook actif pour être alerté en temps réel si une procédure collective est ouverte sur un emprunteur en cours de remboursement.

Limites et bonnes pratiques

Rate limiting

Le rate limiting standard est de 60 requêtes/minute pour le plan Business. Au-delà, utiliser le bulk endpoint qui n'a pas cette limite. Sur un onboarding viral (par exemple lancement Product Hunt), prévoir un buffer ou un mode "scan reporté + email" pour absorber le pic.

Idempotence

Pour éviter de re-scoper la même entité plusieurs fois (et de consommer de la quota), utiliser le header Idempotency-Key avec un identifiant unique par entité (par exemple le SIRET).

Gestion des erreurs

L'API peut retourner :

  • 200 : succès, score retourné
  • 202 : accepté, scan en cours (pour bulk async)
  • 400 : paramètres invalides (vérifier le format)
  • 401 : token invalide ou révoqué
  • 402 : quota dépassé (mode overage si activé, sinon blocage)
  • 429 : rate limit dépassé (retry après délai indiqué dans header Retry-After)
  • 500 : erreur serveur (retry exponentiel recommandé)

FAQ — Questions fréquentes

Quel plan inclut l'accès API ?

L'API publique est disponible sur le plan Business et au-delà. Le plan inclut 250 scans/mois, 10 sièges, webhooks, et audit 5 ans. Au-delà du quota inclus, l'overage est facturé en pay-per-scan.

Comment tester sans payer ?

Le mode test (token rk_test_) renvoie des données fictives sans consommer de quota. Suffisant pour développer l'intégration. Une fois prêt, switcher sur le token live.

Quelle latence en production ?

Scan synchrone : 30-90 secondes selon la complexité de l'entité (médiane 45s). Bulk : ~2 minutes pour 100 entités. Webhook : push en moins de 5 secondes après l'événement.

Y a-t-il un SDK officiel ?

Un client Python officiel est en cours de développement. Pour l'instant, l'intégration se fait directement via requests. Un SDK Node.js et PHP suivront. Si vous avez un besoin urgent, contactez-nous.

RiskSonnar API v1 est disponible sur le plan Business. Documentation complète, exemples de code et SDK : /api/v1/docs. Voir les plans →

Automatisez votre due diligence en 60 secondes

RiskSonnar agrège 24 sources officielles (sanctions, registres, presse, finances) pour produire un rapport de due diligence complet en quelques secondes. À partir de 9,90 €.

Lancer une analyse gratuite →
Aucune carte bancaire requise · 3 analyses offertes