API de détection de bots
Les clients entrent, les bots restent dehors
Avant un login, une inscription, un checkout ou toute page que visent les bots, votre serveur interroge Bot Protection sur le visiteur et reçoit une classe, un score et les raisons. Aucun proxy devant votre site, aucune énigme pour vos clients.
Essai gratuit de 14 jours · offres à partir de 29 $ par mois
# Ask before the protected action curl -X POST https://korzen.dev/v1/decide \ -H "Authorization: Bearer $KORZEN_API_KEY" \ -d '{ "ip": "203.0.113.10", "user_agent": "Mozilla/5.0 …", "token": "<_kz cookie>", "path": "/checkout" }'
// Ask before the protected action; let through on any error const d = await fetch(API + "/v1/decide", { method: "POST", headers: { Authorization: `Bearer ${KEY}` }, body: JSON.stringify({ ip, user_agent, token, path }), signal: AbortSignal.timeout(200), }).then((r) => r.json()).catch(() => null); if (d?.action === "block") return res.status(403).end();
# Ask before the protected action; let through on any error try: d = requests.post(API + "/v1/decide", headers={"Authorization": f"Bearer {KEY}"}, json={"ip": ip, "user_agent": ua, "token": token}, timeout=0.2).json() except requests.RequestException: d = {} if d.get("action") == "block": abort(403)
// Ask before the protected action; let through on any error c := &http.Client{Timeout: 200 * time.Millisecond} r, _ := http.NewRequest("POST", api+"/v1/decide", body) r.Header.Set("Authorization", "Bearer "+key) var d struct{ Action string } if res, err := c.Do(r); err == nil { json.NewDecoder(res.Body).Decode(&d) res.Body.Close() } if d.Action == "block" { http.Error(w, "try again later", 403) return }
// Ask before the protected action; let through on any error var req = HttpRequest .newBuilder(URI.create(API + "/v1/decide")) .header("Authorization", "Bearer " + KEY) .timeout(Duration.ofMillis(200)) .POST(BodyPublishers.ofString(json)).build(); String act = ""; try { var res = http.send(req, BodyHandlers.ofString()); act = mapper.readTree(res.body()) .path("action").asText(); } catch (Exception e) { /* let through */ } if (act.equals("block")) { response.sendError(403); return; }
// Ask before the protected action; let through on any error
$ch = curl_init(API . '/v1/decide');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($visitor),
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . KEY],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => 200,
]);
$d = json_decode(curl_exec($ch) ?: '{}', true);
if (($d['action'] ?? '') === 'block') {
http_response_code(403);
exit;
}
// Ask before the protected action; let through on any error // http: an HttpClient with "Authorization: Bearer KEY" var act = ""; try { using var cts = new CancellationTokenSource(200); var res = await http.PostAsJsonAsync( Api + "/v1/decide", visitor, cts.Token); var d = await res.Content .ReadFromJsonAsync<JsonElement>(cts.Token); act = d.GetProperty("action").GetString(); } catch { /* let through */ } if (act == "block") return Results.StatusCode(403);
200 OK RESPONSE
{
"request_id": "AQEAmJ3…",
"class": "bot_high",
"bot_score": 96,
"human_score": 0,
"reasons": ["behaviour", "inconsistency"],
"rules": [],
"step_up": false,
"action": "block",
"intended_action": "block",
"mode": "block",
"challenge": null,
"token_required": false,
"seen_before": 0,
"crawler": null
}Ce que Bot Protection décide à votre sujet
Interrogez-le sur ce navigateur, maintenant : il exécute son tag sur cette page et répond ce que votre serveur recevrait, la classe, le score et les raisons.
Seulement quand vous le demandez. La décision est conservée comme toute autre, comme le dit la politique de confidentialité. Confidentialité
Ce qu'il arrête
Les attaques pour lesquelles Bot Protection est conçu, à l'étape que chacune vise.
- Inscription Faux comptes et abus d'essais gratuits Des scripts qui ouvrent des comptes par centaines pour des crédits, des promotions, des essais ou du spam : la fraude à l'ouverture de compte (new account fraud). Lire →
- Login Credential stuffing et prise de contrôle de compte Des paires e-mail et mot de passe issues de fuites, rejouées contre votre login jusqu'à ce que certaines fonctionnent (account takeover). Lire →
- Checkout Test de cartes De petits paiements avec des cartes volées, pour trouver celles qui fonctionnent encore avant de les revendre (card testing). Lire →
- Toute page Scraping et scalping Des prix, des contenus et des stocks limités raflés par l'automatisation, plus vite que n'importe qui. Lire →
Mesuré, pas promis
Le tableau de bord
Voir chaque décision, et pourquoi
Le tableau de bord que votre équipe ouvre quand le trafic s'envole : ce que Bot Protection a répondu, heure par heure, et les règles derrière chaque réponse.
Chaque réponse, avec ses raisons
Les dernières décisions, la plus récente en premier, actualisées toutes les quelques secondes. Filtrez par classe, chemin, pays, raison ou heure, et voyez chaque règle déclenchée. Survolez une raison pour lire ce qu'elle signifie.
Comment ça marche
Deux morceaux de code. Aucun changement à votre trafic
Ajouter le tag
Un petit script dans vos pages envoie ce que le navigateur montre de lui-même directement à Bot Protection et garde un token signé dans un cookie first-party.
<script src="…/v1/tag.js" data-site-key="sk_…" async></script>
Demander avant l'action
Avant un login, une inscription, un checkout ou toute page que visent les bots, votre serveur envoie l'IP, le User-Agent et le token de la requête, avec un timeout court.
POST /v1/decide {"ip": "…", "user_agent": "…", "token": "…", "path": "/checkout"}
Appliquer l'action
Chaque réponse dit allow, challenge ou block. Vous commencez en mode monitor, où c'est toujours allow, et activez le mode block quand vous lui faites confiance. En cas d'erreur ou de timeout, laissez passer le visiteur.
if d.Action == "block" { return http.StatusForbidden }
Ou collez un prompt dans Claude Code, Codex ou Cursor et laissez-le ajouter les deux : configurer avec l'IA.
Des guides pour Next.js, Express, Django, Rails, Laravel, Spring Boot, ASP.NET Core, Cloudflare Workers et plus, dans la doc.
La réponse
Une classe sur laquelle agir, pas un nombre à deviner
Une personne, avec une preuve extérieure à la session : une commande passée, sa propre carte.
allowUne personne dont votre propre feedback se porte garant.
allowPas assez d'éléments dans un sens ou dans l'autre. La plupart des premières visites arrivent ici.
allowDe l'automatisation, d'après ce que fait le client.
challengeDe l'automatisation, avec de fortes preuves de comportement.
blockQuand de fortes preuves vont dans les deux sens, la réponse dit step_up : demandez une passkey ou 3-D Secure, pas un CAPTCHA.
Ce que lit Bot Protection
Des preuves qu'un bot ne peut pas falsifier longtemps
Cohérence
Le User-Agent correspond-il aux client hints, à la plateforme, au Web Worker, au GPU ? Un navigateur patché se contredit.
De vraies saisies
Les types de saisie que la page a vus : souris, clavier, tactile, molette. Les scripts cliquent sans jamais bouger.
Le réseau
Des datacenters, un fuseau horaire loin de l'IP, un aller-retour qui trahit un saut par un proxy.
Fermes
Un appareil derrière de nombreux réseaux, un token sur de nombreuses sorties, une empreinte à travers les sessions : des groupes qu'une ferme ne peut pas éviter.
Le comportement dans le temps
Une cadence robotique, des tentatives malgré les refus, des requêtes qui ne chargent jamais de page. Dix minutes de mémoire par visiteur.
Votre feedback
Signalez à Bot Protection une commande aboutie ou un chargeback. C'est une preuve extérieure à la session qui fait d'un visiteur un humain.
Pourquoi une API
Une protection sans nouveau point de défaillance
| Bot Protection | CAPTCHA | Proxy devant votre site | |
|---|---|---|---|
| Vos visiteurs résolvent des énigmes | Jamais | À chaque fois | Parfois |
| Votre trafic passe par lui | Non | Non, mais chaque formulaire l'attend | Tout |
| Quand il tombe | Les visiteurs passent | Les formulaires s'arrêtent | Votre site s'arrête |
| Vous dit pourquoi | La classe, le score et le type de preuve | Réussi ou échoué | Un score |
| Où vous décidez | Dans votre code | Dans leur widget | Dans leurs règles |
Questions
Avant que vous ne demandiez
De vrais clients seront-ils bloqués ?
Être sur un VPN, un réseau mobile ou une connexion de bureau partagée peut faire monter le score mais ne suffit jamais, à lui seul, pour atteindre bot. bot exige des preuves d'automatisation dans ce que fait le client. Les clients qui ont déjà acheté chez vous reviennent en human high.
Bot Protection stocke-t-il des données personnelles ?
Les identifiants sont hachés avec une clé par client qui change chaque jour, ils ne peuvent donc pas être recoupés entre clients ni entre jours. Le comportement est oublié au bout de dix minutes ; seuls des compteurs et les dernières décisions sont gardés pour votre tableau de bord.
Un bot bloqué voit-il encore mon site ?
Oui. Bot Protection juge les actions sur lesquelles votre serveur l'interroge, comme une inscription, une connexion ou un checkout, pas le chargement des pages. En mode block, un bot charge toujours vos pages ; ce que votre serveur refuse, c'est l'action.
Votre site, sans les bots
Créez un compte, copiez deux snippets et regardez les décisions arriver.