Documentation

Ajoutez l'agent à votre page d'inscription, appelez un endpoint depuis votre serveur et agissez selon la décision.

Démarrage rapide

1. Ajoutez l'agent à votre page d'inscription

Il collecte des signaux de l'appareil et place un jeton visiteur de courte durée dans un champ caché nommé attrelix_visitor de chaque formulaire de la page. Il expose aussi window.attrelix.token() pour les single-page apps.

<script src="https://attrelix.com/v1.js?v=0bbe74b52d" data-key="pk_live_…" async></script>

// single-page apps: wait for the token before you submit
const visitor = await window.attrelix.token();

2. Vérifiez l'inscription depuis votre serveur

Envoyez l'e-mail, l'IP du client et le jeton visiteur avec votre clé secrète. Facultatif : external_id (l'id de votre utilisateur), user_agent et card_fingerprint (par exemple le card.fingerprint de Stripe).

curl https://attrelix.com/v1/check \
  -H "Authorization: Bearer $ATTRELIX_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"email":"jdoe+7@gmail.com","ip":"203.0.113.9","visitor":"vt1.…"}'
# Python
r = requests.post("https://attrelix.com/v1/check", timeout=3,
    headers={"Authorization": f"Bearer {SECRET}"},
    json={"email": email, "ip": ip, "visitor": form["attrelix_visitor"]})
decision = r.json().get("decision", "allow") if r.ok else "allow"

3. Agissez selon la décision

allow : accordez les crédits gratuits. review : demandez quelque chose qui coûte de l'argent à une ferme — une carte, un numéro de téléphone — ou accordez moins de crédits. block : refusez le compte ou les crédits. Si l'appel échoue, acceptez : ne bloquez jamais de vrais utilisateurs à cause de nous.

Clés et jetons

  • Clé publique (pk_live_…) : publique par conception. Elle se trouve dans votre page et ne peut que collecter des signaux, depuis les origines autorisées dans le tableau de bord.
  • Clé secrète (sk_live_…) : serveur uniquement. Elle lance les vérifications et lit les résultats. Nous n'en stockons que le hash : copiez-la à sa création.
  • Jeton visiteur : signé par nous, valable 15 minutes et pour une seule vérification, lié à votre projet. Un jeton utilisé deux fois, ou venant d'un autre réseau que celui de l'inscription, augmente le score.

POST /v1/check

Corps de la requête (JSON). Envoyez au moins l'un de email, ip ou visitor.

emailL'adresse saisie par l'utilisateur.
ipL'IP du client lors de la requête d'inscription (pas celle de votre serveur).
visitorLa valeur attrelix_visitor du formulaire.
user_agentL'en-tête User-Agent de la requête d'inscription.
external_idVotre id du compte, s'il existe déjà.
card_fingerprintUne empreinte de carte, quand une carte est ajoutée à l'inscription.

Réponse

decision vaut allow, review ou block. score va de 0 à 100 : la somme des points des raisons, plafonnée. Chaque raison a un code stable que vous pouvez journaliser ou afficher.

{
  "id": "chk_3fJ8kQ2mN7pX1aZb",
  "decision": "block",
  "score": 100,
  "reasons": [
    { "code": "linked_accounts_10", "points": 45, "detail": "14" },
    { "code": "alias_of_existing", "points": 30, "detail": "3 variants of jdoe@gmail.com" },
    { "code": "datacenter_ip", "points": 25, "detail": "aws" }
  ],
  "email":   { "normalized": "jdoe@gmail.com", "disposable": false, "relay": false, "mx": "yes", … },
  "network": { "ip": "3.88.0.1", "type": "datacenter", "provider": "aws", "signups_24h": 2 },
  "device":  { "id": "dev_9c1e…", "token": "valid", "browser": "Firefox 144", "flags": ["canvas_noise"] },
  "linked":  { "accounts": 14, "by_device": 12, "by_card": 0, "cluster": "cl_7q2f…" },
  "latency_ms": 38
}

Erreurs

Les erreurs sont en JSON : {"error": code, "message": text}.

401clé absente, inconnue, révoquée ou du mauvais type (une clé pk_ sur /v1/check).
400le corps n'est pas du JSON ou ne contient ni email, ni ip, ni visitor.
402les vérifications mensuelles de l'offre sont épuisées.
403l'agent a tourné sur une origine que vous n'avez pas autorisée.
429trop de requêtes depuis une même adresse.

Score

Les points s'additionnent, plafonnés à 100. Par défaut : vérifier dès 50, bloquer dès 80 — tous deux réglables. Une boîte jetable seule passe en vérification ; aucun signal isolé d'appareil ou de réseau n'y arrive.

CodePointsSignification
invalid_email+50L'adresse n'est pas valide
disposable_email+50Domaine d'e-mail jetable
no_mx+35Le domaine ne peut pas recevoir de mail
alias_of_existing+30Autre écriture d'une boîte déjà vue
relay_email+10Adresse de relais
plus_tag+5Tag + ou points Gmail
tor_exit+35Nœud de sortie Tor
datacenter_ip+25Adresse de datacenter ou de cloud
vpn_ip+20Adresse VPN
ip_signups_24h+103+ comptes depuis cette IP en 24 h
ip_signups_24h_high+2510+ comptes depuis cette IP en 24 h
subnet_burst+1510+ comptes depuis ce sous-réseau en 1 h
automation_webdriver+40Automatisation WebDriver
headless_browser+40Navigateur headless
automation_cdp+10Automatisation par le protocole DevTools (Puppeteer, Playwright)
antidetect_browser+15Navigateur anti-détection (plusieurs déguisements à la fois)
headless_viewport+15Fenêtre sans barre ni onglets de navigateur
webgl_os_mismatch+25La carte graphique appartient à un autre système
memory_cpu_mismatch+10Nombre de cœurs et mémoire incohérents
no_human_interaction+30Envoyé instantanément, sans frappe, souris ni tactile
instant_signup+25Rempli et envoyé dans la seconde suivant le chargement
os_mismatch+20Le système d'exploitation se contredit
browser_mismatch+20Le navigateur contredit son user agent
fonts_mismatch+15Les polices ne correspondent pas au système annoncé
canvas_noise+15Empreinte canvas aléatoire
software_renderer+15Rendu graphique logiciel (machine virtuelle ou headless)
zero_window+15Fenêtre sans taille
permissions_mismatch+15États de permission contradictoires
no_plugins+10Chrome de bureau sans plugins
no_languages+10Navigateur sans langues
utc_timezone+5Horloge en UTC
token_missing0–100Pas de jeton visiteur (agent non chargé ou bloqué)
token_invalid+30Jeton visiteur falsifié ou étranger
token_replayed+35Jeton visiteur déjà utilisé
token_expired+10Jeton visiteur expiré
token_ip_mismatch+8Jeton collecté sur un autre réseau
token_ua_mismatch+15Jeton collecté par un autre navigateur
linked_accounts+15Lié à d'autres comptes
linked_accounts_3+30Lié à 3+ comptes
linked_accounts_10+45Lié à 10+ comptes
shared_card+30Carte utilisée par un autre compte
device_burst+155+ vérifications depuis cet appareil en 1 h

Sources de données

Domaines jetables : le projet disposable-email-domains (CC0) et disposable/disposable-email-domains (MIT), mis à jour chaque jour. Plages datacenter : les listes publiées par AWS, Google Cloud, Oracle Cloud, DigitalOcean et Linode. Tor : la liste des sorties du Tor Project, mise à jour toutes les heures.

En ce moment : 98,644 domaines jetables et 21,665 plages.