ウィジェットエンドポイント

これらのエンドポイントは SilentShield ウィジェットが呼び出します。通常はご自身で呼び出す必要はありません。ページ上で何が起きているかを追えるように記載しています。

Base URL: https://api.silentshield.io

POST/api/v1/telemetry/behavior

現在の操作の挙動データ(マウス、キーボード、スクロール)を送信し、nonce と判定を返します。フォームはこの nonce を `behavior_nonce` フィールドとして送信します。

Auth: APIキー(X-Api-Keyヘッダー)

Request Body:

{"ts": 1767225600000, "nonce": "bh_abc123", "event": "submit", "form_key": "contact", "feature_hash": "...", "metrics": {...}, "signature": "..."}

Response:

{"id": "...", "nonce": "bh_abc123", "status": "queued", "verdict": "human", "score": 0.87, "captcha_solved": false, "challenge_required": false, "difficulty": "pass", "reason_codes": [], "action": "allow"}

イベント `submit` が nonce とともに届いた時点で割り当てに計上されます — 送信ごとにちょうど 1 回です。`init`、`telemetry`、`form_detected` は計上されません。

POST/api/v1/captcha/challenge

判定が不確かだった場合に計算問題を要求します。ウィジェットが自動で行います。問題は一度きりで、nonce に紐づいています。

Auth: APIキー(X-Api-Keyヘッダー)

Request Body:

{"nonce": "bh_abc123", "difficulty": "medium"}

Response:

{"ok": true, "challenge_id": "ch_xyz789", "a": 7, "op": "+", "b": 5}

テレメトリの応答が `challenge_required: true` を返した場合にのみ必要です。

POST/api/v1/captcha/verified

解いた問題を送信します。サーバーがこのキー向けに発行した問題と答えが一致した場合にのみ、nonce が人間として記録されます。

Auth: APIキー(X-Api-Keyヘッダー)

Request Body:

{"challenge_id": "ch_xyz789", "answer": 12}

Response:

{"ok": true}   //  403: {"ok": false, "reason": "invalid_solution"}

フェイルクローズド:誤答または期限切れは 403 と `reason: "invalid_solution"` を返します。問題は一度きりです。

POST/api/v1/captcha/verify-nonce

ウィジェットによって生成されたNonceを検証します。フォーム送信が正当であることを確認するために、サーバーからこのエンドポイントを呼び出してください。

Auth: APIキー(X-Api-Keyヘッダー)

Request Body:

{"nonce": "nonce_xyz789"}

Response:

{"valid": true, "verdict": "human", "score": 0.92, "timestamp": "2025-01-15T10:30:00Z"}

このエンドポイントはクォータにカウントされます。Nonceは使い捨てで、5分後に期限切れになります。