KRONENWERK zawiera moduł KSeF 2.0, który uwierzytelnia się tokenem KSeF podatnika, otwiera sesję interaktywną, przesyła faktury FA(3) zaszyfrowane kluczem Ministerstwa, odpytuje o numer KSeF, pobiera UPO i odczytuje faktury przychodzące. Moduł został zbudowany i przetestowany na środowiskach Ministerstwa, ale nie był używany z produkcyjnym KSeF, a KRONENWERK nie sprzedaje obecnie subskrypcji polskim firmom, dopóki nie zostanie to udowodnione. Dla przesyłania status to JESZCZE NIEGOTOWE. Państwa integracja korzystałaby ze zwykłego API wokół modułu — klienci, wersje robocze, webhooki — i nic specyficznego dla KSeF nie jest udostępniane w API.
Czym jest KSeF, w jednym akapicie
KSeF (Krajowy System e-Faktur) to polski centralny system typu clearance: faktura ustrukturyzowana w schemacie FA(3) jest przesyłana do systemu Ministerstwa Finansów, który ją waliduje, nadaje numer KSeF i zwraca urzędowe poświadczenie odbioru (UPO). Dopóki ten numer nie istnieje, plik nie jest fakturą w sensie prawnym. To odróżnia Polskę od Niemiec, gdzie zgodny plik wysłany dowolną drogą wypełnia obowiązek, oraz od Belgii, gdzie drogą jest sieć Peppol. Tło znajduje się na stronie KSeF wyjaśniony; schemat na stronie FA(3); centrum wiedzy pod adresem e-fakturowanie w Polsce.
Co robi moduł KSeF 2.0 w KRONENWERK
Moduł implementuje KSeF API 2.0 zgodnie ze specyfikacją OpenAPI opublikowaną przez Ministerstwo (ścieżki i nazwy pól skopiowane stamtąd, a nie odtworzone z pamięci). Działa per podatnik: każde wywołanie odbywa się w kontekście jednego NIP z tokenem KSeF tego podatnika, a tokeny dostępu są buforowane per NIP i odświeżane przed wygaśnięciem.
| Krok | Używane wywołania KSeF API 2.0 | Co robi moduł |
|---|---|---|
| Klucze Ministerstwa | GET /security/public-key-certificates | Wczytuje aktualne certyfikaty publiczne i wybiera ten oznaczony do KsefTokenEncryption oraz ten do SymmetricKeyEncryption; buforowane przez dwanaście godzin |
| Uwierzytelnianie tokenem KSeF | POST /auth/challenge, POST /auth/ksef-token, GET /auth/{referenceNumber}, POST /auth/token/redeem, POST /auth/token/refresh | Pobiera challenge, szyfruje token KSeF podatnika kluczem Ministerstwa, odpytuje o status uwierzytelnienia, odbiera tokeny dostępu i odświeżania (JWT) i później je odświeża |
| Sesja | POST /sessions/online | Otwiera sesję interaktywną (online) z nowym kluczem AES zaszyfrowanym kluczem Ministerstwa |
| Wysyłka | POST /sessions/online/{ref}/invoices, GET /sessions/{ref}/invoices/{invoiceRef} | Przesyła XML FA(3) zaszyfrowany kluczem sesji, a następnie odpytuje o status faktury, dopóki KSeF nie nada numeru lub nie odrzuci dokumentu |
| Zamknięcie i UPO | POST /sessions/online/{ref}/close, pobranie z upoDownloadUrl | Zamyka sesję i pobiera UPO z adresu wskazanego w statusie; numer KSeF i UPO są zapisywane przy fakturze jako dowód |
| Ochrona przed duplikatami | Status 440, POST /invoices/query/metadata | Nigdy nie wysyła ponownie bez uzgodnienia: KSeF zgłasza duplikat z numerem oryginału, a wyszukiwanie metadanych odnajduje już przyjętą fakturę |
| Odbiór | POST /invoices/query/metadata, GET /invoices/ksef/{ksefNumber} | Listuje faktury wystawione na podatnika i pobiera każdą po jej numerze KSeF w celu wczytania jako faktury zakupu |
Ministerstwo przewiduje dwie metody uwierzytelniania; moduł używa metody tokenem KSeF, w której wysyłany jest dokument JSON zawierający uprzednio uzyskany token systemowy, a nie żądanie XML podpisane XAdES. Token należy do firmy i jest jej wydawany wewnątrz KSeF; KRONENWERK przechowuje go w postaci zabezpieczonej i używa wyłącznie do uwierzytelniania. Ministerstwo dokumentuje obie metody i zaznacza, że certyfikaty samopodpisane są akceptowane wyłącznie w środowisku testowym.
Dlaczego moduł zależy od środowiska i nie jest jeszcze gotowy
Ministerstwo publikuje trzy środowiska, a moduł jest skonfigurowany w danym momencie na dokładnie jedno z nich:
| Środowisko | Host | Skutek prawny | Akceptowane formaty |
|---|---|---|---|
| TEST (release candidate) | api-test.ksef.mf.gov.pl | Brak; współdzielone między integratorami, należy używać losowych NIP | FA(2), FA(3), FA_PEF(3), FA_KOR_PEF(3) |
| DEMO (przedprodukcyjne) | api-demo.ksef.mf.gov.pl | Brak; odzwierciedla konfigurację produkcyjną i dane właścicielskie | FA(3), FA_PEF(3), FA_KOR_PEF(3) |
| PRODUKCJA | api.ksef.mf.gov.pl | Pełny skutek prawny | FA(3), FA_PEF(3), FA_KOR_PEF(3) |
Moduł KRONENWERK był ćwiczony na nieprodukcyjnych środowiskach Ministerstwa. Nie był używany z produkcyjnym KSeF, gdzie wysyłka jest czynnością prawną, od której zależy sytuacja podatkowa drugiej strony. Dopóki nie zostanie wykonana i zweryfikowana prawdziwa wysyłka z prawdziwym UPO, KRONENWERK oznacza przesyłanie jako JESZCZE NIEGOTOWE i nie sprzedaje subskrypcji polskim firmom. Jest to stwierdzenie o dowodzie, a nie o pokryciu kodu testami: różnica między „klient przechodzi swoje testy” a „Ministerstwo przyjęło naszą fakturę” jest tą, która się liczy, i tą, która wciąż pozostaje otwarta.
Samo generowanie FA(3) — tworzenie XML z faktów wersji roboczej i walidacja względem schematu — jest OBSŁUGIWANE Z OGRANICZENIAMI: dokument jest tworzony, ale plik FA(3) bez numeru KSeF nie jest fakturą, więc jego użyteczność ogranicza powyższy status przesyłania.
Jak deweloper korzystałby z API wokół modułu
Nic w API KRONENWERK nie jest specyficzne dla KSeF. Jeśli polska ścieżka stanie się dostępna, integracja wygląda dokładnie tak jak dla każdego innego kraju: praca związana z KSeF odbywa się wewnątrz wystawiania i przesyłania, które pozostają w produkcie.
- Proszę utworzyć polskiego klienta przez
POST /customers, podająccountry: "PL"i NIP nabywcy w poluvatId. FA(3) identyfikuje nabywcę po NIP, a klienta bez NIP nie można zafakturować przez KSeF. - Proszę rozpocząć wersję roboczą przez
POST /invoices/draftsz nagłówkiemIdempotency-Key. - Osoba uzupełnia i wystawia wersję roboczą w produkcie. Moduł polski renderuje XML FA(3) i go waliduje; numer jest zużywany, a zdarzenie
invoice.issuedtrafia do kolejki. - Osoba przesyła wystawioną fakturę z produktu. Moduł uwierzytelnia się tokenem KSeF firmy zapisanym w Ustawienia → Doręczanie, otwiera sesję, wysyła, odpytuje, zamyka i zapisuje numer KSeF oraz UPO. Nieznany wynik blokuje ponowną wysyłkę, dopóki zapytanie uzgadniające nie sprawdzi w KSeF, czy dokument już tam jest.
- Państwa endpoint otrzymuje
invoice.issued, a późniejinvoice.paidlubinvoice.cancelled. Numer KSeF, UPO i stan przesyłania są widoczne w produkcie i nie są dziś dostępne w API.
Co firma musi skonfigurować, gdy ścieżka będzie dostępna: dane podstawowe podmiotu prawnego z NIP (wyprowadzonym z numeru podatkowego), token KSeF wprowadzony w Ustawienia → Doręczanie — KRONENWERK natychmiast go weryfikuje, wykonując uwierzytelnione wywołanie właśnie zapisanym tokenem, i odmawia zachowania tokenu, który nie działa — a dla Państwa integracji klucz API z zakresami customers:write, customers:read, invoices:write, invoices:read i companies:read oraz endpoint webhooka. Ogólne mechanizmy API opisano na stronie API księgowego i stronie API faktur.
Podstawy KSeF API 2.0, ze źródłami
Jeśli rozważają Państwo zamiast tego integrację bezpośrednią, materiały Ministerstwa są źródłem pierwotnym i od nich należy zacząć.
- Przewodnik dla integratorów: przewodnik Ministerstwa (w aktualnej rewizji datowany na 5 maja 2026 r.) obejmuje uwierzytelnianie, uprawnienia, certyfikaty KSeF, tryby offline, kody QR, sesje interaktywne i wsadowe, pobieranie faktur, pobieranie przyrostowe, zarządzanie tokenami KSeF, klucze szyfrujące, limity i dane testowe, z przykładami w C# i Javie z jego otwartych klientów referencyjnych. github.com/CIRFMF/ksef-docs.
- OpenAPI: każde środowisko serwuje własną specyfikację pod
/docs/v2; testowa znajduje się pod adresem api-test.ksef.mf.gov.pl/docs/v2. Błędy to dokumenty problem zgodne z RFC 7807 z polemdetaili listąerrors[]. - Uwierzytelnianie: należy pobrać challenge (ważny dziesięć minut), a następnie albo wysłać XML
AuthTokenRequestpodpisany XAdES certyfikatem kwalifikowanym lub certyfikatem KSeF, albo wysłać dokument JSON z tokenem KSeF; odpytać o status; odebrać token dostępu JWT i token odświeżania. Strona uwierzytelniająca musi posiadać co najmniej jedno aktywne uprawnienie dla wybranego kontekstu (NIP, identyfikator wewnętrzny lub złożony identyfikator VAT UE). uwierzytelnianie.md. - Sesje: sesja interaktywna przyjmuje faktury pojedynczo i zwraca status dla każdej faktury; zamknięcie sesji uruchamia generowanie zbiorczego UPO. Sesja wsadowa jest udokumentowana osobno dla wysyłki masowej. Klucze publiczne do szyfrowania klucza sesji i tokenu KSeF są publikowane przez Ministerstwo i podlegają rotacji.
- Środowiska i konserwacja: TEST i DEMO nigdy nie mogą otrzymywać faktur produkcyjnych ani prawdziwych danych stron; Ministerstwo planuje prace konserwacyjne na środowiskach testowych w godzinach 16:00–18:00 i publikuje zmiany wpływające na API w swoim changelogu. srodowiska.md.
Przewodnik KSeF dla deweloperów zagłębia się w schemat i model sesji.
Jak KRONENWERK to obsługuje
JESZCZE NIEGOTOWE w zakresie przesyłania. Moduł KSeF 2.0 — uwierzytelnianie tokenem, sesja, wysyłka FA(3), pobieranie UPO i odbiór — jest zbudowany i zależny od środowiska, a nie był używany z produkcyjnym KSeF. KRONENWERK nie sprzedaje obecnie subskrypcji polskim firmom, dopóki nie zostanie to udowodnione, i nic na tej stronie nie powinno być odczytywane jako sugestia akceptacji przez administrację lub akceptacji produkcyjnej. Generowanie FA(3) jest OBSŁUGIWANE Z OGRANICZENIAMI. API nie udostępnia żadnego endpointu, zdarzenia ani pola specyficznego dla KSeF; gdy ścieżka zostanie udowodniona, integracje będą korzystać z tych samych wywołań dla klientów, wersji roboczych i webhooków co wszędzie indziej. Strona krajowa Polski znajduje się pod adresem Polska; zakres e-fakturowania produktu na stronie e-fakturowanie.
Najczęściej zadawane pytania
Czy mogę dziś używać KRONENWERK do przesyłania faktur do KSeF?
Nie. Moduł istnieje i został przetestowany na nieprodukcyjnych środowiskach Ministerstwa, ale nie był używany z produkcyjnym KSeF, a KRONENWERK nie sprzedaje obecnie polskim firmom.
Czy API udostępnia numer KSeF lub UPO?
Nie. Ani GET /invoices, ani żaden webhook nie zawiera dziś pól specyficznych dla KSeF. Są one widoczne w produkcie na fakturze.
Której metody uwierzytelniania używa moduł?
Metody tokenem KSeF: token firmy, zaszyfrowany opublikowanym kluczem publicznym Ministerstwa, jest wymieniany na tokeny JWT dostępu i odświeżania. Uwierzytelnianie podpisem XAdES jest udokumentowane przez Ministerstwo, ale nie jest używane przez moduł.
Co się dzieje, gdy wysyłka przekroczy limit czasu?
Produkt odmawia ponownej wysyłki, dopóki zapytanie uzgadniające nie sprawdzi w KSeF, czy dokument już tam jest. KSeF zgłasza także duplikaty z numerem oryginału (status 440).
Gdzie jest miarodajna dokumentacja API?
Przewodnik Ministerstwa dla integratorów na GitHubie (CIRFMF/ksef-docs) oraz specyfikacja OpenAPI serwowana przez każde środowisko pod /docs/v2.
Źródła
- KRONENWERK developer documentation — odczytano
- Ministry of Finance (Poland) — KSeF 2.0 guide for integrators — odczytano
- Ministry of Finance (Poland) — KSeF API 2.0 environments — odczytano
- Ministry of Finance (Poland) — KSeF API 2.0 authentication — odczytano
- Ministry of Finance (Poland) — KSeF 2.0 implementation stages — odczytano
- KSeF API 2.0 OpenAPI specification (test environment) — odczytano