Construire un pipeline de détection de fraude
Un signal suspect isolé raconte rarement toute l'histoire. Un email peut sembler normal seul, mais associé à une IP de datacenter et un domaine fraichement enregistré, le tableau change vite. Combiner plusieurs APIs Veille dans un pipeline offre une vue composite du risque pour chaque inscription.
Vue d'ensemble de l'architecture
Le principe est simple : valider l'email (/v1/intelligence/email), vérifier l'âge du domaine (/v1/intelligence/domain) et scorer l'IP (/v1/intelligence/ip). Trois appels, trois signaux, un score composite.
Intégration rapide
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.veille.io/v1"
def score_signup(email: str, ip: str) -> dict:
headers = {"x-api-key": API_KEY}
email_data = requests.get(
f"{BASE_URL}/intelligence/email", params={"query": email}, headers=headers
).json()
domain_data = requests.get(
f"{BASE_URL}/intelligence/domain", params={"query": email_data["domain"]}, headers=headers
).json()
ip_data = requests.get(
f"{BASE_URL}/intelligence/ip", params={"query": ip}, headers=headers
).json()
age = min(domain_data.get("domain_age_days", 365), 365)
domain_risk = ((365 - age) / 365) * 100
composite = (
email_data["risk_score"] * 0.40
+ domain_risk * 0.35
+ ip_data["threat_score"] * 0.25
)
return {
"composite_score": round(composite),
"disposable_email": email_data["disposable"],
"vpn_or_proxy": ip_data["is_vpn"] or ip_data["is_proxy"],
"domain_age_days": domain_data.get("domain_age_days"),
}
TypeScript
const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.veille.io/v1";
const headers = { "x-api-key": API_KEY };
async function scoreSignup(email: string, ip: string) {
const [emailResponse, ipResponse] = await Promise.all([
fetch(`${BASE_URL}/intelligence/email?query=${email}`, { headers }),
fetch(`${BASE_URL}/intelligence/ip?query=${ip}`, { headers }),
]);
const [emailData, ipData] = await Promise.all([
emailResponse.json(),
ipResponse.json(),
]);
const domainResponse = await fetch(
`${BASE_URL}/intelligence/domain?query=${emailData.domain}`,
{ headers }
);
const domainData = await domainResponse.json();
const age = Math.min(domainData.domain_age_days ?? 365, 365);
const domainRisk = ((365 - age) / 365) * 100;
return {
compositeScore: Math.round(
emailData.risk_score * 0.4 + domainRisk * 0.35 + ipData.threat_score * 0.25
),
disposableEmail: emailData.disposable,
vpnOrProxy: ipData.is_vpn || ipData.is_proxy,
domainAgeDays: domainData.domain_age_days,
};
}
Pondérations recommandées
| Signal | Poids | Pourquoi |
|---|---|---|
| Score de risque email | 40 % | Les emails jetables et de rôle sont l'indicateur de fraude le plus fiable |
| Risque lié à l'âge du domaine | 35 % | Les domaines récemment enregistrés sont fortement corrélés à la fraude |
| Score de menace IP | 25 % | Les VPN sont aussi utilisés par des utilisateurs légitimes soucieux de leur vie privée |
5 cas d'utilisation
- Inscription utilisateur - calculer un score composite à l'inscription et rejeter automatiquement au-dessus d'un seuil.
- Vérification au checkout - exécuter le pipeline avant de traiter un paiement pour détecter les identités synthétiques.
- Onboarding de vendeurs marketplace - filtrer les nouveaux marchands en combinant les signaux email, domaine et IP.
- Modération de contenu - prioriser la revue des publications provenant de comptes à haut risque.
- Sécurité des webhooks - valider l'IP et le domaine d'origine des webhooks entrants avant de les traiter.