ドキュメント

登録ページにエージェントを置き、サーバーから 1 つのエンドポイントを呼び、判定に従って処理します。

クイックスタート

1. 登録ページにエージェントを追加

端末シグナルを収集し、ページ内のすべてのフォームに attrelix_visitor という隠しフィールドで短命のビジタートークンを入れます。シングルページアプリ向けに 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. サーバーから登録をチェック

メールアドレス、クライアント IP、ビジタートークンをシークレットキーとともに送ります。任意: external_id(自社のユーザー ID)、user_agent、card_fingerprint(例: Stripe の card.fingerprint)。

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. 判定に従って処理

allow: 無料クレジットを付与。review: カードや電話番号など、不正集団にコストがかかるものを求めるか、付与するクレジットを減らす。block: アカウントまたはクレジットを拒否。呼び出しが失敗したら許可してください。私たちのせいで本物のユーザーを締め出さないために。

キーとトークン

  • 公開キー(pk_live_…): 公開を前提としたキーです。ページに置かれ、ダッシュボードで許可したオリジンからシグナルを収集することしかできません。
  • シークレットキー(sk_live_…): サーバー専用。チェックの実行と結果の取得に使います。保存するのはハッシュだけなので、作成時にコピーしてください。
  • ビジタートークン: 私たちが署名し、15 分間・1 回のチェックに限り有効で、プロジェクトに紐づきます。2 回使われたトークンや、登録とは別のネットワークで取得されたトークンはスコアを上げます。

POST /v1/check

リクエストボディ(JSON)。email、ip、visitor のうち少なくとも 1 つを送ってください。

emailユーザーが入力したアドレス。
ip登録リクエストのクライアント IP(自社サーバーの IP ではありません)。
visitorフォームの attrelix_visitor の値。
user_agent登録リクエストの User-Agent ヘッダー。
external_idアカウントが既にある場合の自社 ID。
card_fingerprint登録時にカードを追加した場合のカードフィンガープリント。

レスポンス

decision は allow、review、block のいずれか。score は 0〜100 で、理由ごとのポイントの合計(上限あり)です。各理由にはログや表示に使える固定のコードがあります。

{
  "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
}

エラー

エラーは JSON で返ります: {"error": code, "message": text}。

401キーがない、不明、失効済み、または種類が違う(/v1/check に pk_ キー)。
400ボディが JSON でない、または email・ip・visitor のいずれもない。
402プランの月間チェック数を使い切った。
403許可していないオリジンでエージェントが動いた。
429同じアドレスからのリクエストが多すぎる。

スコアリング

ポイントは加算され、上限は 100 です。既定値は 50 以上で要確認、80 以上でブロック(どちらも変更可能)。使い捨てメールだけでも要確認になりますが、端末やネットワークのシグナル単独では要確認になりません。

コードポイント意味
invalid_email+50アドレスが無効
disposable_email+50使い捨てメールのドメイン
no_mx+35ドメインがメールを受信できない
alias_of_existing+30既出のメールボックスの別表記
relay_email+10転送サービスのアドレス
plus_tag+5+ タグまたは Gmail のドット
tor_exit+35Tor の出口ノード
datacenter_ip+25データセンターまたはクラウドのアドレス
vpn_ip+20VPN のアドレス
ip_signups_24h+10この IP から 24 時間で 3 件以上
ip_signups_24h_high+25この IP から 24 時間で 10 件以上
subnet_burst+15このサブネットから 1 時間で 10 件以上
automation_webdriver+40WebDriver による自動化
headless_browser+40ヘッドレスブラウザ
automation_cdp+10DevTools プロトコルによる自動化(Puppeteer、Playwright)
antidetect_browser+15アンチディテクトブラウザ(複数の偽装が同時に存在)
headless_viewport+15ブラウザのバーもタブもないウィンドウ
webgl_os_mismatch+25グラフィックカードが別のOSのもの
memory_cpu_mismatch+10コア数とメモリが矛盾している
no_human_interaction+30入力もマウス操作もタッチもなく即送信
instant_signup+25ページ読み込みから1秒以内に記入・送信
os_mismatch+20OS の情報が矛盾している
browser_mismatch+20ブラウザが自身の user agent と矛盾
fonts_mismatch+15フォントが申告された OS と合わない
canvas_noise+15ランダム化された canvas フィンガープリント
software_renderer+15ソフトウェア描画(仮想マシンまたはヘッドレス)
zero_window+15ウィンドウのサイズがゼロ
permissions_mismatch+15権限の状態が矛盾している
no_plugins+10プラグインのないデスクトップ版 Chrome
no_languages+10ブラウザに言語設定がない
utc_timezone+5時計が UTC
token_missing0–100ビジタートークンなし(エージェント未読み込みまたはブロック)
token_invalid+30偽造または他プロジェクトのビジタートークン
token_replayed+35使用済みのビジタートークン
token_expired+10期限切れのビジタートークン
token_ip_mismatch+8別のネットワークで取得されたトークン
token_ua_mismatch+15別のブラウザで取得されたトークン
linked_accounts+15他のアカウントと紐づく
linked_accounts_3+303 件以上のアカウントと紐づく
linked_accounts_10+4510 件以上のアカウントと紐づく
shared_card+30他のアカウントが使ったカード
device_burst+15この端末から 1 時間で 5 回以上のチェック

データソース

使い捨てドメイン: disposable-email-domains プロジェクト(CC0)と disposable/disposable-email-domains(MIT)、毎日更新。データセンターの IP 範囲: AWS、Google Cloud、Oracle Cloud、DigitalOcean、Linode が公開しているリスト。Tor: Tor Project の出口ノードリスト、1 時間ごとに更新。

現在: 使い捨てドメイン 98,644 件、IP 範囲 21,665 件。