Dokumentasi
Pasang agen di halaman pendaftaran, panggil satu endpoint dari server Anda, lalu bertindak sesuai keputusan.
Mulai cepat
1. Pasang agen di halaman pendaftaran
Agen mengumpulkan sinyal perangkat dan memasukkan token pengunjung berumur pendek ke kolom tersembunyi bernama attrelix_visitor di setiap formulir pada halaman. Untuk aplikasi satu halaman tersedia 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. Periksa pendaftaran dari server Anda
Kirim email, IP klien, dan token pengunjung dengan kunci rahasia Anda. Opsional: external_id (id pengguna Anda), user_agent, dan card_fingerprint (misalnya card.fingerprint dari 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. Bertindak sesuai keputusan
allow: berikan kredit gratis. review: minta sesuatu yang membuat peternakan keluar uang — kartu, nomor telepon — atau berikan kredit lebih sedikit. block: tolak akun atau kreditnya. Jika panggilan gagal, izinkan: jangan pernah mengunci pengguna asli karena kami.
Kunci dan token
- Kunci publik (pk_live_…): memang publik. Ada di halaman Anda dan hanya bisa mengumpulkan sinyal, dari origin yang Anda izinkan di dasbor.
- Kunci rahasia (sk_live_…): hanya di server. Menjalankan pemeriksaan dan membaca hasil. Kami hanya menyimpan hash-nya: salin saat Anda membuatnya.
- Token pengunjung: ditandatangani oleh kami, berlaku 15 menit dan untuk satu pemeriksaan, terikat pada proyek Anda. Token yang dipakai dua kali, atau dari jaringan berbeda dengan pendaftaran, menaikkan skor.
POST /v1/check
Body permintaan (JSON). Kirim minimal salah satu dari email, ip, atau visitor.
| Alamat yang diketik pengguna. | |
| ip | IP klien pada permintaan pendaftaran (bukan IP server Anda). |
| visitor | Nilai attrelix_visitor dari formulir. |
| user_agent | Header User-Agent pada permintaan pendaftaran. |
| external_id | Id akun di sistem Anda, jika sudah ada. |
| card_fingerprint | Sidik jari kartu, jika kartu ditambahkan saat mendaftar. |
Respons
decision bernilai allow, review, atau block. score 0–100: jumlah poin alasan, dengan batas atas. Setiap alasan punya kode tetap yang bisa Anda catat atau tampilkan.
{
"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
}
Error
Error berupa JSON: {"error": code, "message": text}.
| 401 | kunci tidak ada, tidak dikenal, dicabut, atau salah jenis (kunci pk_ di /v1/check). |
| 400 | body bukan JSON atau tidak berisi email, ip, maupun visitor. |
| 402 | kuota pemeriksaan bulanan paket sudah habis. |
| 403 | agen berjalan di origin yang tidak Anda izinkan. |
| 429 | terlalu banyak permintaan dari satu alamat. |
Penilaian
Poin dijumlahkan dengan batas 100. Bawaan: tinjau mulai 50, blokir mulai 80 — keduanya bisa diatur. Kotak surat sekali pakai saja sudah masuk tinjau; tidak ada satu sinyal perangkat atau jaringan yang sendirian sampai ke sana.
| Kode | Poin | Arti |
|---|---|---|
| invalid_email | +50 | Alamat tidak valid |
| disposable_email | +50 | Domain email sekali pakai |
| no_mx | +35 | Domain tidak bisa menerima email |
| alias_of_existing | +30 | Ejaan lain dari kotak surat yang sudah ada |
| relay_email | +10 | Alamat layanan penerusan |
| plus_tag | +5 | Tag + atau titik Gmail |
| tor_exit | +35 | Node keluar Tor |
| datacenter_ip | +25 | Alamat pusat data atau cloud |
| vpn_ip | +20 | Alamat VPN |
| ip_signups_24h | +10 | 3+ akun dari IP ini dalam 24 jam |
| ip_signups_24h_high | +25 | 10+ akun dari IP ini dalam 24 jam |
| subnet_burst | +15 | 10+ akun dari subnet ini dalam 1 jam |
| automation_webdriver | +40 | Otomasi WebDriver |
| headless_browser | +40 | Browser headless |
| automation_cdp | +10 | Otomasi protokol DevTools (Puppeteer, Playwright) |
| antidetect_browser | +15 | Browser anti-deteksi (beberapa penyamaran sekaligus) |
| headless_viewport | +15 | Jendela tanpa bilah atau tab peramban |
| webgl_os_mismatch | +25 | Kartu grafis milik sistem operasi lain |
| memory_cpu_mismatch | +10 | Jumlah inti dan memori tidak cocok |
| no_human_interaction | +30 | Dikirim seketika tanpa mengetik, menggerakkan tetikus, atau menyentuh |
| instant_signup | +25 | Diisi dan dikirim dalam satu detik setelah halaman dimuat |
| os_mismatch | +20 | Sistem operasi saling bertentangan |
| browser_mismatch | +20 | Browser bertentangan dengan user agent-nya |
| fonts_mismatch | +15 | Font tidak cocok dengan sistem yang diklaim |
| canvas_noise | +15 | Sidik jari canvas yang diacak |
| software_renderer | +15 | Grafik perangkat lunak (mesin virtual atau headless) |
| zero_window | +15 | Jendela tanpa ukuran |
| permissions_mismatch | +15 | Status izin saling bertentangan |
| no_plugins | +10 | Chrome desktop tanpa plugin |
| no_languages | +10 | Browser tanpa bahasa |
| utc_timezone | +5 | Jam disetel ke UTC |
| token_missing | 0–100 | Tidak ada token pengunjung (agen tidak dimuat atau diblokir) |
| token_invalid | +30 | Token pengunjung palsu atau milik proyek lain |
| token_replayed | +35 | Token pengunjung sudah dipakai |
| token_expired | +10 | Token pengunjung kedaluwarsa |
| token_ip_mismatch | +8 | Token dikumpulkan di jaringan lain |
| token_ua_mismatch | +15 | Token dikumpulkan oleh browser lain |
| linked_accounts | +15 | Tertaut ke akun lain |
| linked_accounts_3 | +30 | Tertaut ke 3+ akun |
| linked_accounts_10 | +45 | Tertaut ke 10+ akun |
| shared_card | +30 | Kartu dipakai akun lain |
| device_burst | +15 | 5+ pemeriksaan dari perangkat ini dalam 1 jam |
Sumber data
Domain sekali pakai: proyek disposable-email-domains (CC0) dan disposable/disposable-email-domains (MIT), diperbarui setiap hari. Rentang pusat data: daftar yang dipublikasikan AWS, Google Cloud, Oracle Cloud, DigitalOcean, dan Linode. Tor: daftar node keluar dari Tor Project, diperbarui setiap jam.
Saat ini: 98,644 domain sekali pakai dan 21,665 rentang.