Prawie każde wdrożenie, które robimy dla firmy usługowej albo sklepu, dochodzi w pewnym momencie do tego samego miejsca. Ktoś w tej firmie codziennie przepisuje dane z jednego systemu do programu do fakturowania: zamówienie ze sklepu, płatność z bramki, wygraną szansę z CRM. Pozycje, kwoty, NIP, adres. Pół godziny dziennie, czasem dwie.
Obie najpopularniejsze polskie platformy mają REST API, które to zdejmuje. Robimy takie integracje regularnie i wiem, gdzie działają od pierwszego dnia, a gdzie potrafią narobić bałaganu trudniejszego do posprzątania niż ręczne klepanie. Od lutego 2026 stawka podniosła się dodatkowo, bo faktura wysłana do KSeF przestaje być dokumentem, który poprawisz kliknięciem.
TL;DR: Oba systemy pozwalają przez API wystawić fakturę, oznaczyć ją jako opłaconą, wysłać klientowi i przekazać do KSeF. Fakturownia stoi bliżej sprzedaży: ma faktury cykliczne, płatności i webhooki w API. inFakt stoi bliżej księgowości JDG: ma sandbox, zakresy uprawnień i import kosztów z KSeF. Największym ryzykiem nie jest API, tylko duplikaty i korekty.
Co API Fakturowni potrafi naprawdę
Autoryzacja jest najprostsza z możliwych: token z ustawień konta, doklejany do żądania. Adres API to subdomena Twojego konta, czyli twojafirma.fakturownia.pl, a nie wspólny host. Na tym ludzie potykają się najczęściej, przepisując przykład z dokumentacji.
Zakres, który realnie wykorzystujemy:
POST /invoices.jsontworzy cały dokument w jednym żądaniu, razem z pozycjami i danymi nabywcy. Puste polenumberoznacza, że numer nada system z Twojej serii. Da się też wystawić dokument na bazie innego: fakturę VAT z proformy albo końcową z zaliczkowych.POST /invoices/{id}/change_status.jsonprzestawia dokument naissued,sent,paid,partialalborejected.- Osobny zasób
/banking/payments.jsonprzyjmuje wpłatę i wiąże ją z fakturami. Jeśli podasz kilka identyfikatorów, wpłata rozliczy je po kolei, aż się wyczerpie: pierwsza w całości, kolejna w części. Ten mechanizm ratuje przy zbiorczych przelewach. POST /recurrings.jsonzakłada definicję faktury cyklicznej: wzorcowy dokument, datę startu, częstotliwość (every, np.1m), wystawianie tylko w dni robocze, adresy odbiorców i automatyczną wysyłkę mailem.- Webhookami zarządzasz przez
/webhooks.json, a zdarzenia obejmują utworzenie, aktualizację i usunięcie faktury, klienta oraz produktu. Nie ma ich dla dokumentów kosztowych, magazynowych i zamówień. Ważny szczegół operacyjny: system ponawia nieudaną dostawę 25 razy, a potem sam wyłącza webhooka. Do payloadu można dołożyć token, żeby odbiornik zweryfikował, że wywołanie jest prawdziwe. Jeśli sam mechanizm jest dla Ciebie nowy, zacznij od wyjaśnienia, czym jest webhook. - Klienta wyszukasz po NIP-ie albo po własnym identyfikatorze (
external_id), co jest podstawą deduplikacji kartoteki przy integracji ze sklepem.
Listy zwracane są stronami, maksymalnie po 100 rekordów.
Co API inFaktu potrafi naprawdę
inFakt działa pod wspólnym adresem api.infakt.pl/api/v3, z kluczem w nagłówku X-inFakt-ApiKey. Klucz ma przypisane zakresy uprawnień, więc integracji, która ma tylko wystawiać faktury, nie musisz dawać dostępu do księgowości. Przy wdrożeniach robionych przez zewnętrznego dostawcę to konkretna różnica.
Dwie rzeczy odróżniają to API od Fakturowni najmocniej.
Sandbox. api.sandbox-infakt.pl to osobne, pełne środowisko z własną rejestracją i limitem rzędu kilku tysięcy faktur miesięcznie. Brzmi banalnie, dopóki nie robiłeś testów wystawiania faktur na produkcyjnym koncie klienta.
Asynchroniczne tworzenie faktur. POST /async/invoices.json nie zwraca gotowego dokumentu, tylko kod 202 i numer zlecenia. Po fakturę idziesz osobnym zapytaniem o status. Naiwna integracja, która zakłada, że po utworzeniu faktury od razu ma jej identyfikator, wywróci się właśnie tutaj. Ten sam schemat obowiązuje przy oznaczaniu dokumentu jako opłaconego.
Poza tym API obsługuje pełen zestaw dokumentów sprzedażowych: faktury VAT, korygujące, marża, zaliczkowe, końcowe i OSS. Do tego PDF, wysyłka mailem, podgląd następnego numeru w serii oraz filtrowanie list w stylu „pokaż faktury bez daty zapłaty". Ta jedna kwerenda wystarczy, żeby zbudować automatyczne przypomnienia o płatnościach bez dodatkowego rejestru po swojej stronie.
Limity są jawne: 300 zapytań GET i 150 modyfikujących na minutę z jednego adresu IP, do 100 rekordów na stronę, plus osobny limit wysyłanych maili. Czego nie ma: zasobu faktur cyklicznych. Cykliczność ustawia się w aplikacji, więc sterowanie abonamentami z zewnątrz oznacza własny harmonogram. Za to inFakt wystawia przez API całą księgowość, której Fakturownia nie prowadzi: koszty, pliki JPK, zaliczki na PIT i składki ZUS.
KSeF: stan na sierpień 2026 i co zmienia w integracji
Obowiązek już działa, ale wchodzi falami i to on wyznacza dziś kalendarz każdego wdrożenia dotykającego faktur.
| Data | Kogo dotyczy |
|---|---|
| 1.02.2026 | Wystawianie w KSeF: firmy powyżej progu 200 mln zł sprzedaży. Odbieranie faktur z KSeF: wszyscy |
| 1.04.2026 | Wystawianie w KSeF: pozostali przedsiębiorcy |
| do 31.12.2026 | Mikroprzedsiębiorcy z miesięczną sprzedażą fakturowaną do 10 tys. zł brutto mogą zostać poza KSeF |
| 1.01.2027 | Obowiązek obejmuje wszystkich, startują też kary administracyjne |
Do końca 2026 roku trwa okres przejściowy bez kar administracyjnych za brak wysyłki albo błędną fakturę. Od stycznia 2027 kary sięgają 100% kwoty podatku z faktury. Druga połowa 2026 to więc ostatni komfortowy moment, żeby integrację przetestować na ostro.
Po stronie Fakturowni wysyłasz fakturę parametrem gov_save_and_send przy tworzeniu albo send_to_ksef na istniejącym dokumencie. Stan śledzisz w polu gov_status (processing, ok, send_error, server_error, not_applicable, not_connected), a po sukcesie dostajesz gov_id, czyli numer KSeF, datę wysyłki i link weryfikacyjny. Błędy walidacji lądują w gov_error_messages. System sprawdza dokumenty według schemy FA(3) i komunikuje się z produkcyjnym API KSeF 2.0.
Włączenie KSeF zmienia też to, co API w ogóle przyjmie. Komplet danych adresowych sprzedawcy staje się wymagany, podobnie jak buyer_company, buyer_tax_no, buyer_tax_no_kind i kod kraju nabywcy. Ustawienie konta „Zablokuj tworzenie faktur niezgodnych z KSeF" decyduje, czy niepełna faktura w ogóle się zapisze. Zostawiamy je włączone. Lepiej dostać kod 422 od razu, niż odkryć po miesiącu, że sto faktur nigdzie nie poleciało.
Po stronie inFaktu najpierw zakładasz integrację, wysyłając do API token wygenerowany w aplikacji Ministerstwa Finansów i przypisany do tego samego NIP-u co dane firmy. Potem wysyłasz dokumenty pojedynczo albo paczką, a status sprawdzasz osobnym zapytaniem: sent, success albo error. Po powodzeniu faktura ma pole ksef_number. Osobna przestrzeń /ksef2/ obsługuje KSeF 2.0 oraz import dokumentów z systemu MF, w tym faktur kosztowych. Listowanie importu ma niski limit, kilka zapytań na godzinę, więc pobieranie kosztów planuje się jako zadanie cykliczne, a nie odpytywanie co minutę.
Trzy konsekwencje, które trzeba znać przed pierwszą linijką kodu:
- Po nadaniu numeru KSeF faktury nie da się edytować ani usunąć. Jedyne wyjście to korekta, w skrajnym przypadku do zera.
- Wysyłka faktury mailem do firmy jest blokowana do czasu nadania numeru KSeF. Automatyzacja „wystaw i wyślij klientowi" musi więc poczekać na status, a nie odpalać maila zaraz po utworzeniu dokumentu.
- Tryb OFFLINE24 potrafi włączyć się sam. W Fakturowni rozpoznaje go data wystawienia wcześniejsza niż dzisiejsza. Nocny import zamówień z poprzedniego dnia oznaczy więc faktury jako wystawione offline, z dwoma kodami QR na wydruku. To nie błąd, ale trzeba to zaplanować, a nie odkryć.
Sześć automatyzacji, które wdrażamy najczęściej
| # | Scenariusz | Gdzie leży trudność |
|---|---|---|
| 1 | Płatność w bramce → faktura → mail do klienta | Czekanie na numer KSeF przed wysyłką |
| 2 | Zamówienie z e-commerce → faktura | Deduplikacja przy ponowieniu webhooka |
| 3 | Abonament → faktura cykliczna | Zmiany w trakcie okresu (aneksy, rabaty) |
| 4 | Wpłata na koncie → status „opłacona" | Dopasowanie wpłaty do dokumentu |
| 5 | Nieopłacone faktury → przypomnienia | Ustalenie, kiedy przestać przypominać |
| 6 | Miesięczny pakiet dla księgowej | Kompletność, nie forma pliku |
1. Płatność w bramce uruchamia fakturę. Webhook z Przelewy24, PayU albo Stripe trafia do workflow, ten składa fakturę z danych transakcji i wystawia ją przez API. Mail do klienta idzie dopiero po potwierdzeniu numeru KSeF. Same bramki i ich haczyki opisaliśmy przy płatnościach w automatyzacjach.
2. Zamówienie ze sklepu tworzy fakturę. Sensowna wersja wystawia faktury paczką raz na godzinę albo raz dziennie, zamiast reagować na każde zamówienie z osobna. Mniej zapytań, prostsze ponawianie i jeden przegląd błędów zamiast szukania igły w logach. Więcej takich procesów zebraliśmy w tekście o automatyzacji w e-commerce.
3. Abonament wystawia się co miesiąc. Przy stałych warunkach użyj natywnych faktur cyklicznych: w Fakturowni to jedna definicja przez API, w inFakcie ustawienie w aplikacji. Własny harmonogram buduj dopiero wtedy, gdy kwota zależy od zużycia albo umowa zmienia się w trakcie okresu. Rozłożenie płatności na części opisujemy osobno przy ratach i płatnościach cyklicznych.
4. Wpłata przestawia status na „opłacona". W Fakturowni dodajesz płatność powiązaną z fakturami, w inFakcie wywołujesz operację oznaczenia jako opłaconej z datą zapłaty. Prawdziwa robota siedzi w dopasowaniu: tytuł przelewu bywa dowolny, a klient płaci trzy faktury jednym przelewem. Regułę „dopasuj albo zostaw do ręcznej decyzji" trzeba mieć od początku.
5. Przypomnienia o nieopłaconych. Zapytanie o faktury bez daty zapłaty i po terminie, potem uprzejmy mail, po kolejnych dniach mocniejszy, na końcu zadanie dla człowieka. Zwraca się najszybciej z całej szóstki i jako jedyny nie wymaga niczego poza odczytem z API.
6. Miesięczny pakiet dla księgowej. Zestawienie sprzedaży, komplet PDF-ów i lista dokumentów kosztowych, raz w miesiącu, jednym mailem albo do folderu. Odkąd KSeF pozwala pobierać faktury kosztowe programowo, ten scenariusz upraszcza się po obu stronach. Pełny obieg dokumentów opisaliśmy przy automatyzacji biura rachunkowego.
Dane nabywcy po NIP, bez przepisywania
Ani Fakturownia, ani inFakt nie odpytają za Ciebie rejestrów po NIP-ie. Ten krok dokładasz po swojej stronie i jest to jedna z najtańszych rzeczy, jakie można zrobić dla jakości danych.
Wzorzec wygląda tak samo w każdym naszym wdrożeniu: klient podaje wyłącznie NIP, workflow pobiera nazwę, adres i status VAT z publicznych rejestrów, dopiero komplet trafia do systemu fakturowego. Nikt nie wpisuje ręcznie nazwy spółki, nie ma literówek w ulicy i nie ma dyskusji, czy to „sp. z o.o." czy „Sp. z o. o.". Przy okazji dostajesz weryfikację rachunku bankowego kontrahenta. Pod KSeF ma to dodatkowe znaczenie, bo pełne dane adresowe nabywcy przestały być opcjonalne, a faktura z niekompletnym adresem nie przejdzie walidacji.
Druga zasada: kluczem klienta jest NIP, nie nazwa. Oba API pozwalają wyszukać kontrahenta po numerze, więc integracja powinna najpierw sprawdzić, czy taki klient już istnieje, i dopiero potem go zakładać. Bez tego kartoteka po roku ma trzy wersje tej samej firmy.
Fakturownia czy inFakt: dla kogo które
| Kryterium | Fakturownia | inFakt |
|---|---|---|
| Czym jest | Program do fakturowania i sprzedaży | Fakturowanie plus księgowość, z opcją księgowego |
| Typowy odbiorca | Sklep, firma handlowa, spółka z dużą liczbą dokumentów | JDG i mniejsze spółki szukające jednego miejsca na wszystko |
| Faktury cykliczne w API | Tak, osobny zasób | Nie, tylko w aplikacji |
| Płatności w API | Tak, z rozliczaniem wielu faktur | Oznaczenie faktury jako opłaconej |
| Webhooki | Faktury, klienci, produkty; 25 prób ponowienia | Są, dokumentacja skromna |
| Środowisko testowe | Konto testowe i tryb DEMO dla KSeF | Pełny sandbox z własną rejestracją |
| Uprawnienia klucza API | Jeden token do wszystkiego | Zakresy uprawnień per zasób |
| Księgowość przez API | Nie | Koszty, JPK, zaliczki PIT, ZUS |
| Magazyn i dokumenty magazynowe | Tak | Nie |
| Tworzenie faktury | Synchroniczne | Asynchroniczne, ze sprawdzaniem statusu |
Reguła, którą stosujemy przy doborze, jest prosta. Jeśli faktura jest efektem sprzedaży i ma powstać automatycznie z zamówienia albo płatności, naturalnym wyborem jest Fakturownia. Jeśli głównym bólem jest rozliczenie firmy jednoosobowej i chcesz mieć księgowość w tym samym systemie, sensowniej wypada inFakt.
Rynek nie kończy się na tych dwóch. wFirma obsługuje podobne scenariusze i ma API z automatyczną wysyłką do KSeF w momencie tworzenia dokumentu, a Streamsoft Firmino udostępnia REST-owe API z autoryzacją Basic Auth i darmowym limitem zapytań w planie podstawowym. Nie układamy z tego rankingu, bo wybór zależy od tego, co firma już ma. Ważniejsze pytanie brzmi: czy system, w którym siedzą Twoje dane, w ogóle wystawi je na zewnątrz. Sprawdza się to w pół godziny według checklisty API, a przy cięższych systemach ERP droga bywa inna, o czym piszemy przy Optimie i Subiekcie.
Ceny obu platform startują od kilkunastu złotych miesięcznie za plan fakturowy, a darmowe warianty mają limity liczby dokumentów. Księgowość z dedykowaną osobą po stronie inFaktu to koszt rzędu kilkuset złotych miesięcznie. Cenniki zmieniają się kilka razy w roku, więc traktuj to jako rząd wielkości (stan na sierpień 2026).
Pułapki: numeracja, korekty, duplikaty
Numeracja. Numer nadaje system, nie Twoja integracja. Wpisywanie go z zewnątrz kończy się dziurami w serii albo dwoma dokumentami o tym samym numerze, czyli problemem, którego nie posprzątasz przez API. Jeśli sprzedaż ze sklepu ma iść własną numeracją, załóż na to oddzielną serię w systemie, zamiast liczyć numery samodzielnie.
Korekta. Korekta to nie edycja. W Fakturowni tworzy się ją jako dokument rodzaju correction, z powodem korekty i pozycjami w wersji przed oraz po zmianie, obowiązkowo powiązany z fakturą źródłową. Po włączeniu KSeF część danych nie może się różnić od oryginału: NIP i dane kontaktowe sprzedawcy, dane identyfikacyjne nabywcy, informacja, czy nabywca jest firmą. Zaplanuj to, zanim wpuścisz do systemu pierwszą fakturę z automatu.
Duplikaty przy ponowieniu webhooka. To najczęstsza awaria w tej klasie wdrożeń. Bramka albo sklep wysyła zdarzenie, workflow wystawia fakturę, odpowiedź nie dociera na czas, nadawca ponawia wywołanie i faktura powstaje po raz drugi. Fakturownia daje na to gotowe narzędzie: pole oid przechowuje numer zamówienia z systemu zewnętrznego, a ustawienie oid_unique blokuje utworzenie drugiej faktury z tym samym numerem. Jeśli Twoje API takiego mechanizmu nie ma, zrób to sam. Przed wystawieniem sprawdź we własnym rejestrze, czy dla danego klucza faktura już istnieje. Klucz musi pochodzić ze źródła zdarzenia, na przykład z identyfikatora transakcji, a nie być losowany po Twojej stronie.
„Najdroższy błąd w automatyzacji fakturowania nie polega na tym, że faktura się nie wystawi. Polega na tym, że wystawi się dwa razy, a nikt tego nie zauważy do końca miesiąca, bo obie wyglądają poprawnie. Odkąd KSeF blokuje kasowanie faktur, sprzątanie po takiej wpadce oznacza korekty, a nie kliknięcie w kosz." — Mikołaj Brunka, założyciel NoCodeWork
Ciche awarie. Faktura, która nie przeszła walidacji KSeF, zostaje w systemie z błędem w polu statusu i nie pojawia się nigdzie indziej. Webhook Fakturowni po 25 nieudanych próbach wyłącza się sam. Ani jedno, ani drugie nie krzyknie. Każde nasze wdrożenie ma dlatego alert na kanał zespołu, gdy dokument utknie w błędzie, i codzienne sprawdzenie, czy liczba wystawionych faktur zgadza się z liczbą opłaconych zamówień.
Limity. inFakt ma jawne limity zapytań na minutę, KSeF swoje własne. Przy paczkach oznacza to kolejkę z odstępami i ponawianiem z rosnącym opóźnieniem, a nie pętlę po tysiącu rekordów.
Kiedy nie warto tego automatyzować
Przy kilkunastu fakturach miesięcznie, wystawianych z gotowych szablonów, integracja nie zwróci się nigdy. Wystawienie jednej faktury w interfejsie to dwie minuty, a integracja ma koszt wdrożenia i stały koszt utrzymania, bo API i przepisy się zmieniają.
Drugi przypadek to sprzedaż, w której każda umowa wygląda inaczej: negocjowane rabaty, zmienne terminy, indywidualne opisy pozycji. Zanim cokolwiek tu zautomatyzujesz, trzeba ujednolicić same warunki handlowe, a to projekt biznesowy, nie techniczny. Szerzej piszemy o tym w tekście o tym, czego nie automatyzować.
Trzeci to firma, w której nikt nie potrafi powiedzieć, w którym momencie powstaje faktura i kto o tym decyduje. Automat wtedy tylko szybciej rozniesie brak ustaleń po systemie. Zacznij od mapy procesu, potem wracaj do API.
FAQ
Czy przez API Fakturowni można wysłać fakturę do KSeF?
Tak. Fakturę wysyła się parametrem gov_save_and_send przy tworzeniu dokumentu albo send_to_ksef na już istniejącej fakturze. Wynik sprawdzasz w polu gov_status, a po powodzeniu dostajesz gov_id, czyli numer KSeF, datę wysyłki i link weryfikacyjny. Błędy walidacji trafiają do pola gov_error_messages. Po nadaniu numeru KSeF faktury nie da się już edytować ani usunąć.
Czy inFakt ma środowisko testowe dla API?
Tak, inFakt udostępnia pełny sandbox pod osobnym adresem, z własną rejestracją konta i limitem rzędu kilku tysięcy faktur miesięcznie. Funkcjonalnie odpowiada produkcji, łącznie z integracją KSeF, która w sandboksie łączy się z testowym środowiskiem Ministerstwa Finansów. To najbezpieczniejszy sposób sprawdzenia integracji przed uruchomieniem jej na koncie z prawdziwymi rozliczeniami.
Jak uniknąć podwójnych faktur przy ponowieniu webhooka z bramki płatniczej?
Potrzebujesz klucza idempotencji pochodzącego ze źródła zdarzenia, na przykład identyfikatora transakcji lub numeru zamówienia. W Fakturowni zapisz go w polu oid i włącz ustawienie oid_unique, które zablokuje utworzenie drugiej faktury z tym samym numerem. Jeśli system nie ma takiego mechanizmu, prowadź własny rejestr i przed wystawieniem sprawdzaj, czy dla danego klucza faktura już istnieje.
Który system lepiej nadaje się do faktur abonamentowych?
Fakturownia, jeśli chcesz sterować cyklicznością z zewnątrz, bo ma osobny zasób API do zakładania i aktualizowania definicji faktur cyklicznych wraz z automatyczną wysyłką mailem. inFakt również wystawia faktury cykliczne, ale konfiguruje się je w aplikacji, a nie przez API. Przy kwotach zależnych od zużycia i tak wystawiasz dokumenty własnym harmonogramem, niezależnie od wybranej platformy.
Od kiedy KSeF jest obowiązkowy i co to zmienia w integracjach?
Największe firmy wystawiają faktury w KSeF od 1 lutego 2026, pozostali przedsiębiorcy od 1 kwietnia 2026, a najmniejsi mają czas do 1 stycznia 2027. Odbierać faktury z KSeF trzeba jednak już od lutego 2026. Do końca 2026 roku obowiązuje okres bez kar administracyjnych. Dla integracji oznacza to trzy zmiany: komplet danych adresowych nabywcy staje się wymagany, wysyłka faktury mailem do firmy czeka na nadanie numeru KSeF, a jedynym sposobem poprawienia dokumentu jest korekta.
Podsumowanie
Wystawianie faktur przez API to jedna z niewielu automatyzacji, których efekt widać w pierwszym tygodniu. Dane i tak są już w systemie: w bramce, sklepie albo CRM. Przepisywanie ich ręcznie do programu księgowego nie wnosi nic poza ryzykiem literówki i opóźnieniem.
Wybór platformy jest przy tym drugorzędny wobec dwóch decyzji projektowych: klucza idempotencji, dzięki któremu ponowione zdarzenie nie tworzy drugiej faktury, i planu na błędy, czyli co się dzieje, gdy walidacja KSeF odrzuci dokument albo webhook przestanie dochodzić. Integracja bez tych dwóch rzeczy działa świetnie przez trzy tygodnie, a potem generuje pracę, której nikt nie planował.
Chcesz sprawdzić, czy Wasz proces fakturowania nadaje się do automatyzacji i którą platformę wybrać pod konkretny scenariusz? Umów bezpłatną konsultację — powiemy wprost, jeśli przy Waszej liczbie faktur integracja się nie zwróci i lepiej zostać przy klikaniu.
Przeczytaj również
- Jak zautomatyzować faktury i księgowość w firmie
- Przelewy24, PayU czy Stripe: płatności w automatyzacjach firmowych
- Raty i płatności cykliczne: jak to zautomatyzować
- Agent AI do dokumentów: faktury, umowy, OCR i obieg akceptacji
- Automatyzacja w biurze rachunkowym: dokumenty od klientów bez ganiania mailami
