Korzen
Bot Protection

API zur Bot-Erkennung

Kunden rein, Bots raus

Vor einem Login, einer Registrierung, einem Checkout oder jeder Seite, auf die Bots es abgesehen haben, fragt Ihr Server Bot Protection nach dem Besucher und erhält eine Klasse, einen Score und die Gründe. Kein Proxy vor Ihrer Website, keine Rätsel für Ihre Kunden.

14 Tage kostenlos · Pläne ab 29 $ im Monat

# 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
}
·:+* eingehende Anfragen | Bot Protection, vor Ihrer Aktion x ein Bot, gestoppt # ein Mensch, durchgelassen

Was es stoppt

Die Angriffe, für die Bot Protection gebaut ist, an dem Schritt, auf den es jeder abgesehen hat.

Gemessen, nicht versprochen

Erkannte Automatisierungs-Tools
15 von 15
Playwright mit Stealth-Flags, über CDP gesteuertes Chrome, curl_cffi als Chrome getarnt: unsere eigenen Tests, 17. Oktober 2026
Antwortzeit, p99
unter 3 ms
bei 600 Entscheidungen pro Sekunde, am Server gemessen, auf 4 Kernen wie die VM, 20. Oktober 2026
Standard-Timeout
200 ms
danach, oder bei jedem Fehler, kommt der Besucher durch

Das Dashboard

Jede Entscheidung sehen, und warum

Das Dashboard, das Ihr Team öffnet, wenn der Traffic steigt: was Bot Protection geantwortet hat, Stunde für Stunde, und die Regeln hinter jeder Antwort.

Bot Protection · Übersicht
Die Übersicht: Entscheidungen pro Stunde nach Klasse gestapelt, der Anteil der Bots, die häufigsten Gründe und die letzten Bots

Jede Antwort, mit ihren Gründen

Die letzten Entscheidungen, die neueste zuerst, alle paar Sekunden aktualisiert. Filtern Sie nach Klasse, Pfad, Land, Grund oder Zeit und sehen Sie jede Regel, die gegriffen hat. Fahren Sie über einen Grund, um zu lesen, was er bedeutet.

Bot Protection · Entscheidungen
Die Entscheidungstabelle nach Klasse gefiltert, mit Zeit, Klasse, Bot-Score, Pfad, Land und Gründen

So funktioniert es

Zwei Code-Snippets. Keine Änderung an Ihrem Traffic

1

Den Tag einbauen

Ein kleines Skript in Ihren Seiten sendet, was der Browser über sich zeigt, direkt an Bot Protection und hält einen signierten Token in einem First-Party-Cookie.

<script src="…/v1/tag.js"
  data-site-key="sk_…"
  async></script>
2

Vor der Aktion fragen

Vor einem Login, einer Registrierung, einem Checkout oder jeder Seite, auf die Bots es abgesehen haben, sendet Ihr Server IP, User-Agent und Token der Anfrage, mit einem kurzen Timeout.

POST /v1/decide
{"ip": "…", "user_agent": "…",
 "token": "…",
 "path": "/checkout"}
3

Die Aktion anwenden

Jede Antwort lautet allow, challenge oder block. Sie beginnen im Monitor-Modus, in dem sie immer allow ist, und schalten den Block-Modus ein, wenn Sie ihm vertrauen. Bei jedem Fehler oder Timeout lassen Sie den Besucher durch.

if d.Action == "block" {
    return http.StatusForbidden
}

Oder fügen Sie einen Prompt in Claude Code, Codex oder Cursor ein und lassen Sie beides hinzufügen: mit KI einrichten.

Anleitungen für Next.js, Express, Django, Rails, Laravel, Spring Boot, ASP.NET Core, Cloudflare Workers und mehr, in den Docs.

Die Antwort

Eine Klasse, nach der Sie handeln können, keine Zahl zum Raten

human high

Ein Mensch, mit einem Nachweis außerhalb der Session: eine frühere Bestellung, die eigene Karte.

allow
human

Ein Mensch, für den Ihr eigenes Feedback bürgt.

allow
unknown

Nicht genug Belege in die eine oder andere Richtung. Die meisten ersten Besuche landen hier.

allow
bot

Automatisierung, erkannt an dem, was der Client tut.

challenge
bot high

Automatisierung, mit starken Belegen im Verhalten.

block

Wenn starke Belege in beide Richtungen zeigen, sagt die Antwort step_up: Fragen Sie nach einem Passkey oder 3-D Secure, nicht nach einem CAPTCHA.

Was Bot Protection liest

Belege, die ein Bot nicht lange fälschen kann

Konsistenz

Passt der User-Agent zu den Client Hints, der Plattform, dem Web Worker, der GPU? Ein gepatchter Browser widerspricht sich selbst.

Echte Eingaben

Welche Arten von Eingaben die Seite gesehen hat: Maus, Tasten, Touch, Mausrad. Skripte klicken, ohne sich je zu bewegen.

Das Netzwerk

Rechenzentren, eine Zeitzone weit weg von der IP, einen Round Trip, die einen Proxy-Hop verrät.

Farmen

Ein Gerät hinter vielen Netzwerken, ein Token an vielen Ausgängen, ein Fingerprint über Sessions hinweg: Gruppen, die eine Farm nicht vermeiden kann.

Verhalten über die Zeit

Roboterhafter Takt, Wiederholungen trotz Ablehnungen, Anfragen, die nie eine Seite laden. Zehn Minuten Gedächtnis pro Besucher.

Ihr Feedback

Melden Sie Bot Protection eine abgeschlossene Bestellung oder einen Chargeback. Ein Nachweis außerhalb der Session macht einen Besucher zum Menschen.

Warum eine API

Schutz ohne neuen Single Point of Failure

Bot ProtectionCAPTCHAProxy vor Ihrer Website
Ihre Besucher lösen RätselNieJedes MalManchmal
Ihr Traffic läuft hindurchNeinNein, aber jedes Formular wartet daraufKomplett
Wenn es ausfälltBesucher kommen durchFormulare stehen stillIhre Website steht still
Sagt Ihnen, warumDie Klasse, der Score und die Art der BelegeBestanden oder nichtEin Score
Wo Sie entscheidenIn Ihrem CodeIn deren WidgetIn deren Regeln

Fragen

Bevor Sie fragen

Werden echte Kunden blockiert?

Ein VPN, ein Mobilfunknetz oder ein geteilter Büroanschluss können den Score erhöhen, erreichen allein aber nie bot. bot braucht Belege für Automatisierung in dem, was der Client tut. Kunden, die schon bei Ihnen gekauft haben, kommen als human high zurück.

Speichert Bot Protection personenbezogene Daten?

Kennungen werden mit einem Schlüssel pro Kunde gehasht, der täglich rotiert, sodass sie nicht über Kunden oder Tage hinweg verknüpft werden können. Verhalten wird nach zehn Minuten vergessen; nur Zählwerte und die letzten Entscheidungen bleiben für Ihr Dashboard.

Sieht ein blockierter Bot meine Website noch?

Ja. Bot Protection beurteilt die Aktionen, nach denen Ihr Server fragt, etwa eine Registrierung, eine Anmeldung oder einen Checkout, nicht das Laden der Seiten. Auch im Block-Modus lädt ein Bot Ihre Seiten; was Ihr Server ablehnt, ist die Aktion.

Ihre Website, ohne die Bots

Konto anlegen, zwei Snippets kopieren und zusehen, wie die Entscheidungen eintreffen.