API di rilevamento bot
Dentro i clienti, fuori i bot
Prima di un login, una registrazione, un checkout o qualsiasi pagina presa di mira dai bot, il tuo server chiede a Bot Protection chi è il visitatore e riceve una classe, uno score e le ragioni. Nessun proxy davanti al tuo sito, nessun rompicapo per i tuoi clienti.
14 giorni di prova gratuita · piani da 29 $ al mese
# 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
}Cosa decide Bot Protection su di te
Chiedigli di questo browser, ora: esegue il suo tag su questa pagina e risponde ciò che riceverebbe il tuo server, la classe, il punteggio e le ragioni.
Solo quando lo chiedi. La decisione è conservata come ogni altra, come dice l'informativa sulla privacy. Privacy
Cosa ferma
Gli attacchi per cui Bot Protection è nato, nel punto preciso che ciascuno prende di mira.
- Registrazione Account falsi e abuso delle prove gratuite Script che aprono account a centinaia per crediti, promozioni, prove gratuite o spam: la new account fraud. Leggi →
- Login Credential stuffing e account takeover Coppie di email e password trafugate, provate sul tuo login finché qualcuna non funziona. Leggi →
- Checkout Card testing Piccoli pagamenti con carte rubate, per scoprire quali funzionano ancora prima di rivenderle. Leggi →
- Qualsiasi pagina Scraping e scalping Prezzi, contenuti e disponibilità limitate portati via da un'automazione, più veloce di qualsiasi persona. Leggi →
Misurato, non promesso
La dashboard
Ogni decisione, e il suo perché
La dashboard che il tuo team apre quando il traffico schizza: cosa ha risposto Bot Protection, ora per ora, e le regole dietro ogni risposta.
Ogni risposta, con le sue ragioni
Le ultime decisioni, dalla più recente, aggiornate ogni pochi secondi. Filtra per classe, path, paese, ragione o ora, e vedi ogni regola che è scattata. Passa il mouse su una ragione per leggere cosa significa.
Come funziona
Due pezzi di codice. Il tuo traffico non cambia
Aggiungi il tag
Un piccolo script nelle tue pagine invia direttamente a Bot Protection ciò che il browser mostra di sé e conserva un token firmato in un cookie first-party.
<script src="…/v1/tag.js" data-site-key="sk_…" async></script>
Chiedi prima dell'azione
Prima di un login, una registrazione, un checkout o qualsiasi pagina presa di mira dai bot, il tuo server invia IP, User-Agent e token della richiesta, con un timeout breve.
POST /v1/decide {"ip": "…", "user_agent": "…", "token": "…", "path": "/checkout"}
Applica l'azione
Ogni risposta dice allow, challenge o block. Parti in monitor mode, dove è sempre allow, e attivi la block mode quando ti fidi. In caso di errore o timeout, lascia passare il visitatore.
if d.Action == "block" { return http.StatusForbidden }
Oppure incolla un prompt in Claude Code, Codex o Cursor e lascia che aggiunga entrambi: configura con l'AI.
Guide per Next.js, Express, Django, Rails, Laravel, Spring Boot, ASP.NET Core, Cloudflare Workers e altro, nella documentazione.
La risposta
Una classe su cui agire, non un numero da interpretare
Una persona, con una prova esterna alla sessione: un ordine passato, la sua carta.
allowUna persona garantita dal tuo stesso feedback.
allowIndizi insufficienti in un senso o nell'altro. Qui finisce la maggior parte delle prime visite.
allowAutomazione, da ciò che fa il client.
challengeAutomazione, con forti indizi dal comportamento.
blockQuando indizi forti puntano in entrambe le direzioni, la risposta dice step_up: chiedi una passkey o il 3-D Secure, non un CAPTCHA.
Cosa legge Bot Protection
Indizi che un bot non può falsificare a lungo
Coerenza
Lo User-Agent corrisponde ai client hints, alla piattaforma, al Web Worker, alla GPU? Un browser modificato si contraddice.
Input reale
Quali tipi di input ha visto la pagina: mouse, tastiera, touch, rotellina. Gli script cliccano senza mai muoversi.
La rete
Datacenter, un fuso orario lontano dall'IP, un round trip che tradisce il passaggio da un proxy.
Farm
Un dispositivo dietro molte reti, un token su molte uscite, un fingerprint su più sessioni: raggruppamenti che una farm non può evitare.
Comportamento nel tempo
Ritmo robotico, tentativi ripetuti nonostante i rifiuti, richieste che non caricano mai una pagina. Dieci minuti di memoria per visitatore.
Il tuo feedback
Segnala a Bot Protection un ordine completato o un chargeback. È una prova esterna alla sessione a rendere umano un visitatore.
Perché un'API
Protezione senza un nuovo punto di guasto
| Bot Protection | CAPTCHA | Proxy davanti al tuo sito | |
|---|---|---|---|
| I tuoi visitatori risolvono rompicapi | Mai | Ogni volta | A volte |
| Il tuo traffico ci passa attraverso | No | No, ma ogni form lo aspetta | Tutto |
| Quando è giù | I visitatori passano | I form si bloccano | Il tuo sito si blocca |
| Ti dice perché | La classe, lo score e il tipo di indizi | Superato o no | Uno score |
| Dove decidi | Nel tuo codice | Nel loro widget | Nelle loro regole |
Domande
Prima che tu lo chieda
I clienti veri verranno bloccati?
Usare una VPN, una rete mobile o la connessione condivisa di un ufficio può alzare lo score, ma da solo non porta mai a bot. Per bot servono indizi di automazione in ciò che fa il client. I clienti che hanno già comprato da te tornano come human high.
Bot Protection conserva dati personali?
Gli identificatori vengono sottoposti a hash con una chiave per cliente che ruota ogni giorno, quindi non si possono collegare tra clienti o tra giorni diversi. Il comportamento viene dimenticato dopo dieci minuti; per la tua dashboard si conservano solo i conteggi e le ultime decisioni.
Un bot bloccato vede ancora il mio sito?
Sì. Bot Protection giudica le azioni su cui il tuo server lo interroga, come una registrazione, un login o un checkout, non il caricamento delle pagine. In block mode un bot carica ancora le tue pagine; quello che il tuo server rifiuta è l'azione.
Il tuo sito, senza i bot
Crea un account, copia due snippet e guarda arrivare le decisioni.