Przejdź do treści

Technologie KSeF5 min czytania

Masowa wysyłka faktur - wydajność i limity API KSeF

Masowa wysyłka faktur w Krajowym Systemie e-Faktur (KSeF) to proces jednoczesnego przesyłania dużej liczby faktur ustrukturyzowanych za pomocą API KSeF 2.0, objęty mechanizmem rate limiting oraz limitem 4 żądań na sekundę dla eksportu paczki faktur. Przekroczenie zdefiniowanych progów skutkuje zwróceniem błędu HTTP 429, co inicjuje mechanizm sliding window blokujący kolejne zapytania w danym interwale czasowym. Użytkownicy systemów informatycznych mają możliwość wnioskowania o podwyższenie limitów wydajnościowych poprzez oficjalny formularz kontaktowy Ministerstwa Finansów, szczególnie w przypadku obsługi wolumenów przekraczających standardowe parametry przepustowości. Limity API KSeF - co dokładnie blokuje masową wysyłkę?

Limity API KSeF - co dokładnie blokuje masową wysyłkę?

Tekst opracowany z wykorzystaniem sztucznej inteligencji. Zasady i ograniczenia

Interfejs programistyczny API KSeF 2.0 nakłada rygorystyczne ograniczenia na liczbę operacji wykonywanych w jednostce czasu, co ma na celu zapewnienie stabilności infrastruktury centralnej Ministerstwa Finansów. Najważniejszym parametrem dla systemów ERP oraz platform e-fakturowania jest wydajność endpointu GET /limits/subject, który definiuje bieżące uprawnienia dla danego podmiotu. Standardowy limit dla pobierania listy metadanych faktur wynosi 8 żądań na sekundę, natomiast dla kluczowej operacji eksportu paczki faktur limit ten został ustalony na poziomie 4 żądań na sekundę.

Mechanizm sliding window (okno przesuwne) działa w cyklu jednosekundowym i resetuje się po upływie każdej sekundy od ostatniego przesłanego żądania. W praktyce oznacza to, że przesłanie 4 żądań w ciągu 1 s jest procesowane prawidłowo, jednak wysłanie 5 żądania w tym samym interwale natychmiast wywołuje odpowiedź serwera o kodzie HTTP 429. System informatyczny po stronie podatnika otrzymuje wówczas informację o czasowej blokadzie dostępu do zasobu.

Warto podkreślić, że limitowanie zapytań jest przypisane do konkretnego certyfikatu kwalifikowanego lub pieczęci elektronicznej, a nie zbiorczo do całego numeru NIP firmy. W związku z tym, wykorzystanie wielu certyfikatów dla różnych jednostek organizacyjnych może teoretycznie zwielokrotnić przepustowość, o ile architektura systemu podatnika na to pozwala. Serwer w odpowiedzi HTTP 429 przesyła nagłówek Retry-After, który precyzyjnie określa czas blokady w sekundach, po którym można ponowić próbę komunikacji.

Błąd HTTP 429 oznacza przekroczenie limitu rate limiting. Poczekaj kilka sekund przed kolejnym żądaniem.

Ministerstwo Finansów zapewnia, że infrastruktura serwerowa zlokalizowana w Polsce jest gotowa do obsługi dużego natężenia ruchu, a system został zaprojektowany w oparciu o niezależne lokalizacje. Niemniej jednak, monitorowanie odpowiedzi API pod kątem limitów jest niezbędne dla zachowania ciągłości procesów biznesowych. W przypadku wystąpienia błędu 429, system wysyłający powinien zapisać wartość Retry-After i wstrzymać kolejne zapytania dokładnie na wskazaną liczbę sekund.

Wniosek o wyższe limity - kiedy i jak to zrobić poprawnie?

Przedsiębiorstwa realizujące operacje gospodarcze na dużą skalę mogą ubiegać się o indywidualne zwiększenie przepustowości interfejsu API KSeF. Istnieją trzy twarde przesłanki uzasadniające taką prośbę: średnia dzienna liczba wystawianych faktur ustrukturyzowanych przekracza 10 tys. sztuk, występuje konieczność masowego eksportu paczek w szczytach rozliczeniowych (np. między 1 a 10 dniem miesiąca), lub specyfika branży uniemożliwia rozłożenie wysyłki w czasie, co dotyczy głównie faktur korygujących in minus generowanych automatycznie przez systemy bilingowe.

Wniosek o podwyższenie limitów składa się wyłącznie drogą elektroniczną przez formularz kontaktowy dostępny na portalu ksef.podatki.gov.pl. Należy pamiętać, że decyzja o zwiększeniu parametrów dotyczy tylko środowiska produkcyjnego, a czas rozpatrzenia dokumentacji przez służby techniczne Ministerstwa Finansów wynosi do 14 dni roboczych. Rekomenduje się dołączenie wykresu obciążenia systemu z ostatnich 30 dni, co znacząco przyspiesza proces weryfikacji zasadności wniosku.

Prawidłowo sformułowane uzasadnienie powinno zawierać konkretne dane techniczne i operacyjne. Przykładowy fragment uzasadnienia może brzmieć: „Wnioskuję o limit 20 req/s dla endpointu /invoice/batch/export. W szczycie miesiąca wystawiamy 35 tys. faktur w 2 h, co przy obecnym limicie 4 req/s wymagałoby 146 minut zamiast planowanych 10 minut”. Precyzyjne wskazanie punktu styku oraz spodziewanego wolumenu danych ułatwia administratorom KSeF dostosowanie parametrów rate limitingu do potrzeb podatnika.

Parametr wniosku Wartość progowa Uwagi techniczne
Wolumen dobowy > 10 000 faktur Wymaga udokumentowania w logach systemu
Środowisko Produkcyjne Brak możliwości zwiększenia limitów na test/demo
Czas procesowania 14 dni roboczych Wniosek przez formularz ksef.podatki.gov.pl

Optymalizacja kodu - 5 trików, które faktycznie zmniejszają liczbę zapytań

Redukcja liczby zapytań do API KSeF jest możliwa poprzez wdrożenie zaawansowanych mechanizmów paczkowania oraz cache'owania danych po stronie klienta. Zamiast wysyłania 100 pojedynczych żądań metodą POST /invoice, należy wykorzystać pojedyncze żądanie /invoice/batch, które pozwala na przesłanie tablicy zawierającej do 100 elementów XML w jednej sesji komunikacyjnej. Zastosowanie tej metody pozwala na skrócenie łącznego czasu komunikacji z serwerem z około 25 s do zaledwie 1 s, przy zachowaniu limitów wagowych paczki do 10 MB.

Kolejnym skutecznym rozwiązaniem jest implementacja lokalnego bufora metadanych. Pobieranie listy metadanych raz na 5 minut i przechowywanie ich w pamięci operacyjnej systemu (np. Redis lub Memcached) pozwala na wyeliminowanie około 80 % powtórnych zapytań GET /invoice/metadata. Dzięki temu system operuje na danych lokalnych, odciążając łącze do serwerów Ministerstwa Finansów i minimalizując ryzyko otrzymania błędu 429.

W przypadku wystąpienia limitów rate limiting, kluczowe jest zastosowanie algorytmu wykładniczego wstrzymania (exponential backoff). Przykładowa implementacja w logice aplikacji powinna zakładać progresywne wydłużanie czasu oczekiwania po każdym błędzie 429:

if (response.status == 429) {

  wait_time = Math.pow(2, attempt) * 1000;

  sleep(wait_time);

}

Testy przeprowadzone przez operatorów EDI wskazują, że zastosowanie backoffu 2^x redukuje liczbę błędów typu 429 o 70 % w warunkach wysokiego obciążenia. Dodatkowo, należy ustawić timeout dla połączeń na poziomie 30 s, ponieważ procesowanie bardzo dużych paczek (bliskich limitowi 10 MB) może trwać dłużej niż standardowe zapytania synchroniczne. Przekroczenie maksymalnego rozmiaru paczki skutkuje zwróceniem błędu HTTP 413 (Payload Too Large).

FAQ - najszybsze odpowiedzi na pytania po 429

Ile dokładnie sekund czekać po 429?
Należy odczekać tyle sekund, ile wskaże serwer w nagłówku Retry-After (zazwyczaj od 1 do 3 s). W przypadku braku tego nagłówka w odpowiedzi, bezpiecznym interwałem przed kolejną próbą jest 5 s.
Czy limit 4 req/s dotyczy całej firmy?
Nie, limit jest nakładany na pojedynczy token autoryzacyjny powiązany z konkretnym certyfikatem lub pieczęcią. Użycie dwóch różnych certyfikatów pozwala na uzyskanie łącznej przepustowości 8 req/s (2 × 4 req/s).
Jak sprawdzić swój bieżący limit?
Aktualne limity można zweryfikować, wysyłając żądanie GET /limits/subject. Serwer zwróci dokument JSON zawierający klucze batchExport oraz metadataList z przypisanymi wartościami liczbowymi.
Czy za przekroczenie grozi kara?
Samo przekroczenie limitów API nie podlega sankcjom finansowym. Jednakże skutkuje ono odrzuceniem dokumentów, co od 1 stycznia 2027 r. może prowadzić do kar za niewystawienie faktury w systemie KSeF w wymaganym terminie.

Redakcja · wszystkie artykuły