W KSeF błąd w danych nabywcy to faktura ustrukturyzowana, którą trudno cofnąć. Sprawdź NIP, nazwę i status kontrahenta w rejestrze, zanim system wyśle plik FA do KSeF.
Wystawianie faktur w Krajowym Systemie e-Faktur jest obowiązkowe od 1 lutego 2026 r. dla podatników, których sprzedaż w 2024 r. (łącznie z VAT) przekroczyła 200 mln zł, i od 1 kwietnia 2026 r. dla pozostałych przedsiębiorców. Najmniejsi, ze sprzedażą fakturowaną do 10 000 zł brutto miesięcznie, mają czas do końca 2026 r. Faktura ustrukturyzowana w formacie XML dostaje numer KSeF w chwili przyjęcia przez system. Z tego momentu nie poprawiasz jej po cichu w arkuszu: błąd w danych nabywcy poprawia się zwykle fakturą korygującą, a ta też przechodzi przez KSeF.
W praktyce największym źródłem pomyłek są dane kontrahenta: literówka w NIP, stara nazwa po przekształceniu spółki, adres sprzed zmiany siedziby, a czasem firma, której już nie ma w rejestrze. Przy fakturach wystawianych ręcznie księgowość wychwytywała część takich błędów na oko. Przy automatycznym wystawianiu z ERP, sklepu lub systemu rozliczeń nikt tego nie widzi, dopóki nabywca nie odrzuci faktury albo nie zadzwoni z reklamacją.
Dlatego warto dodać jeden krok przed wysyłką do KSeF: porównanie danych nabywcy z rejestrem. Wystarczy jedno zapytanie po NIP.
GET /companies/search?country=PL&nip=... znajduje spółkę po NIP (z walidacją sumy kontrolnej, błędny numer dostaje od razu 400 validation_error). Możesz też szukać po KRS lub REGON.GET /companies/{id} zwraca nazwę, formę prawną, status i adres z KRS. Porównujesz je z danymi, które ERP zamierza umieścić na fakturze.GET /vat/PL{NIP} potwierdza numer VAT UE w VIES, jeśli faktura dotyczy transakcji wewnątrzunijnej.POST /monitor obserwuje stałych nabywców: gdy status zmieni się na rozwiązany lub w likwidacji, dostajesz webhook i wstrzymujesz automatyczne wystawianie.import os, requests
API = 'https://api.prometiam.com/functions/v1/risk-api'
HEAD = {'Authorization': f'Bearer {os.environ["PROMETIAM_API_KEY"]}'}
def sprawdz_nabywce(nip: str, nazwa_na_fakturze: str):
r = requests.get(f'{API}/companies/search',
params={'country': 'PL', 'nip': nip}, headers=HEAD)
if r.status_code == 400:
return {'ok': False, 'powod': 'nieprawidlowy NIP'}
dane = r.json().get('data') or []
if not dane:
return {'ok': False, 'powod': 'brak w rejestrze'}
firma = requests.get(f'{API}/companies/{dane[0]["id"]}', headers=HEAD).json()['data']
return {
'ok': firma['status'] == 'active',
'status': firma['local_status'],
'nazwa_zgodna': nazwa_na_fakturze.lower() in firma['company_name'].lower(),
'firma': firma,
}
print(sprawdz_nabywce('7740001454', 'ORLEN SPÓŁKA AKCYJNA'))
Przykładowy NIP 7740001454 należy do spółki ORLEN, którą rejestr zapisuje jako „ORLEN SPÓŁKA AKCYJNA”, z formą prawną rozpisaną w całości. Dlatego porównanie nazw warto robić po normalizacji (wielkość liter, skrót formy prawnej), a rozbieżność kierować do człowieka, nie odrzucać automatycznie. Funkcja wywołana przed wysyłką pliku FA do KSeF zatrzymuje fakturę, gdy NIP jest błędny, firmy nie ma w rejestrze, spółka nie jest aktywna lub nazwa na fakturze różni się od rejestrowej. Resztę przepuszcza bez udziału człowieka.
| Pole | Po co przy fakturze |
|---|---|
company_name | Pełna nazwa nabywcy zgodna z KRS |
identifiers | KRS, NIP i REGON w jednym obiekcie |
status, local_status | Czy spółka działa, jest w likwidacji lub została rozwiązana |
legal_form | Forma prawna, np. sp. z o.o. lub S.A. |
| adres | Siedziba z rejestru do porównania z adresem na fakturze |
vat_number, vat_number_source | Numer PL + NIP, źródło rule |
Numer VAT ma w Polsce źródło rule: zbudowany z NIP, bez potwierdzenia rejestracji. Czynny status podatnika sprawdzisz w białej liście VAT albo przez VIES (GET /vat/PL...).
Sprawdzenie nabywcy to zwykle 2 zapytania na nowego kontrahenta, a stałych nabywców wystarczy zweryfikować raz i trzymać w pamięci podręcznej. Firmie wystawiającej kilkaset faktur miesięcznie wystarcza Starter (9,99 € miesięcznie, 1 000 kredytów). Webhooki z monitoringu to plan Professional (29,99 €, 10 000 kredytów). Ceny są publiczne, rozliczenie roczne daje dwa miesiące gratis.
Szczegóły obowiązku, terminów i sankcji KSeF publikuje Ministerstwo Finansów (ksef.podatki.gov.pl). Ta strona opisuje wyłącznie sposób sprawdzania danych kontrahenta i nie jest poradą podatkową.
Rozpocznij 14-dniowy darmowy okres próbny · Dokumentacja API
Okres próbny trwa 14 dni i obejmuje 500 kredytów. Wymagana jest karta, w trakcie okresu próbnego nic nie jest pobierane; potem obowiązuje plan Starter (9,99 € miesięcznie), jeśli go nie anulujesz.