BerlinettaBerlinetta

Blog10 min czytania

wFirma API: klucze, KSeF i integracja ze sklepem (2026)

wFirma API w praktyce: klucze accessKey, secretKey i appKey, formaty XML i JSON, moduły, limity, statusy KSeF i sposoby połączenia sklepu z fakturami.

Zespół BerlinettySprzedaż wielokanałowa w praktyce

W tym artykule

wFirma API to interfejs, przez który program sklepu albo własny skrypt wystawia faktury, dodaje kontrahentów i pobiera dokumenty w wFirma bez logowania do panelu. Zapytania wysyłasz pod adres api2.wfirma.pl, a uwierzytelniasz się kluczami API albo przez aplikację z tokenem dostępu.

Z API korzystają głównie twórcy integracji i sklepy z własnym systemem. Jeśli sprzedajesz na Shoperze, PrestaShopie albo Magento, wFirma ma gotowe połączenie i programować nie musisz. W tym przewodniku znajdziesz oba scenariusze, a także to, jak API wFirma wiąże się z KSeF.

Krótko mówiąc

  • wFirma API przyjmuje zapytania pod adresem api2.wfirma.pl. Adres to zawsze moduł i akcja, na przykład invoices/add albo contractors/find.
  • Do kluczy API potrzebujesz trzech wartości: accessKey i secretKey z panelu oraz appKey, który wFirma wydaje twórcy integracji.
  • Dane wysyłasz w XML (domyślnie) albo w JSON. Format wybierasz parametrami inputFormat i outputFormat.
  • Limitów liczby zapytań wFirma nie publikuje w liczbach. Zależą od obciążenia serwera, a ciężkie operacje zaleca robić w nocy.
  • Faktura pobrana przez API ma numer i status KSeF, a webhook powiadomi Cię o zmianie statusu. Wysyłkę do KSeF ustawiasz w panelu wFirma.

Co to jest wFirma API i do czego służy

API wFirma działa według prostej konwencji. Adres zapytania to zawsze moduł i akcja: https://api2.wfirma.pl/NAZWA_MODUŁU/NAZWA_AKCJI. Akcje mają stałe nazwy: get, find, add, edit i delete. Do tego dochodzą akcje specjalne, na przykład pobranie PDF faktury.

Dane wymieniasz w XML albo w JSON. Domyślny jest XML, a format zmieniasz parametrami w adresie, na przykład ?inputFormat=json&outputFormat=json. Serwer sam przelicza dane między formatami, więc możesz wysyłać JSON i odbierać XML.

Pełny opis każdego modułu, z listą pól i przykładami, publikuje dokumentacja API wFirma. Najczęściej korzystają z niej trzy grupy:

  • sklepy z własnym silnikiem, które chcą wystawiać fakturę zaraz po opłaceniu zamówienia,
  • twórcy programów do sprzedaży i magazynu, którzy łączą swoje narzędzie z księgowością klienta,
  • biura rachunkowe, które automatyzują pobieranie dokumentów od wielu firm.

Moduły API wFirma: co da się zautomatyzować

Dokumentacja opisuje kilkadziesiąt modułów. Dla sprzedaży w internecie liczy się kilka z nich.

Obszar Moduły Co zrobisz
Sprzedaż invoices, invoices_correction wystawisz fakturę i korektę, pobierzesz PDF, wyślesz fakturę e-mailem do klienta
Sprzedaż wysyłkowa invoice_deliveries rozliczysz dostawę, gdy data dostarczenia nie była znana przy wystawieniu
Kontrahenci contractors dodasz, wyszukasz i poprawisz dane kupujących
Towary i magazyn goods, warehouses, warehouse_documents dodasz towary i dokumenty magazynowe, na przykład PZ i WZ
Płatności payments, payment_cashboxes zapiszesz wpłatę do faktury
Koszty i dokumenty expenses, documents odczytasz wydatki, dodasz i pobierzesz dokumenty
Powiadomienia webhooks dostaniesz sygnał o nowej fakturze, płatności, zmianie stanu towaru i statusu KSeF

Moduł faktur ma też akcje fiscalize i unfiscalize. Oznaczają one paragon fiskalny jako zafiskalizowany albo cofają to oznaczenie. Sam druk paragonu wFirma obsługuje przez integrację z drukarkami fiskalnymi.

Porada profesjonalisty

zamiast co minutę pytać API o nowe płatności, zarejestruj webhook payments/add. Odciążysz limit zapytań, a wpłata trafi do Twojego systemu od razu.

Jak się uwierzytelnić: klucze API i aplikacja z tokenem

wFirma daje dwie główne drogi dostępu. Wybór zależy od tego, czy integrujesz jedną firmę, czy budujesz aplikację dla wielu klientów.

Klucze API: accessKey, secretKey i appKey

Klucze tworzysz w panelu wFirma w zakładce Ustawienia, Bezpieczeństwo, Aplikacje, Klucze API. Dostajesz tam dwa klucze: accessKey i secretKey. Trzeci, appKey, wydaje wFirma twórcy integracji. Zamawiasz go formularzem kontaktowym, podając nazwę aplikacji, telefon, e-mail i adres strony.

Jeden appKey obsłuży wiele kont użytkowników wFirma. Każde zapytanie niesie wszystkie trzy klucze w nagłówkach accessKey, secretKey i appKey. Inne parametry autoryzacji nie są potrzebne.

Dwie rzeczy zaskakują najczęściej. secretKey wyświetla się tylko raz, podczas tworzenia kluczy. Każda zmiana klucza aplikacji w panelu zmienia też accessKey i secretKey, więc integracja przestaje działać do czasu wpisania nowych wartości.

Aplikacja z tokenem dostępu (wersja 2.0)

Druga droga to aplikacja, którą użytkownik autoryzuje, logując się do wFirma. Tworzysz ją w zakładce Ustawienia, Bezpieczeństwo, Aplikacje, w sekcji aplikacji w wersji 2.0. Podajesz nazwę, zakres uprawnień, adres zwrotny i adres IP serwera.

Aplikację utworzysz tylko na zweryfikowanej firmie, a potem sprawdzają ją pracownicy wFirma. Po weryfikacji dostajesz client_id i client_secret. Użytkownik loguje się, Ty wymieniasz otrzymany kod na token pod adresem https://api2.wfirma.pl/oauth2/token?oauth_version=2, a token wysyłasz w nagłówku Authorization jako Bearer. Do każdego zapytania dodajesz wtedy parametr ?oauth_version=2.

Zakresy dzielą każdy moduł na odczyt i zapis, na przykład invoices-read i invoices-write. Zapytanie spoza przyznanego zakresu kończy się błędem DENIED SCOPE REQUESTED. Dokumentacja opisuje też starszą wersję 1.0a tego standardu, z kluczami wydawanymi przez wFirma na prośbę wysłaną e-mailem.

Sposób Dla kogo Co musisz zrobić
Klucze API jedna firma albo integrator obsługujący klientów jednym appKey utworzyć klucze w panelu i zamówić appKey
Aplikacja z tokenem (2.0) aplikacja, do której loguje się wielu użytkowników wFirma zweryfikować firmę, utworzyć aplikację i przejść weryfikację wFirma

Porada profesjonalisty

trzymaj secretKey w menedżerze sekretów, a nie w kodzie ani w pliku konfiguracyjnym w repozytorium. Skoro wFirma pokazuje go tylko raz, zgubiony klucz oznacza nową parę kluczy i przestawienie integracji.

Pierwsze zapytanie: format danych i parametr company_id

Odpowiedź API ma najwyżej dwie gałęzie najwyższego poziomu. Pierwsza nosi nazwę modułu, na przykład invoices, i zawiera rekordy. Druga to status z kodem wyniku, na przykład OK.

Przykład dodania faktury wygląda w dokumentacji tak. To fragment skrócony do najważniejszych pól:

<api>
  <invoices>
    <invoice>
      <contractor>
        <name>Testowy kontrahent</name>
        <zip>10-100</zip>
        <city>Wrocław</city>
      </contractor>
      <type>normal</type>
      <invoicecontents>
        <invoicecontent>
          <name>123123</name>
          <count>1.0000</count>
          <price>9699.00</price>
          <unit>szt.</unit>
        </invoicecontent>
      </invoicecontents>
    </invoice>
  </invoices>
</api>

Jeśli Twoje konto ma kilka firm, dodawaj do każdego zapytania parametr company_id. Bez niego dokument może trafić do innej firmy, niż zakładasz. Listę firm pobierzesz akcją user_companies/find, a przy braku parametru API zwraca błąd COMPANY ID REQUIRED.

Wyszukiwanie przez find przyjmuje numer strony (od 1) i limit wyników na stronę. Możesz też ograniczyć odpowiedź do wybranych pól, na przykład numeru i daty faktury. Według dokumentacji może to wyraźnie przyspieszyć zapytania.

Limity, błędy i dobre praktyki

wFirma nie publikuje liczbowych limitów zapytań. Przekroczenie sygnalizują dwa błędy: TOTAL REQUESTS LIMIT EXCEEDED (za dużo zapytań) i TOTAL EXECUTION TIME LIMIT EXCEEDED (za długi łączny czas wykonania). Dokumentacja tłumaczy, że limity zależą od bieżącego obciążenia serwera. Zaleca wykonywanie cięższych zapytań w nocy i unikanie serii zapytań w krótkich odstępach.

Inne komunikaty, które warto obsłużyć w kodzie:

  • AUTH FAILED LIMIT WAIT 5 MINUTES: za dużo nieudanych logowań, kolejna próba dopiero po pięciu minutach,
  • OUT OF SERVICE: API chwilowo wyłączone, na przykład podczas aktualizacji,
  • SNAPSHOT LOCK: trwa odtwarzanie danych firmy z kopii i wszystkie operacje są zablokowane,
  • ERROR: błędy walidacji, które API dokleja do przesłanego rekordu, przy konkretnych polach.

Najważniejsza praktyka dotyczy zapisów. Gdy dodanie faktury skończy się błędem limitu albo przerwanym połączeniem, nie ponawiaj go w ciemno. Najpierw sprawdź przez find, czy faktura nie powstała. Inaczej klient dostanie dwie faktury za jedno zamówienie.

wFirma i KSeF: co robi panel, a co pokazuje API

Wysyłkę faktur do KSeF w wFirma ustawiasz w panelu, w zakładce Przychody, KSeF. Według centrum pomocy wFirma administrator wybiera zakres integracji: import faktur zakupu, wysyłkę faktur dla firm, wysyłkę faktur dla konsumentów i pobieranie sprzedaży. Faktura dla firmy może trafić do KSeF od razu po zapisaniu, a przycisk „Zapisz i wyślij do KSeF” robi obie rzeczy naraz.

Do połączenia z KSeF wFirma przyjmuje trzy rodzaje autoryzacji:

  1. certyfikat wygenerowany w wFirma,
  2. własny certyfikat z Ministerstwa Finansów,
  3. token, którego według wFirma można używać tylko do końca 2026 roku.

Autoryzacja działa na użytkownika, więc każdy pracownik autoryzuje się na swoim koncie. Integracja z KSeF jest w pakietach, bez dodatkowej opłaty.

API pokazuje wynik tej wysyłki. Faktura ma pola ksef_reference_number (numer nadany przez KSeF), ksef_status i ksef_registration_date, wszystkie tylko do odczytu. Osobnej akcji wysyłki do KSeF dokumentacja API nie opisuje. Zmianę statusu zgłosi Ci webhook invoice_ksefs/change_state.

Porada profesjonalisty

przed uruchomieniem integracji dodaj przez API jedną fakturę testową dla firmy i sprawdź, czy automatyczna wysyłka z panelu ją obejmuje. Webhook statusu KSeF potwierdzi wynik bez ręcznego zaglądania do wFirma.

Terminy obowiązku KSeF centrum pomocy wFirma podaje dla typowej firmy tak: odbiór faktur zakupowych od 1 lutego 2026 roku i wysyłka faktur sprzedaży od 1 kwietnia 2026 roku. Największe firmy, ze sprzedażą powyżej 200 mln zł w 2024 roku, wystawiają faktury w KSeF już od 1 lutego 2026 roku. Najmniejsze, ze sprzedażą na fakturach do 10 tys. zł miesięcznie, mają czas do 1 stycznia 2027 roku. Więcej o obowiązkach sklepów piszemy w artykule faktury KSeF w e-commerce.

Jak połączyć sklep z wFirma: gotowa integracja czy własne API

Zanim zaczniesz programować, sprawdź listę gotowych połączeń. Serwis wFirma wymienia integracje ze sklepami, między innymi Shoper, Clickshop, Magento, PrestaShop, CS-Cart, Gekosale i CStore. Po zarejestrowaniu zamówienia w sklepie dokument sprzedaży może powstać w wFirma automatycznie.

Sprzedaż z Allegro wFirma opisuje przez integrację z programem Apilo. Integrację z wFirma deklaruje też Base.com. WooCommerce na liście wFirma nie ma, więc tu zostaje program pośredniczący albo własne API.

Infografika: sześć kroków połączenia sklepu z wFirma przez API, od listy integracji do monitoringu

Jeśli budujesz integrację sam, przejdź te kroki:

  1. Sprawdź gotowe integracje. Własny kod ma sens dopiero wtedy, gdy żadna z nich nie pasuje.
  2. Zdobądź klucze. Utwórz accessKey i secretKey w panelu i zamów appKey w wFirma.
  3. Ustal company_id. Pobierz listę firm i zapisz identyfikator tej, w której wystawiasz faktury.
  4. Zmapuj dane zamówienia. Pozycje, stawki VAT, koszt dostawy, sposób płatności i dane do faktury.
  5. Przetestuj na kilku zamówieniach. Sprawdź sumy, numerację, PDF i status KSeF.
  6. Dodaj webhooki i monitoring. Reaguj na płatności i statusy KSeF, a błędy zapisuj w dzienniku.
Infografika: porównanie własnej integracji przez API wFirma z gotową integracją

Własna integracja ma sens przy nietypowym sklepie, dużej liczbie dokumentów albo specyficznym przepływie, na przykład przy fakturach zbiorczych. Pamiętaj o koszcie utrzymania. API się rozwija, a dokumentacja wprost zastrzega, że w odpowiedziach mogą pojawić się nowe gałęzie, które Twój kod musi bezpiecznie pominąć.

Faktury prosto z programu do sprzedaży

Jeśli sprzedajesz na kilku kanałach naraz, wygodniej bywa wystawiać faktury tam, gdzie i tak obsługujesz zamówienia. Wtedy nie budujesz osobnego połączenia z systemem fakturowym dla każdego sklepu.

W Berlinettcie faktura powstaje z danych zamówienia z Allegro, Erli albo Twojego sklepu, pojedynczo albo hurtem. Program sam wybiera fakturę albo paragon, zależnie od tego, czy kupujący prosił o fakturę. Gotową fakturę wysyłasz do KSeF bez wychodzenia z programu, a przy dokumencie zostaje numer KSeF, status i potwierdzenie odbioru.

Z wFirma Berlinetta się nie łączy. Jeśli wolisz zewnętrzny system fakturowy, masz dwie gotowe drogi:

  • inFakt: faktury i korekty do zamówień powstają w Twoim inFakcie, z listy nawet 100 naraz, a numer, PDF i płatność wracają do Berlinetty. Jak działa samo API inFakt, opisujemy w artykule inFakt API.
  • Subiekt nexo PRO: faktury i paragony wystawia Subiekt na Twoim komputerze, a paragon fiskalizuje na Twojej drukarce fiskalnej.

Biuru rachunkowemu pobierzesz albo wyślesz e-mailem plik JPK_V7M. Wszystko to jest w każdym pakiecie, od 89 zł netto miesięcznie, a pierwsze 30 dni testujesz bezpłatnie.

Z praktyki: błędy, które psują integrację z wFirma

Najdroższy błąd to podwójna faktura. Skrypt dostaje błąd limitu, ponawia invoices/add, a pierwsza próba jednak się udała. Każdy zapis powinien mieć w Twoim systemie znacznik zamówienia, po którym sprawdzisz, czy faktura już istnieje.

Drugi błąd to zmiana klucza w panelu bez aktualizacji integracji. Ktoś „porządkuje” aplikacje w ustawieniach, a sklep od tej chwili nie wystawia faktur. Ustal, kto może zmieniać klucze, i ustaw alert na błąd AUTH.

Trzeci błąd dotyczy sprzedaży wysyłkowej. Przy wystawieniu faktury nie znasz daty dostarczenia paczki. API ma na to pole disposaldate_empty i osobne rozliczenie dostawy w module invoice_deliveries. Kto o tym nie wie, wpisuje datę sprzedaży na oko.

Czwarty błąd to parser JSON, który oczekuje listy. W JSON wFirma rekordy są numerowane kluczami „0”, „1”, nawet gdy jest tylko jeden. Kod napisany pod tablicę wywraca się przy pierwszej odpowiedzi.

Integracja z systemem fakturowym działa latami bez dotykania tylko wtedy, gdy od początku zakładasz błędy po stronie sieci, limitów i ludzi. Zapis, który da się bezpiecznie powtórzyć, oszczędza więcej czasu niż najszybszy kod.

Zespół Berlinetta

Źródła

  1. 1.wFirma: dokumentacja API (doc.wfirma.pl)
  2. 2.wFirma: integracja z KSeF, pomoc
  3. 3.wFirma: oprogramowanie księgowe zintegrowane z e-commerce
  4. 4.wFirma: integracje ze sklepami internetowymi, pomoc
  5. 5.Base.com: integracja wFirma z Allegro

Pytania

Najczęstsze pytania

Czy wFirma ma API?

Tak. wFirma udostępnia API pod adresem api2.wfirma.pl, a dokumentację publikuje na doc.wfirma.pl. Przez API wystawisz faktury i korekty, pobierzesz PDF, dodasz kontrahentów i towary, zapiszesz płatności i dokumenty magazynowe.

Jak wygenerować klucz API w wFirma?

W wFirma wejdź w Ustawienia, Bezpieczeństwo, Aplikacje, Klucze API i utwórz klucze accessKey oraz secretKey. secretKey zobaczysz tylko raz, więc zapisz go od razu. Trzeci klucz, appKey, wydaje wFirma twórcy integracji po wypełnieniu formularza kontaktowego.

Czy API wFirma obsługuje JSON?

Tak. Domyślnym formatem jest XML, ale parametrami inputFormat=json i outputFormat=json w adresie zapytania przełączysz wejście i wyjście na JSON. W JSON rekordy w gałęzi modułu są zawsze numerowane kluczem, nawet gdy jest tylko jeden.

Czy przez API wFirma wyślę fakturę do KSeF?

Dokumentacja API nie opisuje osobnej akcji wysyłki do KSeF. Faktura pobrana przez API ma za to pola z numerem KSeF, statusem i datą przetworzenia, a webhook invoice_ksefs/change_state informuje o zmianie statusu. Wysyłkę do KSeF włączasz i ustawiasz w panelu wFirma, w Przychody, KSeF.

Czy integracja wFirma z KSeF jest płatna?

Według centrum pomocy wFirma integracja z KSeF jest dostępna w ramach pakietów, bez dodatkowej opłaty. Do połączenia potrzebujesz certyfikatu wygenerowanego w wFirma, własnego certyfikatu z Ministerstwa Finansów albo tokenu, którego można używać tylko do końca 2026 roku.

Jakie sklepy mają gotową integrację z wFirma?

Serwis wFirma wymienia między innymi Shoper, Clickshop, Magento, PrestaShop, CS-Cart, Gekosale i CStore. Sprzedaż z Allegro wFirma opisuje przez integrację z programem Apilo. Gdy Twojej platformy nie ma na liście, zostaje program pośredniczący albo własna integracja przez API.

Sprzedajesz w kilku miejscach naraz?

Obsługuj Allegro, Erli, własny sklep i kurierów w jednym panelu. Bez przepisywania danych.