Dokumentacja dla deweloperów

Dokumentacja

Instrukcje i dokumentacja API: jak uruchamiać analizy AntiBait w aplikacji webowej i z własnego kodu.

Dokumentacja API

Pełna analiza AI

Premium

Pełna analiza jednego surowego e-⁠maila: kontrole deterministyczne, werdykt AI weryfikowany ponownie, gdy nie zgadza się z dowodami, oraz ustalenia, na których opiera się wynik.

Endpoint API

POST
POST/api/analysis/advanced

Treść żądania

{
  "email": "string 
  (full raw email)"
}

Maks. 1 MB. Musi zawierać nagłówki i treść.

Odpowiedź

{
  "status": 200,
  "success": true,
  "analysisId": "uuid",
  "cached": false,
  "score": number,
  "headerScore": number | null,
  "bodyScore": number | null,
  "threatType": string | null,
  "type": string | null,
  "confidence": number | null,
  "tags": string[],
  "reasoning": string | null,
  "falsePositiveChecks": string[],
  "error": string | null,
  "data": object,
  "senderInsights": {
    "status": "ready" | "locked" | "off" | "unavailable",
    "since": string | null,
    "insights": [{ "code": string, "severity": string, ... }]
  }
}

Funkcje analizy

Wykrywanie oparte na AI

Model językowy ocenia wiadomość, mając przed sobą ustalenia deterministyczne; werdykty niezgodne z dowodami sprawdza drugi przebieg

Pełna punktacja

Ocena ryzyka w wielu wymiarach z miarami pewności

Kategoryzacja zagrożeń

Szczegółowe tagi i klasyfikacja typów zagrożeń

Szczegółowe uzasadnienie

Wyjaśnienie modelu i dowody: tożsamość nadawcy, uwierzytelnienie, linki, załączniki i to, jak zapadł werdykt

Pola odpowiedzi

statusnumber

Kod statusu HTTP (zawsze 200 dla udanych żądań)

successboolean

Czy analiza się powiodła

analysisIdstring | null

Unikalny identyfikator tej analizy (format UUID)

cachedboolean

Czy wynik pochodzi z pamięci podręcznej (e-⁠mail był już analizowany)

scorenumber

Ogólny wynik ryzyka (0-100) łączący wszystkie czynniki analizy

headerScorenumber | null

W tym endpoincie zawsze null. Heurystyczny wynik nagłówków jest w data.enhancedAnalysis.headerScore

bodyScorenumber | null

W tym endpoincie zawsze null. Heurystyczny wynik treści jest w data.enhancedAnalysis.bodyScore

threatType / typestring | null

Klasyfikacja: "phishing", "malicious", "spam", "legitimate" lub null

confidencenumber | null

Pewność werdyktu (0-100). Wynik rozstrzygnięty bez modelu ma wartość 95

tagsstring[]

Tablica wykrytych wskaźników zagrożeń (np. ["SUSPICIOUS_LINK", "URGENT_LANGUAGE"])

reasoningstring | null

Wyjaśnienie modelu. Wynik rozstrzygnięty bez modelu (data.triage.gateApplied) zawiera zamiast tego krótką notę zaczynającą się od "Resolved without AI"

falsePositiveChecksstring[]

Co sprawdzić przed zaufaniem werdyktowi, w tym zalecenie kontroli tożsamości, gdy niezgodność marki i domeny utrzymała wynik na poziomie 50 lub wyżej

errorstring | null

Komunikat błędu, jeśli analiza się nie powiodła; null, jeśli się powiodła

dataobject

Pełny obiekt werdyktu bez liczby tokenów: details (subject, from, to, date, replyTo, returnPath), llmModel ("triage-gate", gdy model nie był uruchamiany), enhancedAnalysis, triage i cache

data.enhancedAnalysisobject

Dowody deterministyczne zebrane przed uruchomieniem modelu: headerScore, bodyScore i deterministicScore (0-100), isHighThreat, detectedLanguage, blacklistMatches (value, indicator, severity, threatType), whitelistedUrls, urlAnalysis (urlCount, indicators), redirects (originalUrl, finalUrl, hops), domainAges (domain, ageDays, isNewDomain), attachments (filename, mimeType, size, sha256, dangerousExtension, doubleExtension, macroEnabled, blacklisted) oraz senderHistory (null, jeśli poziom z niej nie korzysta).

data.triageobject

Jak zapadł werdykt. mode to off, shadow albo live; w trybie shadow bramki, weryfikacje i progi są wyliczane, ale niczego nie zmieniają. gate to llm, skip_malicious (krytyczne trafienie na liście zagrożeń) albo skip_legitimate (nadawca z białej listy lub zweryfikowany nadawca marki), a gateApplied mówi, czy bramka rozstrzygnęła wynik. identity, firstParty, bulk i auth podsumowują dowody. escalation mówi, czy drugi, dokładniejszy przebieg został uruchomiony i zastosowany, podaje severity (second_opinion albo must_review) oraz werdykt pierwszego przebiegu i końcowy. floorsApplied wymienia progi tożsamości, które zmieniły wynik. W wynikach zapisanych, zanim pola powstały, może ich brakować.

Przykład data.triage

{
  "mode": "live",
  "gate": "llm",
  "gateApplied": false,
  "deterministicScore": 60,
  "identity": {
    "mismatch": true,
    "lures": ["payment"],
    "relayed": false,
    "lookalike": null,
    "brands": ["OLX"],
    "senderDomain": "so-net.ne.jp"
  },
  "firstParty": null,
  "bulk": { "isBulk": false, "network": null, "lure": true, "brand": null },
  "auth": { "spf": "pass", "dkim": "pass", "dmarc": "pass", "transportHeaders": true },
  "escalation": {
    "triggered": true,
    "applied": true,
    "severity": "must_review",
    "reasons": ["..."],
    "firstPassType": "legitimate",
    "firstPassScore": 12,
    "finalType": "phishing",
    "finalScore": 88
  },
  "floorsApplied": []
}
senderInsightsobject

Co Twoja historia mówi o nadawcy. Pole jest obliczane po werdykcie i nigdy nie wpływa na wynik. status to ready (plan Pro i wyższe), locked (Twój plan tego nie obejmuje), off (wyłączone w ustawieniach prywatności) albo unavailable (brak czytelnego nadawcy). since wskazuje najstarszy wpis historii, na którym się opiera. Nie jest zapisywane razem z analizą.

Każdy wpis ma code i severity (warning, caution, info, ok): first_time (domain, domainMessages), seen_before (messages, flagged, firstSeen), lookalike_domain (domain, displayDomain, knownDomain, knownMessages, technique: punycode, homoglyph, subdomain, typo, combo albo tld), known_name_new_address (displayName, knownDomain, sameDomain) oraz reply_to_changed (replyToDomain, usedToBeNone).

Potrzebujesz pomocy z integracją API? Zespół wsparcia odpowiada w ciągu 24 godzin w dni robocze.