Wołaj prawdziwe endpointy read-path ipIII i zobacz odpowiedzi JSON. To odpowiedź na zarzut audytowy „API = kontrakt/fasada": read-path realnie działa. Zapis (POST/PATCH) i rejestr operacyjny = chronione/ROADMAP.
/api/incidents jest chroniony (401 dla anon). Warstwa zapisu v1 jest LIVE (JWT+RBAC+DB, sekcja niżej) —
auth-gated; OIDC/mTLS/PQC = ROADMAP hardening (patrz API produkcyjne). Kontrakt maszynowy: openapi.json./api/incidents GAP — nie mylić z v1Uwaga: zapis operacyjny działa w warstwie v1 (/api/ip3/v1/* — sekcja wyżej, LIVE auth-gated). Poniższe /api/incidents to stary placeholder (401 dla anon, status GAP) — pozostawiony dla kompatybilności, docelowo wpięcie w v1 DB (rejestr awansów demo→LIVE).
Legacy placeholder — chronione (401 anon). Realny zapis: /api/ip3/v1/incidents.
Aktualizacja statusu/działań — chronione. Zamknięcie tylko z dowodem naprawy.
Dodanie dowodu (hash/URL/chain of custody) — chronione.
Realna warstwa DB-backed (PostgreSQL + JWT + RBAC + audit + chain-of-custody). Endpointy wymagają tokenu (Bearer),
więc nie są wołalne z tego publicznego explorera — poniżej gotowy przepis curl. Dostęp demo na żądanie / staging.
Kontrakt: openapi.json. Dowód działania: 56/56 testy integracyjne na żywej bazie.
Login → JWT (role: operator/analyst/auditor/admin).
Import raportu narzędzia → normalizacja severity (P0–P3) → incydent + evidence (sha256). Import = MEDIA_SIGNAL (sygnał, nie dowód naprawy).
Board pack: JSON (manifest + package_sha256 + chain-of-custody) albo realny pobieralny PDF.
DORA/TIBER white-team-log: scope · crown-jewels · RoE · evidence-register · raport końcowy (wymaga rejestru — claim ≤ proof).
Raport TLPT (wisienka #2): engagement + timeline + evidence-register + final-report + manifest + package_sha256; JSON lub realny PDF.
Legal Trigger Engine (wisienka #3): incydent → obowiązki DORA/NIS2/RODO/AI Act + zegary (deadline ISO) + draft. DECISION-SUPPORT, nie porada prawna. Flagi: ?personal_data&high_risk&entity§or.
# 1) login -> token
TOKEN=$(curl -s -XPOST $BASE/api/ip3/v1/auth/login \
-H 'content-type: application/json' \
-d '{"email":"operator@ip3.demo","password":"<demo>"}' | jq -r .token)
# 2) import raportu Burp (XML) -> incydent + evidence
curl -s -XPOST $BASE/api/ip3/v1/imports/burp \
-H "authorization: Bearer $TOKEN" -H 'content-type: application/xml' \
--data-binary @burp-report.xml # -> {incidents:[{public_id, severity, hash_sha256}]}
# 3) board pack PDF (5 min od raportu do zarządu)
curl -s -XGET "$BASE/api/ip3/v1/reports/evidence-package/IP3-2026-XXXX?format=pdf" \
-H "authorization: Bearer $TOKEN" -o board-pack.pdf # realny PDF + nagłówek X-Package-Sha256