{"openapi":"3.0.3","info":{"title":"Anti Phishing — URL Analysis API","version":"1.1.0","description":"Integracja serwer–serwer. Klucza nie wolno umieszczać w frontendzie, aplikacji mobilnej ani publicznym repozytorium. Wersja v1; brak ogłoszonej daty wycofania. API nie obsługuje idempotencji: każde ponowienie jest nowym żądaniem.","contact":{"name":"Anti Phishing Technologies P.S.A. (Wcześniej Woolshy.com Group)","email":"contact@antiphishingtechnologies.com"}},"servers":[{"url":"https://argus-developer-gateway-844rjxb1.ew.gateway.dev"}],"security":[{"ApiKeyBearer":[]}],"paths":{"/v1/analyze":{"post":{"operationId":"analyzeUrl","summary":"Analiza publicznego adresu URL","description":"Pełna kaskada analizy w chmurze. Limit czasu usługi i gateway: 180 sekund; zalecany timeout klienta: 190 sekund. Domyślne limity organizacji: 12/min, 250/dzień UTC, 7500/miesiąc UTC. Właściciel może obniżyć limit miesiąca. Maksymalny rozmiar żądania: 12288 bajtów. Dozwolone publiczne HTTP/HTTPS, bez danych logowania w URL. Nie przekazuj sekretów. Rozliczany jest tylko ukończony wynik SAFE/SUSPICIOUS/DANGEROUS; przyjęte błędne analizy zużywają limit, lecz nie są rozliczane. Odpowiedź SAFE nie stanowi gwarancji bezpieczeństwa.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","minLength":1,"description":"Publiczny adres strony do analizy.","example":"https://example.com"}}}}}},"responses":{"200":{"description":"Zakończona analiza, podlegająca rozliczeniu.","headers":{"X-Request-ID":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Analysis"}}}},"400":{"description":"Nie ponawiaj bez poprawienia żądania. Kody: invalid_request, url_required, invalid_url, empty_url, unsupported_url, userinfo_not_allowed, private_host, unsupported_port, url_too_long, unresolvable_host.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"401":{"description":"Klucz brakujący, nieznany, wygasły lub unieważniony. Kody: invalid_api_key.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"403":{"description":"Odrzucenie przez kontrolę dostępu warstwy pośredniej. Bez automatycznego retry.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"404":{"description":"Nieznana ścieżka lub wersja API.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"405":{"description":"Niedozwolona metoda HTTP; użyj POST.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"413":{"description":"Żądanie przekracza 12 KiB. Odpowiedź warstwy HTTP może nie być JSON."},"429":{"description":"Limit organizacji. Respektuj Retry-After; po wyczerpaniu dnia/miesiąca poczekaj na następny okres. Kody: minute_limit_reached, day_limit_reached, month_limit_reached.","headers":{"Retry-After":{"required":true,"schema":{"type":"integer","minimum":1},"description":"Minimalny czas oczekiwania w sekundach."},"X-Request-ID":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"500":{"description":"Błąd wewnętrzny; nie interpretuj jako SAFE.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"502":{"description":"Analiza nie zakończyła się wynikiem. Możliwe ograniczone retry. Kody: analysis_failed.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"503":{"description":"Chwilowa niedostępność analizy lub bazy zagrożeń. Kody: analysis_temporarily_unavailable.","headers":{"X-Request-ID":{"description":"Identyfikator nadawany przez usługę. Może nie wystąpić w błędzie gateway.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}},"504":{"description":"Limit czasu gateway. Analiza może jeszcze trwać; nowe żądanie może zostać ponownie naliczone."},"default":{"description":"Błąd warstwy pośredniej może mieć format inny niż JSON. Dla 5xx maksymalnie 2 ponowienia z exponential backoff i jitter, wyłącznie jeżeli akceptujesz nowe naliczenie. Nie ponawiaj bez ograniczeń."}}}}},"components":{"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"aph_live_…","description":"Klucz organizacji wygenerowany w panelu; przesyłany wyłącznie przez HTTPS."}},"schemas":{"Analysis":{"type":"object","required":["schemaVersion","riskScore","verdict","isPhishing","reasons","finalUrl","redirectChain","sources","requestId","analyzedAt","engineVersion","threatDatabaseVersion","durationMillis"],"properties":{"schemaVersion":{"type":"integer","enum":[1]},"riskScore":{"type":"integer","minimum":0,"maximum":100},"verdict":{"type":"string","enum":["SAFE","SUSPICIOUS","DANGEROUS"]},"isPhishing":{"type":"boolean"},"reasons":{"type":"array","maxItems":6,"items":{"type":"string"}},"finalUrl":{"type":"string"},"redirectChain":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"string"}},"requestId":{"type":"string","description":"Unikalny identyfikator żądania, generowany przez serwer."},"analyzedAt":{"type":"string","format":"date-time"},"engineVersion":{"type":"string"},"threatDatabaseVersion":{"type":"string"},"durationMillis":{"type":"integer","minimum":0}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"limit":{"type":"integer"},"window":{"type":"string","enum":["minute","day","month"]},"retryAfterSeconds":{"type":"integer"}}}}}}