Open source, MITTypowany Python do fakturowania w KSeF 2.0.
ksef2 przejmuje uwierzytelnianie, sesje, szyfrowanie i odpytywanie statusów, więc kod integracji wygląda jak sam proces: logujesz się, wysyłasz faktury FA(3), pobierasz to, co zwraca KSeF.
pip install ksef2Wymaga Pythona 3.12 lub nowszego. CLI instalujesz osobno: uv tool install ksef2-cli
from pathlib import Path
from ksef2 import Client, Environment, FormSchema
client = Client(Environment.TEST)
auth = client.authentication.with_test_certificate(
nip="5261040828",
)
with auth.online_session(form_code=FormSchema.FA3) as session:
status = session.send_invoice(
Path("invoice.xml").read_bytes()
).wait(timeout=60.0)
invoice_xml = auth.invoices.download(status.ksef_number)
print(status.ksef_number)Wszystko pomiędzy Twoim systemem a KSeF.
Klient jest podzielony według zadań. Uwierzytelniasz się raz, a uwierzytelniony klient udostępnia gałąź odpowiedzialną za każde zadanie — każda ma własny poradnik.
- 2.8.1
- Wersja OpenAPI KSeF, pod którą zbudowane jest SDK
- 83 / 83
- Pokrytych endpointów API, sprawdzanych codziennie z opublikowaną specyfikacją
- sync + async
- Client i AsyncClient mają te same gałęzie i nazwy metod
Uwierzytelnianie
Certyfikaty testowe generowane przez SDK, tokeny KSeF, certyfikaty XAdES wydane przez MCU lub profil współdzielony z ksef2-cli.
- with_test_certificate
- with_token
- with_xades
- with_profile
Sesje interaktywne i wsadowe
Wysyłaj XML FA(3) pojedynczo albo jako paczkę wsadową, czekaj na przetworzenie i odbierz UPO.
- online_session
- batch_session
- invoice_sessions.download_upo
Wyszukiwanie, pobieranie, eksport
Filtruj metadane faktur, przechodź przez kolejne strony wyników, pobieraj fakturę po numerze KSeF lub zlecaj szyfrowane paczki eksportu.
- invoices.search
- invoices.download
- invoices.export
Builder FA(3)
Twórz gotowy do wysyłki XML FA(3) płynnym, typowanym builderem zamiast pisać XML ręcznie. Szkice można zapisać i wznowić.
- FA3InvoiceBuilder
- to_xml
Administracja
Generuj i unieważniaj tokeny, nadawaj i sprawdzaj uprawnienia, wnioskuj o certyfikaty, odczytuj i nadpisuj limity.
- tokens
- permissions
- certificates
- limits
Niskopoziomowe API
Wrappery endpointów zgodne ze schematem, gdy potrzebujesz własnego podpisu, własnego zarządzania szyfrowaniem lub surowych payloadów do debugowania.
- client.raw
- auth.raw
- ksef2.raw.spec
builder = (
FA3InvoiceBuilder()
.header(system_info="my app")
.seller(
name="ACME S.A.",
tax_id="1234567890",
country_code="PL",
address_line_1="ul. Przykladowa 123",
)
.buyer(
name="XYZ GmbH",
country_code="DE",
address_line_1="Unter den Linden 1",
)
.standard()
.issue_place("Warszawa")
.issue_date(date(2026, 3, 29))
.invoice_number("FV/2026/03/0001")
.rows()
.add_line(
name="Consulting service",
supply_date=date(2026, 3, 29),
unit_of_measure="h",
quantity=Decimal("10"),
unit_price_net=Decimal("100.00"),
vat_rate=VatRate.VAT_23,
)
.done()
.done()
)
xml_text = builder.to_xml()Otwórz poradnik builderaJedna faktura, od początku do końca.
Te same cztery kroki — w Pythonie albo ze skryptu powłoki czy joba CI.
- 01
Uwierzytelnij się
Wybierz metodę pasującą do środowiska. Sekrety zostają w zmiennych środowiskowych.
SDK
login = client.authentication auth = login.with_token( ksef_token=token, nip="5261040828", )CLI
ksef2 --profile test-company \ auth login - 02
Otwórz sesję
Interaktywną dla pojedynczych faktur, wsadową dla wielu. Sesja zamyka się sama po wyjściu z bloku.
SDK
with auth.online_session( form_code=FormSchema.FA3, ) as session:CLI
ksef2 invoices send \ invoice-1.xml invoice-2.xml \ --mode batch - 03
Wyślij i poczekaj
Bez ręcznych pętli odpytujących: czekasz, aż KSeF przetworzy fakturę i nada jej numer.
SDK
status = session.send_invoice( xml, ).wait(timeout=60.0)CLI
ksef2 invoices send \ invoice.xml --wait - 04
Pobierz fakturę i UPO
Pobierz XML faktury i urzędowe poświadczenie odbioru — od razu albo później, z zapisanego potwierdzenia.
SDK
auth.invoices.download( status.ksef_number, )CLI
ksef2 invoices upo \ --receipt invoice-receipt.json
Zacznij od dokumentacji.
SDK i CLI są opisane tutaj, po polsku i po angielsku.
- SDKKlient Pythona: quickstart, poradniki i generowana referencja API.
- CLIPolecenia, profile i wyjście JSON do skryptów i CI.
Pakiety
ksef2
SDK Pythona do kodu aplikacji
ksef2-cli
Profile, wyjście JSON i polecenia do skryptów
ksef2 jest rozwijane społecznościowo przez Stacking. Nie jest publikowane, zatwierdzane ani wspierane przez Ministerstwo Finansów, a źródłem prawdy o działaniu API pozostaje oficjalna dokumentacja KSeF. Oficjalna dokumentacja API KSeF
