Documentazione
Aggiungi l'agente alla pagina di registrazione, chiama un endpoint dal tuo server, agisci in base alla decisione.
Avvio rapido
1. Aggiungi l'agente alla pagina di registrazione
Raccoglie i segnali del dispositivo e inserisce un token visitatore di breve durata in un campo nascosto chiamato attrelix_visitor in ogni modulo della pagina. Espone anche window.attrelix.token() per le single-page app.
<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. Controlla la registrazione dal tuo server
Invia email, IP del client e token visitatore con la tua chiave segreta. Facoltativi: external_id (l'id del tuo utente), user_agent e card_fingerprint (per esempio card.fingerprint di 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. Agisci in base alla decisione
allow: concedi i crediti gratuiti. review: chiedi qualcosa che costi soldi a una farm — una carta, un numero di telefono — o concedi meno crediti. block: rifiuta l'account o i crediti. Se la chiamata fallisce, consenti: non bloccare mai utenti reali per colpa nostra.
Chiavi e token
- Chiave pubblica (pk_live_…): pubblica per scelta. Sta nella tua pagina e può solo raccogliere segnali, dalle origini che consenti nella dashboard.
- Chiave segreta (sk_live_…): solo lato server. Esegue i controlli e legge i risultati. Ne conserviamo solo l'hash: copiala quando la crei.
- Token visitatore: firmato da noi, valido 15 minuti e per un solo controllo, legato al tuo progetto. Un token usato due volte, o proveniente da una rete diversa da quella della registrazione, alza il punteggio.
POST /v1/check
Corpo della richiesta (JSON). Invia almeno uno tra email, ip e visitor.
| L'indirizzo digitato dall'utente. | |
| ip | L'IP del client nella richiesta di registrazione (non quello del tuo server). |
| visitor | Il valore attrelix_visitor del modulo. |
| user_agent | L'intestazione User-Agent della richiesta di registrazione. |
| external_id | Il tuo id dell'account, se esiste già. |
| card_fingerprint | Un'impronta della carta, quando una carta viene aggiunta alla registrazione. |
Risposta
decision è allow, review o block. score va da 0 a 100: la somma dei punti dei motivi, con un tetto. Ogni motivo ha un codice stabile da registrare o mostrare.
{
"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
}
Errori
Gli errori sono JSON: {"error": code, "message": text}.
| 401 | chiave mancante, sconosciuta, revocata o del tipo sbagliato (una chiave pk_ su /v1/check). |
| 400 | il corpo non è JSON o non contiene né email, né ip, né visitor. |
| 402 | i controlli mensili del piano sono esauriti. |
| 403 | l'agente è stato eseguito su un'origine che non hai consentito. |
| 429 | troppe richieste da un indirizzo. |
Punteggio
I punti si sommano con un tetto di 100. Predefiniti: verifica da 50, blocco da 80 — entrambi regolabili. Una casella usa e getta da sola porta a verifica; nessun singolo segnale di dispositivo o di rete ci arriva.
| Codice | Punti | Significato |
|---|---|---|
| invalid_email | +50 | L'indirizzo non è valido |
| disposable_email | +50 | Dominio email usa e getta |
| no_mx | +35 | Il dominio non può ricevere posta |
| alias_of_existing | +30 | Altra grafia di una casella già vista |
| relay_email | +10 | Indirizzo di inoltro |
| plus_tag | +5 | Tag + o punti di Gmail |
| tor_exit | +35 | Nodo di uscita Tor |
| datacenter_ip | +25 | Indirizzo di datacenter o cloud |
| vpn_ip | +20 | Indirizzo VPN |
| ip_signups_24h | +10 | 3+ account da questo IP in 24 h |
| ip_signups_24h_high | +25 | 10+ account da questo IP in 24 h |
| subnet_burst | +15 | 10+ account da questa sottorete in 1 h |
| automation_webdriver | +40 | Automazione WebDriver |
| headless_browser | +40 | Browser headless |
| automation_cdp | +10 | Automazione via protocollo DevTools (Puppeteer, Playwright) |
| antidetect_browser | +15 | Browser anti-detect (più travestimenti insieme) |
| headless_viewport | +15 | Finestra senza barra né schede del browser |
| webgl_os_mismatch | +25 | La scheda grafica appartiene a un altro sistema operativo |
| memory_cpu_mismatch | +10 | Numero di core e memoria non coincidono |
| no_human_interaction | +30 | Inviato subito, senza digitare, muovere il mouse o toccare |
| instant_signup | +25 | Compilato e inviato entro un secondo dal caricamento |
| os_mismatch | +20 | Il sistema operativo si contraddice |
| browser_mismatch | +20 | Il browser contraddice il proprio user agent |
| fonts_mismatch | +15 | I font non corrispondono al sistema dichiarato |
| canvas_noise | +15 | Impronta canvas casuale |
| software_renderer | +15 | Grafica software (macchina virtuale o headless) |
| zero_window | +15 | Finestra senza dimensioni |
| permissions_mismatch | +15 | Stati dei permessi contraddittori |
| no_plugins | +10 | Chrome desktop senza plugin |
| no_languages | +10 | Browser senza lingue |
| utc_timezone | +5 | Orologio in UTC |
| token_missing | 0–100 | Nessun token visitatore (agente non caricato o bloccato) |
| token_invalid | +30 | Token visitatore falsificato o estraneo |
| token_replayed | +35 | Token visitatore già usato |
| token_expired | +10 | Token visitatore scaduto |
| token_ip_mismatch | +8 | Token raccolto su un'altra rete |
| token_ua_mismatch | +15 | Token raccolto da un altro browser |
| linked_accounts | +15 | Collegato ad altri account |
| linked_accounts_3 | +30 | Collegato a 3+ account |
| linked_accounts_10 | +45 | Collegato a 10+ account |
| shared_card | +30 | Carta usata da un altro account |
| device_burst | +15 | 5+ controlli da questo dispositivo in 1 h |
Fonti dei dati
Domini usa e getta: il progetto disposable-email-domains (CC0) e disposable/disposable-email-domains (MIT), aggiornati ogni giorno. Intervalli di datacenter: gli elenchi pubblicati da AWS, Google Cloud, Oracle Cloud, DigitalOcean e Linode. Tor: l'elenco dei nodi di uscita del Tor Project, aggiornato ogni ora.
In questo momento: 98,644 domini usa e getta e 21,665 intervalli.