Doku
Agent auf die Anmeldeseite, einen Endpoint vom Server aufrufen, nach der Entscheidung handeln.
Schnellstart
1. Agent auf der Anmeldeseite einbinden
Er sammelt Gerätesignale und legt ein kurzlebiges Besucher-Token in ein verstecktes Feld namens attrelix_visitor in jedem Formular der Seite. Für Single-Page-Apps gibt es window.attrelix.token().
<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. Anmeldung vom Server prüfen
Senden Sie E-Mail, Client-IP und Besucher-Token mit Ihrem geheimen Schlüssel. Optional: external_id (Ihre Nutzer-ID), user_agent und card_fingerprint (zum Beispiel card.fingerprint von 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. Nach der Entscheidung handeln
allow: Gratis-Credits vergeben. review: etwas verlangen, das eine Farm Geld kostet — eine Karte, eine Telefonnummer — oder weniger Credits vergeben. block: Konto oder Credits verweigern. Schlägt der Aufruf fehl, zulassen: sperren Sie nie echte Nutzer wegen uns aus.
Schlüssel und Tokens
- Öffentlicher Schlüssel (pk_live_…): absichtlich öffentlich. Er steht in Ihrer Seite und kann nur Signale sammeln, von den Origins, die Sie im Dashboard erlauben.
- Geheimer Schlüssel (sk_live_…): nur auf dem Server. Führt Prüfungen aus und liest Ergebnisse. Wir speichern nur seinen Hash: kopieren Sie ihn beim Erstellen.
- Besucher-Token: von uns signiert, 15 Minuten und für eine einzige Prüfung gültig, an Ihr Projekt gebunden. Ein zweimal genutztes Token oder eines aus einem anderen Netz als die Anmeldung erhöht den Score.
POST /v1/check
Request-Body (JSON). Senden Sie mindestens eines von email, ip oder visitor.
| Die vom Nutzer eingegebene Adresse. | |
| ip | Die Client-IP der Anmeldeanfrage (nicht die Ihres Servers). |
| visitor | Der Wert attrelix_visitor aus dem Formular. |
| user_agent | Der User-Agent-Header der Anmeldeanfrage. |
| external_id | Ihre ID des Kontos, falls es schon existiert. |
| card_fingerprint | Ein Karten-Fingerprint, wenn bei der Anmeldung eine Karte hinterlegt wird. |
Antwort
decision ist allow, review oder block. score reicht von 0 bis 100: die Summe der Punkte der Gründe, gedeckelt. Jeder Grund hat einen stabilen Code zum Loggen oder Anzeigen.
{
"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
}
Fehler
Fehler kommen als JSON: {"error": code, "message": text}.
| 401 | Schlüssel fehlt, unbekannt, widerrufen oder falscher Typ (ein pk_-Schlüssel auf /v1/check). |
| 400 | der Body ist kein JSON oder enthält weder email noch ip noch visitor. |
| 402 | die monatlichen Prüfungen des Tarifs sind aufgebraucht. |
| 403 | der Agent lief auf einem Origin, den Sie nicht erlaubt haben. |
| 429 | zu viele Anfragen von einer Adresse. |
Bewertung
Punkte addieren sich, gedeckelt bei 100. Standard: prüfen ab 50, blockieren ab 80 — beides einstellbar. Ein Wegwerf-Postfach allein führt zu „prüfen“; kein einzelnes Geräte- oder Netzsignal tut das.
| Code | Punkte | Bedeutung |
|---|---|---|
| invalid_email | +50 | Die Adresse ist ungültig |
| disposable_email | +50 | Wegwerf-E-Mail-Domain |
| no_mx | +35 | Die Domain kann keine Mail empfangen |
| alias_of_existing | +30 | Andere Schreibweise eines bekannten Postfachs |
| relay_email | +10 | Weiterleitungsadresse |
| plus_tag | +5 | Plus-Tag oder Gmail-Punkte |
| tor_exit | +35 | Tor-Exit-Knoten |
| datacenter_ip | +25 | Rechenzentrums- oder Cloud-Adresse |
| vpn_ip | +20 | VPN-Adresse |
| ip_signups_24h | +10 | 3+ Konten von dieser IP in 24 h |
| ip_signups_24h_high | +25 | 10+ Konten von dieser IP in 24 h |
| subnet_burst | +15 | 10+ Konten aus diesem Subnetz in 1 h |
| automation_webdriver | +40 | WebDriver-Automatisierung |
| headless_browser | +40 | Headless-Browser |
| automation_cdp | +10 | Automatisierung per DevTools-Protokoll (Puppeteer, Playwright) |
| antidetect_browser | +15 | Anti-Detect-Browser (mehrere Tarnungen zugleich) |
| headless_viewport | +15 | Fenster ohne Browserleiste oder Tabs |
| webgl_os_mismatch | +25 | Die Grafikkarte gehört zu einem anderen Betriebssystem |
| memory_cpu_mismatch | +10 | Kernzahl und Arbeitsspeicher passen nicht zusammen |
| no_human_interaction | +30 | Sofort abgeschickt, ohne Tippen, Maus oder Touch |
| instant_signup | +25 | Innerhalb einer Sekunde nach dem Laden ausgefüllt und abgeschickt |
| os_mismatch | +20 | Das Betriebssystem widerspricht sich |
| browser_mismatch | +20 | Der Browser widerspricht seinem User-Agent |
| fonts_mismatch | +15 | Schriften passen nicht zum angegebenen System |
| canvas_noise | +15 | Zufälliger Canvas-Fingerprint |
| software_renderer | +15 | Software-Grafik (virtuelle Maschine oder headless) |
| zero_window | +15 | Fenster ohne Größe |
| permissions_mismatch | +15 | Widersprüchliche Berechtigungszustände |
| no_plugins | +10 | Desktop-Chrome ohne Plugins |
| no_languages | +10 | Browser ohne Sprachen |
| utc_timezone | +5 | Uhr auf UTC |
| token_missing | 0–100 | Kein Besucher-Token (Agent nicht geladen oder blockiert) |
| token_invalid | +30 | Gefälschtes oder fremdes Besucher-Token |
| token_replayed | +35 | Besucher-Token bereits verwendet |
| token_expired | +10 | Abgelaufenes Besucher-Token |
| token_ip_mismatch | +8 | Token in einem anderen Netz gesammelt |
| token_ua_mismatch | +15 | Token von einem anderen Browser gesammelt |
| linked_accounts | +15 | Mit anderen Konten verknüpft |
| linked_accounts_3 | +30 | Mit 3+ Konten verknüpft |
| linked_accounts_10 | +45 | Mit 10+ Konten verknüpft |
| shared_card | +30 | Karte von einem anderen Konto genutzt |
| device_burst | +15 | 5+ Prüfungen von diesem Gerät in 1 h |
Datenquellen
Wegwerf-Domains: das Projekt disposable-email-domains (CC0) und disposable/disposable-email-domains (MIT), täglich aktualisiert. Rechenzentrumsbereiche: die veröffentlichten Listen von AWS, Google Cloud, Oracle Cloud, DigitalOcean und Linode. Tor: die Exit-Liste des Tor Project, stündlich aktualisiert.
Aktuell: 98,644 Wegwerf-Domains und 21,665 Bereiche.