Zmiany w API 2.0
Wersja 2.3.0
Wysyłka wniosku certyfikacyjnego (POST /certificates/enrollments)
Zwiększono limity dla identyfikatorów PESEL oraz fingerprint:- liczba wniosków o certyfikat KSeF: z 6 do 12,
- liczba aktywnych certyfikatów KSeF: z 2 do 6.
Wysyłka faktur
- Zaostrzono walidację wejściowego XML: prolog jest opcjonalny, jednak jeśli się pojawi i wskazuje inne kodowanie niż UTF-8, dokument zostanie odrzucony (faktura powinna być zapisana w kodowaniu UTF-8).
- Doprecyzowano wartość pola
Valuedla schemyFA_RR (1) 1-1E: zamiastRRnależy przekazywaćFA_RR(zgodnie z wartościąTKodFormularzaw XSD).
Pobranie faktur
- Rozszerzono obsługę
formTypedla fakturRRo wartośćFA_RR(spójnie z mechanizmem wysyłki faktur). Na środowisku TEST akceptowane sąRR(do 30.03) orazFA_RR, natomiast na PRD akceptowana będzie wyłącznieFA_RR. - Umożliwiono wyszukiwanie faktur po ujemnych kwotach w filtrze
amount- dopuszczono wartości ujemne wamount.fromiamount.to.
- Rozszerzono obsługę
Eksport paczki faktur (POST
/invoices/exports)- Rozszerzono model żądania o właściwość boolean
onlyMetadata(domyślnie:false):onlyMetadata=false - bez zmian: eksport zawiera faktury oraz plik_metadata.json,onlyMetadata=true - eksport zawiera wyłącznie plik_metadata.json, co umożliwia szybsze i lżejsze eksporty w scenariuszach wymagających jedynie metadanych.
- Rozszerzono model żądania o właściwość boolean
OpenAPI
- Rozszerzono
ForbiddenProblemDetails.reasonCodeo wartośćcontext-type-not-allowed("Operacja nie jest dostępna dla uwierzytelnionego typu kontekstu"). - Poprawiono definicję
securitySchemes.Bearer- ustawionoscheme:bearer(z małej litery), zgodnie ze specyfikacją. - Drobne aktualizacje opisów i przykładów.
- Rozszerzono
Wersja 2.2.1
- Wysyłka faktur
Dodano nową wersję (1-1E) schemyFA_RR (1).
SchemaFA_RR (1) 1-0Ebędzie obsługiwana na środowisku TEST do 23.04. SchemaFA_RR (1) 1-1Ebędzie obowiązywać na środowisku PRD od 01.04.
Wersja 2.2.0
Uprawnienia
Dodano nowy endpoint (POST/permissions/query/entities/grants) umożliwiający pobranie listy uprawnień do obsługi faktur w bieżącym kontekście (zwracane uprawnienia:InvoiceWrite,InvoiceRead- nadane przez inny podmiot).Uwierzytelnianie
Rozszerzono odpowiedź POST/auth/challengeo właściwośćclientIp, zwracające adres IP klienta zarejestrowany przez KSeF. Wartość może zostać bezpośrednio wykorzystana do budowyAuthorizationPolicyw kolejnych krokach uwierzytelniania.OpenAPI
- Rozszerzono odpowiedzi
401 Unauthorizedi403 Forbiddeno ustandaryzowany format błędu "Problem Details" (application/problem+json). Dodano schematyUnauthorizedProblemDetailsorazForbiddenProblemDetails.ForbiddenProblemDetailsudostępnia m.in. właściwośćreasonCodeoraz opcjonalny obiektsecurityna potrzeby dodatkowych informacji. - Przywrócono (dotyczy tylko specyfikacji OpenAPI)
additionalPropertiesdla pól słownikowych:InvoiceStatusInfo.extensionsorazPartUploadRequest.headers. - Drobne aktualizacje opisów.
- Rozszerzono odpowiedzi
Eksport paczki faktur (POST
/invoices/exports).
Poprawiono generowanie pliku_metadata.jsonw paczce eksportu - przy dużej liczbie faktur plik mógł być wcześniej ucięty (nieprawidłowy JSON).
Wersja 2.1.2
Wysyłka faktur
Dodano obsługę faktur RR (schemat_RR(1)_v1-0E).Wygenerowanie nowego tokena (POST
/tokens)
W modelu żądania (GenerateTokenRequest) rozszerzono właściwośćpermissions(enumTokenPermissionType) o wartośćIntrospection, umożliwiając nadanie tego uprawnienia podczas generowania tokenu.Eksport paczki faktur (POST
/invoices/exports). Pobranie listy metadanych faktur (POST/invoices/query/metadata)
Naprawiono interpretację parametrówdateRange.from/dateRange.topodawanych bez offsetu. Wartości bez strefy czasowej są teraz jednoznacznie interpretowane zgodnie z dokumentacją (czas lokalny Europe/Warsaw).OpenAPI
UsuniętoadditionalProperties:falsew wybranych modelach. Zmiana porządkująca specyfikację i uelastyczniająca kontrakt - dopuszcza możliwość pojawiania się dodatkowych właściwości w żądaniach lub odpowiedziach (np. w ramach rozszerzeń). Dodanie nowej właściwości nie jest traktowane jako złamanie kontraktu; klienci API powinni ignorować nieznane właściwości.
Wersja 2.1.1
- Uwierzytelnianie
- Pobranie statusu uwierzytelniania (GET
/auth/{referenceNumber}) oraz Pobranie listy aktywnych sesji (GET/auth/sessions)
Uzupełniono definicjęauthenticationMethodInfo- oznaczono właściwościcategory,codeorazdisplayNamejakorequiredw modelu odpowiedzi. - Uwierzytelnienie z wykorzystaniem podpisu XAdES (POST
/auth/xades-signature)
Dodano możliwość wcześniejszego włączenia nowych wymagań walidacji XAdES na środowiskach DEMO i PRD poprzez nagłówek:X-KSeF-Feature:enforce-xades-compliance.
- Pobranie statusu uwierzytelniania (GET
Wersja 2.1.0
Uwierzytelnianie
Dodano integrację z Węzłem Krajowym (login.gov.pl). Endpoint wykorzystywany do tej integracji nie jest publicznie dostępny (metoda uwierzytelnienia przeznaczona wyłącznie dla aplikacji rządowych).
Pobranie statusu uwierzytelniania (GET
/auth/{referenceNumber}) oraz Pobranie listy aktywnych sesji (GET/auth/sessions)- Oznaczono w modelu odpowiedzi właściwość
authenticationMethodjakodeprecated. Planowane wycofanie:2026-11-16. Aby zachować kompatybilność kontraktu w okresie przejściowym wartośćTrustedProfileobejmuje zarówno "Profil Zaufany", jak i uwierzytelnienia realizowane przez Węzeł Krajowy. - Dodano nową właściwość
authenticationMethodInfojako elastyczny opis metody uwierzytelniania:category- kategoria metody uwierzytelnienia (enum:XadesSignature,NationalNode,Token,Other),code- kod metody uwierzytelnienia (string),displayName- nazwa metody uwierzytelnienia do wyświetlenia użytkownikowi (string).
- Rozszerzono możliwe wartości pola details dla statusu
460("Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu") o: "Certyfikat zawieszony".
- Oznaczono w modelu odpowiedzi właściwość
Uwierzytelnienie z wykorzystaniem podpisu XAdES (POST
/auth/xades-signature)
Ujednolicono i zaostrzono walidację podpisu XAdES w procesie uwierzytelniania, tak aby akceptowane były wyłącznie podpisy zgodne z wymaganiami profili XAdES.
Nowe wymagania obowiązują już na środowisku TEST. Na środowiskach DEMO i PRD zaczną obowiązywać 16 marca 2026 (zalecamy weryfikację integracji na TEST przed tą datą).
Dane testowe
Dodano nowe endpointy:- POST
/testdata/context/block- "Blokuje możliwość uwierzytelniania dla wskazanego kontekstu. Uwierzytelnianie zakończy się błędem 480.", - POST
/testdata/context/unblock- odblokowuje możliwość uwierzytelniania dla bieżącego kontekstu.
- POST
OpenAPI
Drobne aktualizacje opisów.
Wersja 2.0.1
Uprawnienia
- Pobranie listy własnych uprawnień (POST
/permissions/query/personal/grants).- Poprawiono logikę zwracania listy "Moje uprawnienia" dla właściciela kontekstu - w wynikach zwracane są również uprawnienia podmiotowe do wystawiania i przeglądania faktur (
InvoiceWrite,InvoiceRead) nadane bez prawa do dalszego przekazywaniacanDelegate = false. Wcześniej lista zwracała tylko te z prawem do dalszego przekazywania. - Dodano opis dla wartości
InternalIdwPersonalPermissionsContextIdentifierType; - Zaktualizowano ograniczenia długości
PersonalPermissionsContextIdentifier.value(maxLengthz 10 na 16).
- Poprawiono logikę zwracania listy "Moje uprawnienia" dla właściciela kontekstu - w wynikach zwracane są również uprawnienia podmiotowe do wystawiania i przeglądania faktur (
- Poprawiono przykłady w dokumentacji OpenAPI dla endpointów uprawnień.
- Pobranie listy własnych uprawnień (POST
Pobieranie faktur
Doprecyzowano walidacjędateRangewInvoiceQueryFilters: zakres 3 miesięcy uznawany jest za poprawny, jeśli mieści się w trzech miesiącach w UTC lub w czasie polskim.Wysyłka faktur
- Walidacja numeru NIP
Dodano weryfikację sumy kontrolnej NIP dla:Podmiot1,Podmiot2,Podmiot3orazPodmiotUpowazniony(jeśli występuje) - dotyczy tylko środowiska produkcyjnego. - Walidacja NIP w identyfikatorze wewnętrznym
Dodano weryfikację sumy kontrolnej NIP wInternalIddlaPodmiot3(jeśli identyfikator występuje) - dotyczy tylko środowiska produkcyjnego. - Aktualizacja dokumentacji.
- Walidacja numeru NIP
OpenAPI
Drobne aktualizacje opisów.
Wersja 2.0.0
UPO
Zgodnie z zapowiedzią z RC6.0, od2025-12-22domyślnie zwracana jest wersja UPO v4-3.Status sesji (GET
/sessions/{referenceNumber})- Rozszerzono model odpowiedzi o właściwości
dateCreated("Data utworzenia sesji") orazdateUpdated("Data ostatniej aktywności w ramach sesji").
- Rozszerzono model odpowiedzi o właściwości
Zamknięcie sesji wsadowej (POST
/sessions/batch/{referenceNumber}/close)- Dodano kod błędu
21208("Czas oczekiwania na requesty upload lub finish został przekroczony").
- Dodano kod błędu
Pobranie faktury/UPO
- Dodano nagłówek
x-ms-meta-hash(skrótSHA-256,Base64) w odpowiedziach200dla endpointów:- GET
/invoices/ksef/{ksefNumber}, - GET
/sessions/{referenceNumber}/invoices/ksef/{ksefNumber}/upo, - GET
/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}/upo, - GET
/sessions/{referenceNumber}/upo/{upoReferenceNumber}.
- GET
- Dodano nagłówek
Pobranie statusu uwierzytelniania (GET
/auth/{referenceNumber})- Uzupełniono dokumentację HTTP 400 (Bad Request) o kod błędu
21304("Brak uwierzytelnienia") - operacja uwierzytelniania o numerze referencyjnym {referenceNumber} nie została znaleziona. - Rozszerzono status
450("Uwierzytelnianie zakończone niepowodzeniem z powodu błędnego tokenu") o dodatkową przyczynę: "Nieprawidłowe wyzwanie autoryzacyjne".
- Uzupełniono dokumentację HTTP 400 (Bad Request) o kod błędu
Pobranie tokenów dostępowych (POST
/auth/token/redeem)
Uzupełniono dokumentację HTTP 400 (Bad Request) o kody błędów:21301- "Brak autoryzacji":- Tokeny dla operacji {
referenceNumber} zostały już pobrane, - Status uwierzytelniania ({
operation.Status}) nie pozwala na pobranie tokenów, - Token KSeF został unieważniony.
- Tokeny dla operacji {
21304- "Brak uwierzytelnienia" - Operacja uwierzytelniania {referenceNumber} nie została znaleziona,21308- "Próba wykorzystania metod autoryzacyjnych osoby zmarłej".
Odświeżenie tokena dostępowego (POST
/auth/token/refresh)
Uzupełniono dokumentację HTTP 400 (Bad Request) o kody błędów:21301- "Brak autoryzacji":- Status uwierzytelniania ({
operation.Status}) nie pozwala na pobranie tokenów, - Token KSeF został unieważniony.
- Status uwierzytelniania ({
21304- "Brak uwierzytelnienia" - Operacja uwierzytelniania {referenceNumber} nie została znaleziona,21308- "Próba wykorzystania metod autoryzacyjnych osoby zmarłej".
Wysyłka interaktywna (POST
/sessions/online/{referenceNumber}/invoices)
Uzupełniono dokumentację kodów błędów o:21402"Nieprawidłowy rozmiar pliku" - długość treści nie zgadza się z rozmiarem pliku,21403„Nieprawidłowy skrót pliku" - skrót treści nie zgadza się ze skrótem pliku.
Eksport paczki faktur (POST
/invoices/exports). Pobranie listy metadanych faktur (POST/invoices/query/metadata)
Zmniejszono maksymalny dozwolony zakresdateRangez 2 lat do 3 miesięcy.Uprawnienia
- Dodano atrybut
requireddla właściwościsubjectDetails("Dane podmiotu, któremu nadawane są uprawnienia") we wszystkich endpointach nadających uprawnienia (`/permissions/.../grants). - Dodano atrybut
requireddla właściwościeuEntityDetails("Dane podmiotu unijnego, w kontekście którego nadawane są uprawnienia") w endpoint POST/permissions/eu-entities/administration/grants("Nadanie uprawnień administratora podmiotu unijnego"). - Dodano wartość
PersonByFingerprintWithIdentifier("Osoba fizyczna posługująca się certyfikatem niezawierającym identyfikatora NIP ani PESEL, ale mająca NIP lub PESEL") do enumEuEntityPermissionSubjectDetailsTypew enpoint POST/permissions/eu-entities/administration/grants("Nadanie uprawnień administratora podmiotu unijnego"). - Zmieniono typ właściwości
subjectEntityDetailsnaPermissionsSubjectEntityByIdentifierDetails("Dane podmiotu uprawnionego") w modelu odpowiedzi w POST/permissions/query/authorizations/grants("Pobranie listy uprawnień podmiotowych do obsługi faktur"). - Zmieniono typ właściwości
subjectEntityDetailsnaPermissionsSubjectEntityByFingerprintDetails("Dane podmiotu uprawnionego") w modelu odpowiedzi w POST/permissions/query/eu-entities/grants("Pobranie listy uprawnień administratorów lub reprezentantów podmiotów unijnych uprawnionych do samofakturowania"). - Zmieniono typ właściwości
subjectPersonDetailsnaPermissionsSubjectPersonByFingerprintDetails("Dane osoby uprawnionej") w modelu odpowiedzi w POST/permissions/query/eu-entities/grants("Pobranie listy uprawnień administratorów lub reprezentantów podmiotów unijnych uprawnionych do samofakturowania"). - Wprowadzono walidację sumy kontrolnej dla identyfikatora
InternalIdw POST/permissions/subunits/grants("Nadanie uprawnień administratora podmiotu podrzędnego"). - Doprecyzowano opisy właściwości.
- Dodano atrybut
OpenAPI
- Uzupełniono dokumentację odpowiedzi
429o zwracany nagłówekRetry-Afteroraz treść odpowiedziTooManyRequestsResponse. - Doprecyzowano opisy właściwości typu
byte- wartości są przekazywane jako dane binarne zakodowane w formacieBase64. - Poprawiono literówki w specyfikacji.
- Uzupełniono dokumentację odpowiedzi
Wersja 2.0.0 RC6.1
Nowa adresacja środowisk
Udostępnienie nowych adresów. Zmiany w sekcji środowiska KSeF API 2.0.Uwierzytelnianie - pobranie statusu (GET
/auth/{referenceNumber})
Dodano kod480- Uwierzytelnienie zablokowane: "Podejrzenie incydentu bezpieczeństwa. Skontaktuj się z Ministerstwem Finansów przez formularz zgłoszeniowy."Uprawnienia
- Rozszerzono reguły dostępu dla operacji sesji (GET/POST
/sessions/...): do listy akceptowanych uprawnień dodanoEnforcementOperations(organ egzekucyjny). - Dodano ograniczenia długości dla właściwości typu string:
minLengthorazmaxLength. - Dodano
id(Asc) jako drugi klucz sortowania w metadanychx-sortdla zapytań wyszukujących uprawnienia. Domyślna kolejność:dateCreated(Desc), następnieid(Asc) - zmiana porządkowa zwiększająca deterministyczność paginacji. - Dodano walidację właściwości
IdDocument.countryw endpoint POST/permissions/persons/grants("Nadanie osobom fizycznym uprawnień do pracy w KSeF") - wymagana zgodność z ISO 3166-1 alpha-2 (np.PL,DE,US). - "Pobranie listy uprawnień administratorów lub reprezentantów podmiotów unijnych uprawnionych do samofakturowania" (POST
/permissions/query/eu-entities/grants):- usunięto walidację pattern (regex) oraz doprecyzowano opis właściwości
EuEntityPermissionsQueryRequest.authorizedFingerprintIdentifier. - doprecyzowano opis właściwości
EuEntityPermissionsQueryRequest.vatUeIdentifier.
- usunięto walidację pattern (regex) oraz doprecyzowano opis właściwości
- Rozszerzono reguły dostępu dla operacji sesji (GET/POST
Sesja interaktywnej
Dodano nowe kody błędów dla POST/sessions/online/{referenceNumber}/invoices("Wysłanie faktury"):21166- Korekta techniczna niedostępna.21167- Status faktury nie pozwala na korektę techniczną.
Limity API
- Zwiększono limit godzinowy dla grupy
invoiceStatus(pobranie statusu faktury z sesji) z 720 na 1200 req/h:- GET /sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}.
- Zwiększono limit godzinowy dla grupy
sessionMisc(zasoby GET/sessions/*) z 720 do 1200 req/h:- GET
/sessions/{referenceNumber}, - GET
/sessions/{referenceNumber}/invoices/ksef/{ksefNumber}/upo, - GET
/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}/upo, - GET
/sessions/{referenceNumber}/upo/{upoReferenceNumber}.
- GET
- Zmniejszono limit godzinowy dla grupy
batchSession(otwarcie/zamknięcie sesji wsadowej) z 120 na 60 req/h:- POST
/sessions/batch, - POST
/sessions/batch/{referenceNumber}/close.
- POST
- Zwiększono limity dla endpointu
/invoices/exports/{referenceNumber}("Pobranie statusu eksportu paczki faktur") poprzez dodanie nowej grupyinvoiceExportStatuso parametrach: 10 req/s, 60 req/min, 600 req/h.
- Zwiększono limit godzinowy dla grupy
Otwarcie sesji wsadowej (POST
/sessions/batch)
Usunięto z modeluBatchFilePartInfowłaściwośćfileName(wcześniej oznaczoną jako deprecated; x-removal-date: 2025-12-07).Inicjalizacja uwierzytelnienia (POST
/auth/challenge)
Dodano właściwośćtimestampMs(int64) w modelu odpowiedzi - czas wygenerowania challenge w milisekundach od 1.01.1970 (Unix).Dane testowe
- Doprecyzowano typ właściwości
expectedEndDate: format:datew (POST/testdata/attachment/revoke). - Usunięto wartość
Tokenz enumSubjectIdentifierTypew endpoint POST/testdata/limits/subject/certificate. Wartość była nieużywana: w KSeF podmiot nie może być "tokenem" - tożsamość zawsze wynika zNIP/PESELlub odcisku palca certyfikatu, który przenosi tożsamość podmiotu, który go utworzył.
- Doprecyzowano typ właściwości
OpenAPI
Zwiększono maksymalną wartośćpageSizez 500 do 1000 dla endpointów:- GET
/sessions - GET
/sessions/{referenceNumber}/invoices - GET
/sessions/{referenceNumber}/invoices/failed
- GET
Wersja 2.0.0 RC6.0
Limity API
- Na środowisku TE (testowe) włączono i zdefiniowano politykę limitów api z wartościami 10x wyższymi niż na PRD; szczegóły: "Limity na środowiskach".
- Na środowisku TR (DEMO) włączono limity api z wartościami identycznymi jak na PRD. Wartości są replikowane z produkcji; szczegóły: "Limity na środowiskach".
- Dodano endpoint POST
/testdata/rate-limits/production- ustawia w bieżącym kontekście wartości limitów api zgodne z profilem produkcyjnym. Dostępny tylko na środowisku TE.
Eksport paczki faktur (POST
/invoices/exports). Pobranie listy metadanych faktur (POST/invoices/query/metadata)- Dodano dokument High Water Mark (HWM) opisujący mechanizm zarządzania kompletnością danych w czasie.
- Zaktualizowano Przyrostowe pobieranie faktur o zalecenia wykorzystania mechanizmu
HWM. - Rozszerzono model odpowiedzi o właściwość
permanentStorageHwmDate(string, date-time, nullable). Dotyczy wyłącznie zapytań zdateType = PermanentStoragei oznacza punkt, poniżej którego dane są kompletne; dladateType = Issue/Invoicing- null. - Dodano właściwość
restrictToPermanentStorageHwmDate(boolean, nullable) w obiekciedateRange, który włącza mechanizm High Water Mark (HWM) i ogranicza zakres dat do bieżącej wartościHWM. Dotyczy wyłącznie zapytań zdateType = PermanentStorage. Zastosowanie parametru znacząco redukuje duplikaty między kolejnymi eksportami i zapewnia spójność podczas długotrwałej synchronizacji przyrostowej.
UPO - aktualizacja XSD do v4-3
Zmieniono wzorzec (
pattern) elementuNumerKSeFDokumentu, aby dopuszczał także numery KSeF generowane dla faktur z KSeF 1.0 (36 znaków).Dodano element
TrybWysylki- tryb przesłania dokumentu do KSeF:OnlinelubOffline.Zmieniono wartość
NazwaStrukturyLogicznejna format : Schemat_{systemCode}_v{schemaVersion}.xsd (np. Schemat_FA(3)_v1-0E.xsd).Zmieniono wartość
NazwaPodmiotuPrzyjmujacegona środowiskach testowych poprzez dodanie sufiksu z nazwą środowiska:TE: Ministerstwo Finansów - środowisko testowe (TE),TR: Ministerstwo Finansów - środowisko przedprodukcyjne (TR).
PRD: bez zmian - Ministerstwo Finansów.Obecnie domyślnie zwracane jest UPO v4-2. Aby otrzymać UPO v4-3, należy dodać nagłówek:
X-KSeF-Feature: upo-v4-3przy otwieraniu sesji (online/wsadowej).Od
2025-12-22domyślną wersją będzie UPO v4-3.XSD UPO v4-3: schema.
Status sesji (GET
/sessions/{referenceNumber})
Doprecyzowano opis kodu440- Sesja anulowana: możliwe przyczyny to "Przekroczono czas wysyłki" lub "Nie przesłano faktur".Status faktury (GET
/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber})
Dodano typInvoiceStatusInfo(rozszerzaStatusInfo) o poleextensions- obiekt z ustrukturyzowanymi szczegółami statusu. Poledetailspozostaje bez zmian. Przykład (duplikat faktury):json"status": { "code": 440, "description": "Duplikat faktury", "details": [ "Duplikat faktury. Faktura o numerze KSeF: 5265877635-20250626-010080DD2B5E-26 została już prawidłowo przesłana do systemu w sesji: 20250626-SO-2F14610000-242991F8C9-B4" ], "extensions": { "originalSessionReferenceNumber": "20250626-SO-2F14610000-242991F8C9-B4", "originalKsefNumber": "5265877635-20250626-010080DD2B5E-26" } }Uprawnienia
Dodano właściwośćsubjectDetails- "Dane podmiotu, któremu nadawane są uprawnienia" do wszystkich endpointów nadających uprawnienia (/permissions/.../grants). W RC6.0 pole jest opcjonalne; od 2025-12-19 będzie wymagane.Wyszukiwanie nadanych uprawnień (POST
/permissions/query/authorizations/grants)
Rozszerzono reguły dostępu oPefInvoiceWrite.Dane testowe - załączniki (POST /testdata/attachment/revoke)
Rozszerzono model żądaniaAttachmentPermissionRevokeRequesto poleexpectedEndDate(opcjonalne) - data wycofania zgody na przesyłanie faktur z załącznikiem.OpenAPI
- Dodano odpowiedź HTTP
429- "Too Many Requests" do wszystkich endpointów. We właściwościdescriptiontej odpowiedzi publikowana jest tabelaryczna prezentacja limitów (req/s,req/min,req/h) oraz nazwy grupy limitowej przypisanej do endpointu. Mechanizm i semantyka429pozostają zgodne z opisem w dokumentacji limitów. - Do każdego endpointu dodano metadane
x-rate-limitsz wartościami limitów (req/s,req/min,req/h). - Usunięto jawne właściwości
exclusiveMaximum:falseiexclusiveMinimum:falsez definicji liczbowych (pozostawiono tylko minimum/maximum). Zmiana porządkująca – bez wpływu na walidację (w OpenAPI domyślne wartości tych właściwości tofalse). - Dodano ograniczenia długości dla właściwości typu string:
minLength. - Usunięto jawne ustawienia
style:formdla parametrów w in: query. - Zmieniono kolejność wartości enuma
BuyerIdentifierType(obecnie:None,Other,Nip,VatUe). Zmiana porządkowa - bez wpływu na działanie. - Poprawiono literówkę w opisie właściwości
KsefNumber. - Doprecyzowano format właściwości
PublicKeyCertificatereprezentującej dane binarne kodowaneBase64, ustawiono format:byte. - Wprowadzono drobne korekty językowe i interpunkcyjne w polach
description.
- Dodano odpowiedź HTTP
Wersja 2.0.0 RC5.7
Otwarcie sesji wsadowej (POST
/sessions/batch)
Oznaczono w modelu żądaniaBatchFilePartInfo.fileNamejakodeprecated(planowane usunięcie: 2025-12-05).Statusy operacji asynchronicznych
Dodano status550- "Operacja została anulowana przez system". Opis: "Przetwarzanie zostało przerwane z przyczyn wewnętrznych systemu. Spróbuj ponownie."OpenAPI
- Dodano ograniczenia liczby elementów w tablicy:
minItems,maxItems. - Dodano ograniczenia długości dla właściwości typu string:
minLengthorazmaxLength. - Zaktualizowano opisy właściwości (
invoiceMetadataAuthorizedSubject.role,invoiceMetadataBuyer,invoiceMetadataThirdSubject.role,buyerIdentifier). - Zaktualizowano regex patterny dla
vatUeIdentifier,authorizedFingerprintIdentifier,internalId,nipVatUe,peppolId.
- Dodano ograniczenia liczby elementów w tablicy:
Wersja 2.0.0 RC5.6
Pobranie statusu sesji (GET
/sessions/{referenceNumber})
Dodano w odpowiedzi poleUpoPageResponse.downloadUrlExpirationDate- data i godzina wygaśnięcia adresu pobrania UPO; po tym momenciedownloadUrlnie jest już aktywny.Pobranie listy metadanych certyfikatów (POST
/certificates/query)
Rozszerzono odpowiedź (CertificateListItem) o właściwośćrequestDate- data złożenia wniosku certyfikacyjnego.Pobranie listy dostawców usług Peppol (GET
/peppol/query)- Rozszerzono model odpowiedzi o pole
dateCreated- data rejestracji dostawcy usług Peppol w systemie. - Oznaczono właściwość
dateCreated,id,namew modelu odpowiedzi jako zawsze zwracaną. - Zdefiniowano schemat
PeppolI(string, 9 znaków) i zastosowano wPeppolProvider.
- Rozszerzono model odpowiedzi o pole
OpenAPI
- Dodano metadane
x-sortdo wszystkich endpointów zwracających listy. W opisach endpointów dodano sekcję Sortowanie z domyślnym porządkiem (np. "requestDate (Desc)"). - Dodano ograniczenia długości dla właściwości typu string:
minLengthorazmaxLength. - Doprecyzowano format właściwości reprezentujących dane binarne kodowane
Base64: ustawiono format:byte(encryptedInvoiceContent,encryptedSymmetricKey,initializationVector,encryptedToken). - Zdefiniowano wspólny schemat
Sha256HashBase64i zastosowano go do wszystkich właściwości reprezentujących skrótSHA-256wBase64(m.in.invoiceHash). - Zdefiniowano wspólny schemat
ReferenceNumber(string, długość 36) i zastosowano go do wszystkich parametrów i właściwości reprezentujących numer referencyjny operacji asynchronicznej (w ścieżkach, zapytaniach i odpowiedziach). - Zdefiniowano wspólny schemat
Nip(string, 10 znaków, regex pattern) i zastosowano go do wszystkich właściwości reprezentujących NIP. - Zdefiniowano schemat
Pesel(string, 11 znaków, regex pattern) i zastosowano go we właściwości reprezentującej PESEL. - Zdefiniowano wspólny schemat
KsefNumber(string, 35-36 znaków, regex pattern) i zastosowano go do wszystkich właściwości reprezentujących numer KSeF. - Zdefiniowano schemat
Challenge(string, 36 znaków) i zastosowano wAuthenticationChallengeResponse.challenge. - Zdefiniowano wspólny schemat
PermissionId(string, 36 znaków) i zastosowano go we wszystkich miejscach: w parametrach oraz we właściwościach odpowiedzi. - Dodano wyrażenia regularne dla wybranych pól tekstowych.
- Dodano metadane
Wersja 2.0.0 RC5.5
Pobranie aktualnych limitów API (GET
/api/v2/rate-limits)
Dodano endpoint zwracający efektywne limity wywołań API w układzieperSecond/perMinute/perHourdla poszczególnych obszarów (m.in.onlineSession,batchSession,invoiceSend,invoiceStatus,invoiceExport,invoiceDownload,other).Status faktury w sesji
Rozszerzono odpowiedź dla GET/sessions/{referenceNumber}/invoices("Pobranie faktur sesji") oraz GET/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}("Pobranie statusu faktury z sesji") o właściwości:upoDownloadUrlExpirationDate- "data i godzina wygaśnięcia adresu. Po tej dacie linkUpoDownloadUrlnie będzie już aktywny". Rozszerzono opisupoDownloadUrl.Usunięcie pól *InMib (zmiana zgodna z zapowiedzią z 5.3)
Usunięto właściwościmaxInvoiceSizeInMiborazmaxInvoiceWithAttachmentSizeInMib. Zmiana dotyczy:- GET
/limits/context– odpowiedzi (onlineSession,batchSession), - POST
/testdata/limits/context/session– modelu żądania (onlineSession,batchSession), - Modeli:
BatchSessionContextLimitsOverride,BatchSessionEffectiveContextLimits,OnlineSessionContextLimitsOverride,OnlineSessionEffectiveContextLimits. Do wskazywania rozmiarów używane są wyłącznie pola *InMB (1 MB = 1 000 000 B).
- GET
Usunięcie
operationReferenceNumber(zmiana zgodna z zapowiedzią z 5.3)
Usunięto właściwośćoperationReferenceNumberz modelu odpowiedzi; jedyną obowiązującą nazwą jestreferenceNumber. Zmiana obejmuje:- GET
/invoices/exports/{referenceNumber}- "Status eksportu paczki faktur", - POST
/permissions/operations/{referenceNumber}- "Pobranie statusu operacji uprawnień".
- GET
Eksport paczki faktur (POST
/invoices/exports)- Dodano nowy kod błędu:
21182- "Osiągnięto limit trwających eksportów. Dla uwierzytelnionego podmiotu w bieżącym kontekście osiągnięto maksymalny limit {count} równoczesnych eksportów faktur. Spróbuj ponownie później". - Rozszerzono modelu odpowiedzi o właściwość
packageExpirationDatewskazującą datę wygaśnięcia przygotowanej paczki. Po upływie tej daty paczka nie będzie dostępna do pobrania. - Dodano kod błędu
210- "Eksport faktur wygasł i nie jest już dostępny do pobrania".
- Dodano nowy kod błędu:
Status eksportu paczki faktur (GET
/invoices/exports/{referenceNumber})
Doprecyzowano opisy pól linków do pobrania części paczki:url- "Adres URL, pod który należy wysłać żądanie pobrania części paczki. Link jest generowany dynamicznie w momencie odpytania o status operacji eksportu. Nie podlega limitom API i nie wymaga przesyłania tokenu dostępowego przy pobraniu".expirationDate- "Data i godzina wygaśnięcia linku umożliwiającego pobranie części paczki.Po upływie tego momentu link przestaje być aktywny".
Autoryzacja
- Rozszerzono reguły dostępu o
SubunitManagedla POST/permissions/query/persons/grants: operację można wykonać, jeżeli podmiot posiadaCredentialsManage,CredentialsRead,SubunitManage. - Nadanie uprawnień w sposób pośredni (POST
/permissions/indirect/grants) Zaktualizowano opis właściwościtargetIdentifier.description: doprecyzowano, że brak identyfikatora kontekstu oznacza nadanie uprawnienia pośredniego typu generalnego.
- Rozszerzono reguły dostępu o
OpenAPI
Zwiększono maksymalną wartośćpageSizez 100 do 500 dla endpointów:- GET
/sessions - GET
/sessions/{referenceNumber}/invoices - GET
/sessions/{referenceNumber}/invoices/failed
- GET
Wersja 2.0.0 RC5.4
Pobranie listy metadanych faktur (POST /invoices/query/metadata)
- Dodano parametr
sortOrder, umożliwiający określenie kierunku sortowania wyników.
- Dodano parametr
Status sesji
Usunięto błąd uniemożliwiający uzupełnianie tej właściwości w odpowiedziach API dotyczących faktur (pole nie było wcześniej zwracane). Wartość jest uzupełniana asynchronicznie w momencie trwałego zapisu i może być tymczasowo null.Dane testowe (tylko na środowiskach testowych)
- Zmiana limitów API dla bieżącego kontekstu (POST
testdata/rate-limits)
Dodano endpoint umożliwiający tymczasowe nadpisanie efektywnych limitów API dla bieżącego kontekstu. Zmiana przygotowuje uruchomienie symulatora limitów na środowisku TE. - Przywrócenie domyślnych limitów (DELETE
/testdata/rate-limits) Dodano endpoint przywracający domyślne wartości limitów dla bieżącego kontekstu.
- Zmiana limitów API dla bieżącego kontekstu (POST
OpenAPI
- Doprecyzowano definicje parametrów tablicowych w query; zastosowano
style: form. Wiele wartości należy przekazywać przez powtórzenie parametru, np.?statuses=InProgress&statuses=Succeeded. Zmiana dokumentacyjna, bez wpływu na działanie API. - Zaktualizowano opisy właściwości (
partUploadRequests,encryptedSymmetricKey,initializationVector).
- Doprecyzowano definicje parametrów tablicowych w query; zastosowano
Wersja 2.0.0 RC5.3
Eksport paczki faktur (POST
/invoices/exports)
Dodano możliwość dołączenia pliku_metadata.jsondo paczki eksportu. Plik ma postać obiektu JSON z tablicąinvoices, zawierającą obiektyInvoiceMetadata(model zwracany przez POST/invoices/query/metadata). Włączenie (preview): do nagłówka żądania należy dodaćX-KSeF-Feature:include-metadata. Od 2025-10-27 zmienia się domyślne zachowanie endpointu - paczka eksportu będzie zawsze zawierać plik_metadata.json(nagłówek nie będzie wymagany).Status faktury
- W przypadku przetworzenia z błędem, gdy możliwe było odczytanie numeru faktury (np. kod błędu
440- duplikat faktury), odpowiedź zawiera właściwośćinvoiceNumberz odczytanym numerem. - Oznaczono właściwość
invoiceHash,referenceNumberw modelu odpowiedzi jako zawsze zwracaną.
- W przypadku przetworzenia z błędem, gdy możliwe było odczytanie numeru faktury (np. kod błędu
Standaryzacja jednostek rozmiaru (MB, SI)
Ujednolicono zapis limitów w dokumentacji i API: wartości prezentowane w MB (SI), gdzie 1 MB = 1 000 000 B.Pobranie limitów dla bieżącego kontekstu (GET
/limits/context)
Dodano w modelu odpowiedzimaxInvoiceSizeInMB,maxInvoiceWithAttachmentSizeInMBdla właściwościonlineSessionibatchSession. WłaściwościmaxInvoiceSizeInMib,maxInvoiceWithAttachmentSizeInMiboznaczono jako deprecated (planowane usunięcie: 2025-10-27).Zmiana limitów sesji dla bieżącego kontekstu (POST
/testdata/limits/context/session)
Dodano w modelu żądaniamaxInvoiceSizeInMB,maxInvoiceWithAttachmentSizeInMBdla właściwościonlineSessionibatchSession. WłaściwościmaxInvoiceSizeInMib,maxInvoiceWithAttachmentSizeInMiboznaczono jako deprecated (planowane usunięcie: 2025-10-27).Status eksportu paczki faktur (GET
/invoices/exports/{referenceNumber})
Zmiana nazwy parametru ścieżki zoperationReferenceNumbernareferenceNumber.
Zmiana nie wpływa na kontrakt HTTP (ścieżka i znaczenie wartości bez zmian) ani na zachowanie endpointu.Uprawnienia
- Zaktualizowano opisy endpointów przykłady endpointów z obszaru permissions/*. Zmiana dotyczy wyłącznie dokumentacji (doprecyzowanie opisów, formatów i przykładów); brak zmian w zachowaniu API oraz kontrakcie.
- Zmiana nazwy parametru ścieżki z
operationReferenceNumbernareferenceNumberw "Pobranie statusu operacji" (POST/permissions/operations/{referenceNumber}).
Zmiana nie wpływa na kontrakt HTTP (ścieżka i znaczenie wartości bez zmian) ani na zachowanie endpointu. - "Nadanie uprawnień w sposób pośredni" (POST
permissions/indirect/grants)
Dodano obsługę identyfikatora wewnętrznego - rozszerzono właściwośćtargetIdentifiero wartośćInternalId. - "Pobranie listy własnych uprawnień" (POST
/permissions/query/personal/grants)- Rozszerzono w modelu żądania właściwość
targetIdentifiero wartośćInternalId(możliwość wskazania identyfikatora wewnętrznego). - Usunięto w modelu odpowiedzi wartość
PersonalPermissionScope.Owner. Uprawnienia właścicielskie (nadawane przez ZAW-FA lub powiązanie NIP/PESEL) nie są zwracane.
- Rozszerzono w modelu żądania właściwość
Status uwierzytelniania (GET
/auth/{referenceNumber})
Rozszerzono tabelę kodów błędów o470- "Uwierzytelnianie zakończone niepowodzeniem" z doprecyzowaniem: "Próba wykorzystania metod autoryzacyjnych osoby zmarłej".Obsługa faktur PEF
Zmieniono wartości enuma (FormCode):FA_PEF (3)naPEF (3),FA_KOR_PEF (3)naPEF_KOR (3).
Wygenerowanie nowego tokena (POST
/tokens)- W modelu żądania (
GenerateTokenRequest) oznaczono poladescriptionipermissionsjako wymagane. - W modelu odpowiedzi (
GenerateTokenResponse) oznaczono polareferenceNumberitokenjako zawsze zwracane.
- W modelu żądania (
Statusu tokena KSeF (GET /tokens/{referenceNumber})
- Oznaczono właściwość
authorIdentifier,contextIdentifier,dateCreated,description,referenceNumber,requestedPermissions,statusw modelu odpowiedzi jako zawsze zwracaną.
- Oznaczono właściwość
Pobranie listy wygenerowanych tokenów (GET /tokens)
- Oznaczono właściwość
authorIdentifier,contextIdentifier,dateCreated,description,referenceNumber,requestedPermissions,statusw modelu odpowiedzi jako zawsze zwracaną.
- Oznaczono właściwość
Dane testowe - utworzenie osoby fizycznej (POST
/testdata/person)
Rozszerzono żądanie o właściwośćisDeceased(boolean) umożliwiając utworzenie testowej osoby zmarłej (np. do scenariuszy weryfikujących kod statusu470).OpenAPI
- Doprecyzowano ograniczenia dla właściwości typu integer w requests poprzez dodanie atrybutów
minimum/exclusiveMinimum,maximum/exclusiveMaximum. - Rozszerzono odpowiedź o pole
referenceNumber(zawiera tę samą wartość, co dotychczasoweoperationReferenceNumber). OznaczonooperationReferenceNumberjakodeprecatedi zostanie usunięte z odpowiedzi 2025-10-27; należy przejść nareferenceNumber. Charakter zmiany: przejściowy rename z zachowaniem kompatybilności (obie właściwości zwracane równolegle do daty usunięcia).
Dotyczy endpointów:- POST
/permissions/persons/grants, - POST
/permissions/entities/grants, - POST
/permissions/authorizations/grants, - POST
/permissions/indirect/grants, - POST
/permissions/subunits/grants, - POST
/permissions/eu-entities/administration/grants, - POST
/permissions/eu-entities/grants, - DELETE
/permissions/common/grants/{permissionId}, - DELETE
/permissions/authorizations/grants/{permissionId}, - POST
/invoices/exports.
- POST
- Usunięto atrybut
requiredz właściwościpageSizew żądaniu GET/sessions("Pobranie listy sesji"). - Zaktualizowano przykłady (example) w definicjach endpointów.
- Doprecyzowano ograniczenia dla właściwości typu integer w requests poprzez dodanie atrybutów
Wersja 2.0.0 RC5.2
Uprawnienia
- "Nadanie uprawnień administratora podmiotu podrzędnego" (POST
/permissions/subunits/grants)
Dodano właściwośćsubunitName("Nazwa jednostki podrzędnej") w żądaniu. Pole jest wymagane, gdy jednostka podrzędna identyfikowana jest identyfikatorem wewnętrznym. - "Pobranie listy uprawnień administratorów jednostek i podmiotów podrzędnych" (POST
/permissions/query/subunits/grants)
Dodano w odpowiedzi właściwośćsubunitName("Nazwa jednostki podrzędnej"). - "Pobranie listy uprawnień do pracy w KSeF nadanych osobom fizycznym lub podmiotom" (POST
permissions/query/persons/grants)
Usunięto z wyników uprawnienie typuOwner. UprawnienieOwnerjest przypisywane systemowo do osoby fizycznej i nie podlega nadawaniu, więc nie powinno pojawiać się na liście nadanych uprawnień. - "Pobranie listy własnych uprawnień" (POST
/permissions/query/personal/grants)
Rozszerzono enum filtraPersonalPermissionTypeo wartośćVatUeManage.
- "Nadanie uprawnień administratora podmiotu podrzędnego" (POST
Limity
- Dodano endpointy do sprawdzania ustawionych limitów (kontekst, podmiot uwierzytelniony):
- GET
/limits/context - GET
/limits/subject
- GET
- Dodano endpointy do zarządzania limitami (kontekst, podmiot uwierzytelniony) w środowisku testowym:
- POST/DELETE
/testdata/limits/context/session - POST/DELETE
/testdata/limits/subject/certificate
- POST/DELETE
- Zaktualizowano Limity.
- Dodano endpointy do sprawdzania ustawionych limitów (kontekst, podmiot uwierzytelniony):
Status faktury
Dodano właściwośćinvoicingModew modelu odpowiedzi. Zaktualizowano dokumentację: Automatyczne określanie trybu wysyłki offline.OpenAPI
- Doprecyzowano ograniczenia dla właściwości typu integer w requests poprzez dodanie atrybutów
minimum/exclusiveMinimum,maximum/exclusiveMaximumoraz wartości domyślnychdefault. - Zaktualizowano przykłady (example) w definicjach endpointów.
- Doprecyzowano opisy endpointów.
- Dodano atrybut
requireddla wymaganych właściwości w żądaniach i odpowiedziach.
- Doprecyzowano ograniczenia dla właściwości typu integer w requests poprzez dodanie atrybutów
Wersja 2.0.0 RC5.1
Pobranie listy metadanych certyfikatów (POST /certificates/query)
Zmieniono reprezentację identyfikatora podmiotu z pary właściwościsubjectIdentifier+subjectIdentifierTypena obiekt złożonysubjectIdentifier{type,value}.Pobranie listy metadanych faktur (POST /invoices/query/metadata)
- Zmieniono reprezentację wybranych identyfikatorów z par właściwości typ + value na obiekty złożone { type, value }:
invoiceMetadataBuyer.identifier+invoiceMetadataBuyer.identifierTypena obiekt złożonyinvoiceMetadataBuyerIdentifier{type,value},invoiceMetadataThirdSubject.identifier+invoiceMetadataThirdSubject.identifierTypena obiekt złożonyInvoiceMetadataThirdSubjectIdentifier{type,value}.
- Usunięto
obsoletedwłaściwościIdentitiferz obiektówInvoiceMetadataSellerorazInvoiceMetadataAuthorizedSubject. - Zmieniono właściwość
invoiceQuerySellernasellerNipw filtrze żądania. - Zmieniono właściwość
invoiceQueryBuyernainvoiceQueryBuyerIdentifierz właściwościami {type,value} w filtrze żądania.
- Zmieniono reprezentację wybranych identyfikatorów z par właściwości typ + value na obiekty złożone { type, value }:
Uprawnienia
Zmieniono reprezentację wybranych identyfikatorów z par właściwości typ + value na obiekty złożone { type, value }:- "Pobranie listy własnych uprawnień" (POST
/permissions/query/personal/grants):contextIdentifier+contextIdentifierType->contextIdentifier{type,value},authorizedIdentifier+authorizedIdentifierType->authorizedIdentifier{type,value},targetIdentifier+targetIdentifierType->targetIdentifier{ type, value }.
- "Pobranie listy uprawnień do pracy w KSeF nadanych osobom fizycznym lub podmiotom" (POST
/permissions/query/persons/grants),contextIdentifier+contextIdentifierType->contextIdentifier{type,value},authorizedIdentifier+authorizedIdentifierType->authorizedIdentifier{type,value},targetIdentifier+targetIdentifierType->targetIdentifier{type,value},authorIdentifier+authorIdentifierType->authorIdentifier{type,value}.
- "Pobranie listy uprawnień administratorów jednostek i podmiotów podrzędnych" (POST
/permissions/query/subunits/grants):authorizedIdentifier+authorizedIdentifierType->authorizedIdentifier{type,value},subunitIdentifier+subunitIdentifierType->subunitIdentifier{type,value},authorIdentifier+authorIdentifierType->authorIdentifier{type,value}.
- "Pobranie listy ról podmiotu" (POST
/permissions/query/entities/roles):parentEntityIdentifier+parentEntityIdentifierType->parentEntityIdentifier{type,value}.
- "Pobranie listy podmiotów podrzędnych" (POST
/permissions/query/subordinate-entities/roles):subordinateEntityIdentifier+subordinateEntityIdentifierType->subordinateEntityIdentifier{type,value}.
- "Pobranie listy uprawnień podmiotowych do obsługi faktur" (POST
/permissions/query/authorizations/grants):authorizedEntityIdentifier+authorizedEntityIdentifierType->authorizedEntityIdentifier{type,value},authorizingEntityIdentifier+authorizingEntityIdentifierType->authorizingEntityIdentifier{type,value},authorIdentifier+authorIdentifierType->authorIdentifier{type,value}
- "Pobranie listy uprawnień administratorów lub reprezentantów podmiotów unijnych uprawnionych do samofakturowania" (POST
/permissions/query/eu-entities/grants):authorIdentifier+authorIdentifierType->authorIdentifier{type,value}
- "Pobranie listy własnych uprawnień" (POST
Nadanie uprawnień administratora podmiotu unijnego (POST permissions/eu-entities/administration/grants)
Zmieniono nazwę właściwości w żądaniu zsubjectNamenaeuEntityName.Uwierzytelnienie z wykorzystaniem tokena KSeF
Usunięto nadmiarowe wartości enumNone,AllPartnerswe właściwościcontextIdentifier.typeżądania POST/auth/ksef-token.Tokeny KSeF
- Ujednoznaczniono model odpowiedzi GET
/tokens: właściwościauthorIdentifier.type,authorIdentifier.value,contextIdentifier.type,contextIdentifier.valuesą zawsze zwracane (required, non-nullable), - Usunięto nadmiarowe wartości enum
None,AllPartnerswe właściwościachauthorIdentifier.typeorazcontextIdentifier.typew modelu odpowiedzi GET/tokens("Pobranie listy wygenerowanych tokenów").
- Ujednoznaczniono model odpowiedzi GET
Sesja wsadowa
Usunięto nadmiarowy kod błędu21401- "Dokument nie jest zgodny ze schemą (json)".Pobranie statusu sesji (GET /sessions/{referenceNumber})
- Dodano kod błędu
420- "Przekroczony limit faktur w sesji".
- Dodano kod błędu
Pobieranie metadanych faktur (GET
/invoices/query/metadata)- Dodano w odpowiedzi (zawsze zwracaną) właściwość
isTruncated(boolean) – "Określa, czy wynik został obcięty z powodu przekroczenia limitu liczby faktur (10 000)", - Oznaczono właściwość
amount.typew filtrze żądania jako wymaganą.
- Dodano w odpowiedzi (zawsze zwracaną) właściwość
Eksport paczki faktur: zlecenie (POST
/invoices/exports)- Oznaczono właściwość
operationReferenceNumberw modelu odpowiedzi jako zawsze zwracaną, - Oznaczono właściwość
amount.typew filtrze żądania jako wymaganą.
- Oznaczono właściwość
Pobranie listy uprawnień do pracy w KSeF nadanych osobom fizycznym lub podmiotom (POST /permissions/query/persons/grants)
- Dodano
contextIdentifierw filtrze żądania i w modelu odpowiedzi.
- Dodano
OpenAPI
Usunięto nieużywanyoperationIdze specyfikacji. Zmiana porządkująca.
Wersja 2.0.0 RC5
Obsługa faktur PEF i dostawców usług Peppol
- Dodano obsługę faktur
PEFwysyłanych przez dostawcę usług Peppol. Nowe możliwości nie zmieniają dotychczasowych zachowań KSeF dla innych formatów, są rozszerzeniem API. - Wprowadzono nowy typ kontekstu uwierzytelniania:
PeppolId, umożliwiający pracę w kontekście dostawcy usług Peppol. - Automatyczna rejestracja dostawcy: przy pierwszym uwierzytelnieniu dostawcy usług Peppol (z użyciem dedykowanego certyfikatu) następuje jego automatyczna rejestracja w systemie.
- Dodano endpoint GET
/peppol/query("Lista dostawców usług Peppol") zwracający zarejestrowanych dostawców. - Zaktualizowano reguły dostępu dla otwarcia i zamknięcia sesji, wysyłka faktur wymagaja uprawnienia
PefInvoiceWrite. - Dodano nowe schematy faktur:
FA_PEF (3),FA_KOR_PEF (3), - Rozszerzono
ContextIdentifieroPeppolIdw xsdAuthTokenRequest.
- Dodano obsługę faktur
UPO
- Dodano element
Uwierzytelnienie, który porządkuje dane z nagłówka UPO i rozszerza je o dodatkowe informacje; zastępuje dotychczasoweIdentyfikatorPodatkowyPodmiotuorazSkrotZlozonejStruktury. Uwierzytelnieniezawiera:IdKontekstu– identyfikator kontekstu uwierzytelnienia,- dowód uwierzytelnienia (w zależności od metody):
NumerReferencyjnyTokenaKSeF- identyfikator tokenu uwierzytelniającego w systemie KSeF,SkrotDokumentuUwierzytelniajacego- wartość funkcji skrótu dokumentu uwierzytelniającego w postaci otrzymanej przez system (łącznie z podpisem elektronicznym).
- W elemencie
Dokumentdodano:- NipSprzedawcy,
- DataWystawieniaFaktury,
- DataNadaniaNumeruKSeF.
- Ujednolicono schemat UPO. UPO dla faktury i dla sesji korzystają ze wspólnej schemy upo-v4-2.xsd. Zastępuje dotychczasowe upo-faktura-v3-0.xsd i upo-sesja-v4-1.xsd.
- Dodano element
Limity żądań API
Dodano specyfikację limitów żądań API.Uwierzytelnianie
- Doprecyzowano kody statusów w GET
/auth/{referenceNumber},/auth/sessions:415(brak uprawnień),425(uwierzytelnienie unieważnione),450(błędny token: nieprawidłowy token, nieprawidłowy czas, unieważniony, nieaktywny),460(błąd certyfikatu: nieważny, błąd weryfikacji łańcucha, niezaufany łańcuch, odwołany, niepoprawny).
- Aktualizacja opcjonalnej polityki IP w XSD
AuthTokenRequest: ZastąpionoIpAddressPolicynową strukturąAuthorizationPolicy/AllowedIps. Zaktualizowano dokument Uwierzytelnianie.
- Doprecyzowano kody statusów w GET
Autoryzacja
- Rozszerzono reguły dostępu o
VatUeManage,SubunitManagedla DELETE/permissions/common/grants/{permissionId}: operację można wykonać, jeżeli podmiot posiadaCredentialsManage,VatUeManagelubSubunitManage. - Rozszerzono reguły dostępu o
Introspectiondla GET/sessions/{referenceNumber}/...: każdy z tych endpointów można teraz wywołać posiadającInvoiceWritelubIntrospection. - Rozszerzono reguły dostępu o
InvoiceWritedla GET/sessions("Pobranie listy sesji"): posiadając uprawnienieInvoiceWrite, można pobierać wyłącznie sesje utworzone przez podmiot uwierzytelniający; posiadając uprawnienieIntrospection, można pobierać wszystkie sesje. - Zmieniono reguły dostępu dla DELETE
/tokens/{referenceNumber}: usunięto wymóg uprawnieniaCredentialsManage.
- Rozszerzono reguły dostępu o
Pobranie danych do wniosku certyfikacyjnego (GET
certificates/enrollments/data)- Zmiana struktury odpowiedzi:
- Usunięto: givenNames (tablica string).
- Dodano: givenName (string).
- Charakter zmiany: breaking (zmiana nazwy i typu pola z tablicy na tekst).
- Dodano kod błędu
25011— „Nieprawidłowy algorytm podpisu CSR”. - Uściślono wymagania dotyczące klucza prywatnego używanego do podpisu CSR w Certyfikaty KSeF.
- Zmiana struktury odpowiedzi:
Tokeny KSeF
- Dodano kod błędu dla odpowiedzi POST
/tokens("Wygenerowanie nowego tokena"):26002- "Nie można wygenerować tokena dla obecnego typu kontekstu". Token może być generowany wyłącznie w kontekścieNiplubInternalId. - Rozszerzono katalog uprawnień możliwych do przypisania tokenowi: dodano
SubunitManageorazEnforcementOperations. - Dodano parametry zapytania do filtrowania wyników dla GET
/tokens:description- wyszukiwanie w opisie tokena (bez rozróżniania wielkości liter), min. 3 znaki,authorIdentifier- wyszukiwanie po identyfikatorze twórcy (bez rozróżniania wielkości liter), min. 3 znaki,authorIdentifierType- typ identyfikatora twórcy używany przy authorIdentifier (Nip, Pesel, Fingerprint).
- Dodano właściwość
lastUseDate- "Data ostatniego użycia tokena",statusDetails- "Dodatkowe informacje na temat statusu, zwracane w przypadku błędów"
w odpowiedziach dla:- GET
/tokens("lista tokenów"), - GET
/tokens/{referenceNumber}("status tokena").
- Dodano kod błędu dla odpowiedzi POST
Pobieranie metadanych faktur (GET
/invoices/query/metadata)- Filtry:
- stronicowanie: zwiększono maksymalny rozmiar strony do 250 rekordów,
- usunięto właściwość
schemaType(z wartościamiFA1,FA2,FA3), wcześniej oznaczoną jako deprecated, - dodano
seller.nip;seller.identifieroznaczono jako deprecated (zostanie usunięte w następnym wydaniu), - dodano
authorizedSubject.nip;authorizedSubject.identifieroznaczono jako deprecated (zostanie usunięte w następnym wydaniu), - doprecyzowano opis: brak wartości w
dateRange.tooznacza użycie bieżącej daty i czasu (UTC), - doprecyzowano maksymalny dozwolony zakres
DateRangena 2 lata.
- Sortowanie:
- wyniki są sortowane rosnąco według typu daty wskazanej w
DateRange; do pobierania przyrostowego zalecany typPermanentStorage,
- wyniki są sortowane rosnąco według typu daty wskazanej w
- Model odpowiedzi:
- usunięto właściwość
totalCount, - zmieniono nazwę
fileHashnainvoiceHash, - dodano
seller.nip;seller.identifieroznaczono jako deprecated (zostanie usunięte w następnym wydaniu), - dodano
authorizedSubject.nip;authorizedSubject.identifieroznaczono jako deprecated (zostanie usunięte w następnym wydaniu), - oznaczono
invoiceHashjako zawsze zwracane, - oznaczono
invoicingModejako zawsze zwracane, - oznaczono
authorizedSubject.role("Podmiot upoważniony") jako zawsze zwracane, - oznaczono
invoiceMetadataAuthorizedSubject.role("Nip podmiotu upoważnionego") jako zawsze zwracane, - oznaczono
invoiceMetadataThirdSubject.role("Lista podmiotów trzecich") jako zawsze zwracane.
- usunięto właściwość
- Usunięto oznaczenia [Mock] z opisów właściwości.
- Filtry:
Eksport paczki faktur: zlecenie (POST
/invoices/exports)Filtry:
- dodano
seller.nip;seller.identifieroznaczono jako deprecated (zostanie usunięte w następnym wydaniu),
- dodano
Usunięto oznaczenia [Mock].
Zmieniono kod błędu: z
21180na21181("Nieprawidłowe żądanie eksportu faktur").Doprecyzowano zasady sortowania. Faktury w paczce są sortowane rosnąco według typu daty wskazanego w
DateRangepodczas inicjalizacji eksportu.Eksport paczki faktur: status (GET
/invoices/exports/{operationReferenceNumber})- Opisy statusów: uzupełniono dokumentację statusu eksportu:
100- "Eksport faktur w toku"200- "Eksport faktur zakończony sukcesem"415- "Błąd odszyfrowania dostarczonego klucza"500- "Nieznany błąd ({statusCode})"
- Model odpowiedzi
package:- dodano:
invoiceCount- "Łączna liczba faktur w paczce. Maksymalna liczba faktur w paczce to 10 000",size- "Rozmiar paczki w bajtach. Maksymalny rozmiar paczki to 1 GiB (1 073 741 824 bajtów)",isTruncated- "Określa, czy wynik eksportu został ucięty z powodu przekroczenia limitu liczby faktur lub wielkości paczki",lastIssueDate- "Data wystawienia ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie datyIssue",lastInvoicingDate- "Data przyjęcia ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie datyInvoicing",lastPermanentStorageDate- "Data trwałego zapisu ostatniej faktury ujętej w paczce.\nPole występuje wyłącznie wtedy, gdy paczka została ucięta i eksport był filtrowany po typie datyPermanentStorage".
- dodano:
- Model odpowiedzi
package.parts- usunięto
fileName,headers, - dodano:
partName- "Nazwa pliku części paczki",partSize- "Rozmiar części paczki w bajtach. Maksymalny rozmiar części to 50MiB (52 428 800 bajtów)",partHash- "Skrót SHA256 pliku części paczki, zakodowany w formacie Base64",encryptedPartSize- "Rozmiar zaszyfrowanej części paczki w bajtach",encryptedPartHash- "Skrót SHA256 zaszyfrowanej części paczki, zakodowany w formacie Base64",expirationDate- "Moment wygaśnięcia linku do pobrania części",
- oznaczono wszystkich właściwości w
packagejako zawsze zwracane,
- usunięto
- Usunięto oznaczenia [Mock].
- Opisy statusów: uzupełniono dokumentację statusu eksportu:
Uprawnienia
- Rozszerzono żądanie POST
/permissions/eu-entities/administration/grants("Nadanie uprawnień administratora podmiotu unijnego") o "Nazwę podmiotu"subjectName. - Rozszerzono żądanie POST
/permissions/query/persons/grantso nową wartośćSystemdla filtru identyfikatora podmiotu nadającego uprawnieniaauthorIdentifieri usunięcie wymagalność z polaauthorIdentifier.value. - Rozszerzono żądanie POST
/permissions/query/persons/grantso nową wartośćAllPartnersdla filtru identyfikator podmiotu docelowegotargetIdentifieri usunięcie wymagalność z polatargetIdentifier.value. - Dodano żądanie POST
/permissions/query/personal/grantsdo pobrania listy własnych uprawnień. - Dodano do żądania POST
/permissions/indirect/grants("Nadanie uprawnień w sposób pośredni") nową wartośćAllPartnersdla "identyfikatora podmiotu docelowego", oznaczającą uprawnienia generalne
- Rozszerzono żądanie POST
Pobranie faktury (GET
/invoices/ksef/{ksefNumber})
Dodano kod błędu dla odpowiedzi 400:21165- "Faktura o podanym numerze KSeF nie jest jeszcze dostępna".Załączniki do faktur
Dodano endpoint GET/permissions/attachments/statusdo sprawdzania statusu zgody na wystawianie faktur z załącznikiem.Pobranie listy sesji
Rozszerzono uprawnienia dla GET/sessions: dodanoInvoiceWrite. Posiadając uprawnienieInvoiceWrite, można pobierać wyłącznie sesje utworzone przez podmiot uwierzytelniający; posiadając uprawnienieIntrospection, można pobierać wszystkie sesje.Sesja interaktywnej
- Zaktualizowano kody błędów dla POST
/sessions/online/{referenceNumber}/invoices("Wysłanie faktury"):- usunięto
21154- "Sesja interaktywna zakończona", - dodano
21180- "Status sesji nie pozwala na wykonanie operacji".
- usunięto
- Dodano błąd
21180- "Status sesji nie pozwala na wykonanie operacji" dla POST/sessions/online/{referenceNumber}/close("Zamknięcie sesji interaktywnej").
- Zaktualizowano kody błędów dla POST
Sesja wsadowa
- Dodano błąd
21180- "Status sesji nie pozwala na wykonanie operacji" dla POST/sessions/batch/{referenceNumber}/close("Zamknięcie sesji wsadowej").
- Dodano błąd
Status faktury w sesji
Rozszerzono odpowiedź dla GET/sessions/{referenceNumber}/invoices("Pobranie faktur sesji") oraz GET/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}("Pobranie statusu faktury z sesji") o właściwości:permanentStorageDate– data trwałego zapisu faktury w repozytorium KSeF (od tego momentu faktura jest dostępna do pobrania),upoDownloadUrl– adres do pobrania UPO.
OpenAPI
- Dodano uniwersalny kod błędu walidacji danych wejściowych
21405do wszystkich endpointów. Treść błędu z walidatora zwracana w odpowiedzi. - Dodano odpowiedź 400 z walidacją zwracającą kod błędu
30001(„Podmiot lub uprawnienie już istnieje.”) dla POST/testdata/subjectoraz POST/testdata/person. - Zaktualizowano przykłady (example) w definicjach endpointów.
- Dodano uniwersalny kod błędu walidacji danych wejściowych
Dokumentacja
- Doprecyzowano algorytmy podpisu i przykłady w Kody QR.
- Zaktualizowano przykłady kodu w C# i Javie.
Wersja 2.0.0 RC4
Certyfikaty KSeF
- Dodano nową właściwość
typew certyfikatach KSeF. - Dostępne typy certyfikatów:
Authentication– certyfikat do uwierzytelnienia w systemie KSeF,Offline– certyfikat ograniczony wyłącznie do potwierdzania autentyczności wystawcy i integralności faktury w trybie offline (KOD II).
- Zaktualizowano dokumentację procesów
/certificates/enrollments,/certificates/query,/certificates/retrieve.
- Dodano nową właściwość
Kody QR
- Doprecyzowano, że KOD II może być generowany wyłącznie w oparciu o certyfikat typu
Offline. - Dodano ostrzeżenie bezpieczeństwa, że certyfikaty
Authenticationnie mogą być używane do wystawiania faktur offline.
- Doprecyzowano, że KOD II może być generowany wyłącznie w oparciu o certyfikat typu
Status sesji
- Aktualizacja autoryzacji - pobieranie informacji o sesji, fakturach i UPO wymaga uprawnienia:
InvoiceWrite. - Zmieniono kod statusu trwa przetwarzanie: z
300na150dla sesji wsadowej.
- Aktualizacja autoryzacji - pobieranie informacji o sesji, fakturach i UPO wymaga uprawnienia:
Pobieranie metadanych faktur (
/invoices/query/metadata)
Rozszerzono model odpowiedzi o pola:fileHash– skrót SHA256 faktury,hashOfCorrectedInvoice– skrót SHA256 korygowanej faktury offline,thirdSubjects– lista trzecich podmiotów,authorizedSubject– podmiot upoważniony (nowy obiektInvoiceMetadataAuthorizedSubjectzawierającyidentifier,name,role),
Dodano możliwość filtrowania po typie dokumentu (
InvoiceQueryFormType), dostępne wartości:FA,PEF,RR.Pole
schemaTypeoznaczone jako deprecated – planowane do usunięcia w przyszłych wersjach API.Dokumentacja
- Dodano dokument opisujący numer KSeF.
- Dodano dokument opisujący korektę techniczną dla faktur wystawionych w trybie offline.
- Doprecyzowano sposób wykrywania duplikatów
OpenAPI
- Pobranie listy metadanych faktur
- Dodano właściwość:
hasMore(boolean) – informuje o dostępności kolejnej strony wyników. WłaściwośćtotalCountzostała oznaczona jako deprecated (pozostaje chwilowo w odpowiedzi dla zgodności wstecznej). - W filtrowaniu po zakresie
dateRangewłaściwośćto(data końcowa zakresu) nie jest już obowiązkowa.
- Dodano właściwość:
- Wyszukiwanie nadanych uprawnień - w odpowiedzi dodano właściwość
hasMore, usuniętopageSize,pageOffset. - Pobranie statusu uwierzytelniania - usunięto z odpowiedzi redundantne
referenceNumber,isCurrent. - Ujednolicenie stronicowania - endpoint
/sessions/{referenceNumber}/invoices(pobranie faktur sesji) przechodzi na paginację opartą o nagłówek żądaniax-continuation-token; usunięto parametrpageOffset,pageSizepozostaje bez zmian. Pierwsza strona bez nagłówka; kolejne strony pobiera się przez przekazanie wartości tokenu zwróconej przez API. Zmiana spójna z innymi zasobami korzystającymi zx-continuation-token(np./auth/sessions,/sessions/{referenceNumber}/invoices/failed). - Usunięto obsługę identyfikatora
InternalIdw polutargetIdentifierpodczas nadawania uprawnień pośrednich (/permissions/indirect/grants). Od teraz dopuszczalny jest wyłącznie identyfikatorNip. - Status operacji nadawania uprawnień – rozszerzono listę możliwych kodów statusu w odpowiedzi:
- 410 – Podane identyfikatory są niezgodne lub pozostają w niewłaściwej relacji.
- 420 – Użyte poświadczenia nie mają uprawnień do wykonania tej operacji.
- 430 – Kontekst identyfikatora nie odpowiada wymaganej roli lub uprawnieniom.
- 440 – Operacja niedozwolona dla wskazanych powiązań identyfikatorów.
- 450 – Operacja niedozwolona dla wskazanego identyfikatora lub jego typu.
- Dodano obsługę błędu 21418 – „Przekazany token kontynuacji ma nieprawidłowy format” we wszystkich endpointach wykorzystujących mechanizm paginacji z użyciem
continuationToken(/auth/sessions,/sessions,/sessions/{referenceNumber}/invoices,/sessions/{referenceNumber}/invoices/failed,/tokens). - Doprecyzowano proces pobierania paczki faktur:
/invoices/exports– rozpoczęcie procesu tworzenia paczki faktur,/invoices/async-query/{operationReferenceNumber}– sprawdzenie statusu i odbiór gotowej paczki.
- Zmieniono nazwę modelu
InvoiceMetadataQueryRequestnaQueryInvoicesMetadataResponse. - Rozszerzono typ
PersonPermissionsAuthorIdentifiero nową wartośćSystem(Identyfikator systemowy). Wartość ta wykorzystywana jest do oznaczania uprawnień nadawanych przez KSeF na podstawie złożonego wniosku ZAW-FA. Zmiana dotyczy endpointu:/permissions/query/persons/grants.
- Pobranie listy metadanych faktur
Wersja 2.0.0 RC3
Dodanie endpointu do pobierania listy metadanych faktur
/invoices/query(mock) zastąpiony przez/invoices/query/metadata– produkcyjny endpoint do pobierania metadanych faktur- Aktualizacja powiązanych modeli danych.
Aktualizacja mockowego endpointu
invoices/async-querydo inicjalizacji zapytania o pobranie faktur
Zaktualizowano powiązane modele danych.OpenAPI
- Uzupełniono specyfikację endpointów o wymagane uprawnienia (
x-required-permissions). - Dodano odpowiedzi
403 Forbiddeni401 Unauthorizedw specyfikacji endpointów. - Dodano atrybut
requiredw odpowiedziach zapytań o uprawnienia. - Zaktualizowano opis endpointu
/tokens - Usunięto zduplikowane definicje
enum - Ujednolicono model odpowiedzi SessionInvoiceStatusResponse w
/sessions/{referenceNumber}/invoicesoraz/sessions/{referenceNumber}/invoices/{invoiceReferenceNumber}. - Dodano status walidacji 400: „Uwierzytelnianie zakończone niepowodzeniem | Brak przypisanych uprawnień”.
- Uzupełniono specyfikację endpointów o wymagane uprawnienia (
Status sesji
- Dodano status
Cancelled- "Sesja anulowania. Został przekroczony czas na wysyłkę w sesji wsadowej, lub nie przesłano żadnych faktur w sesji interaktywnej." - Dodano nowe kody błędów:
- 415 - "Brak możliwości wysyłania faktury z załącznikiem"
- 440 - "Sesja anulowana, przekroczono czas wysyłki"
- 445 - "Błąd weryfikacji, brak poprawnych faktur"
- Dodano status
Status wysyłki faktur
- Dodano datę
AcquisitionDate- data nadania numeru KSeF. - Pole
ReceiveDatezastąpionoInvoicingDate– data przyjęcia faktury do systemu KSeF.
- Dodano datę
Wysyłka faktur w sesji
Uwierzytelnienie z wykorzystaniem podpisu XAdES
- Poprawka ContextIdentifier w xsd AuthTokenRequest. Należy użyć poprawionej wersji schematu XSD. Przygotowanie dokumentu XML
- Dodano kod błędu
21117- „Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu”.
Usunięcie endpointu do anonimowego pobierania faktury
invoices/download
Funkcjonalność pobierania faktur bez uwierzytelnienia została usunięta; dostępna wyłącznie w webowym narzędziu KSeF do weryfikacji i pobierania faktur.Dane testowe - obsługa faktur z załącznikami
Dodano nowe endpointy umożliwiające testowanie wysyłki faktur z załącznikami.Certyfikaty KSeF - Walidacja typu i długości klucza w CSR
- Uzupełniono opis endpointu POST
/certificates/enrollmentso wymagania dotyczące typów kluczy prywatnych w CSR (RSA, EC), - Dodano nowy kod błędu 25010 w odpowiedzi 400: „Nieprawidłowy typ lub długość klucza.”
- Uzupełniono opis endpointu POST
Aktualizacja formatu certyfikatów publicznych
/security/public-key-certificates– zwraca certyfikaty w formacie DER zakodowane w Base64.
Wersja 2.0.0 RC2
Nowe endpointy do zarządzania sesjami uwierzytelniania
Umożliwiają przeglądanie oraz unieważnianie aktywnych sesji uwierzytelniających.
Zarządzanie sesjami uwierzytelnianiaNowy endpoint do pobierania listy sesji wysyłki faktur
/sessions– umożliwia pobranie metadanych dla sesji wysyłkowych (interaktywnych i wsadowych), z możliwością filtrowania m.in. po statusie, dacie zamknięcia i typie sesji.
Pobieranie listy sesjiZmiana w listowaniu uprawnień
/permissions/query/authorizations/grants– dodano typ zapytania (queryType) w filtrowaniu uprawnień podmiotowych.Obsługa nowej wersji schematu faktury FA(3)
W ramach otwierania sesji interaktywnej i wsadowej możliwy jest wybór schemy FA(3).Dodanie pola invoiceFileName w odpowiedzi dla sesji wsadowej
/sessions/{referenceNumber}/invoices– dodano pole invoiceFileName zawierające nazwę pliku faktury. Pole występuje tylko dla sesji wsadowych. Pobranie informacji na temat przesłanych faktur