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
PremiumPeł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/api/analysis/advancedTreść żą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
statusnumberKod statusu HTTP (zawsze 200 dla udanych żądań)
successbooleanCzy analiza się powiodła
analysisIdstring | nullUnikalny identyfikator tej analizy (format UUID)
cachedbooleanCzy wynik pochodzi z pamięci podręcznej (e-mail był już analizowany)
scorenumberOgólny wynik ryzyka (0-100) łączący wszystkie czynniki analizy
headerScorenumber | nullW tym endpoincie zawsze null. Heurystyczny wynik nagłówków jest w data.enhancedAnalysis.headerScore
bodyScorenumber | nullW tym endpoincie zawsze null. Heurystyczny wynik treści jest w data.enhancedAnalysis.bodyScore
threatType / typestring | nullKlasyfikacja: "phishing", "malicious", "spam", "legitimate" lub null
confidencenumber | nullPewność 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 | nullWyjaś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 | nullKomunikat błędu, jeśli analiza się nie powiodła; null, jeśli się powiodła
dataobjectPeł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.enhancedAnalysisobjectDowody 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.triageobjectJak 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": []
}senderInsightsobjectCo 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.