Dane firmy po numerze NIP w Laravelu — API GUS REGON (BIR) i biała lista VAT
Jak automatycznie uzupełniać dane kontrahenta po NIP: API BIR z rejestru REGON (SOAP, klucz, raporty, sesja), gotowa biblioteka PHP, biała lista podatników VAT i to, jak spiąć je w Laravelu z cache i kolejkami, żeby nie wpaść w limity.
Wpisanie numeru NIP i automatyczne uzupełnienie nazwy, adresu i danych rejestrowych firmy to jedna z tych funkcji, które użytkownicy biorą za oczywistość. Za kulisami stoją dwa publiczne API: BIR z rejestru REGON prowadzonego przez GUS i API wykazu podatników VAT (tzw. białej listy) Ministerstwa Finansów. Korzystamy z nich m.in. w CRM dla brokerów finansowych, gdzie dane klientów uzupełniają się same. Poniżej, jak to działa i jak to zrobić porządnie w Laravelu. Stan na wrzesień 2026.
API BIR (REGON)
Dokumentacja, wersje i klucz
Dokumentacja jest na portalu api.stat.gov.pl. Dostępne są dwie wersje usługi: BIR 1.1 i nowsza BIR 1.2 (od grudnia 2024), która m.in. obsługuje kody PKD 2025 i dłuższe numery lokali w adresach.
Do produkcji potrzebny jest klucz użytkownika, o który występuje się mailowo do GUS (podając m.in. dane firmy, osobę kontaktową i adresy IP, z których będą szły zapytania). Do testów GUS udostępnia środowisko testowe z publicznym kluczem abcde12345abcde12345 i zanonimizowaną, historyczną kopią danych.
Protokół i operacje
BIR to usługa SOAP 1.2 z nagłówkami WS-Addressing. Przebieg zapytania:
Zalogujz kluczem — zwraca identyfikator sesji, który dołącza się do kolejnych żądań w nagłówku HTTPsid.DaneSzukajPodmioty— wyszukanie po NIP, REGON albo KRS (albo po liście do 20 numerów). Odpowiedź zawiera m.in. typ podmiotu, który decyduje, jaki raport pobrać dalej.DanePobierzPelnyRaport— pełne dane w wybranym raporcie, np.BIR11OsPrawnadla osób prawnych alboBIR11OsFizycznaDzialalnoscCeidgdla jednoosobowych działalności (w wersji 1.2 z prefiksemBIR12).GetValue— m.in. kod i treść komunikatu po nieudanym wyszukiwaniu czy status sesji.Wylogujna koniec.
Odpowiedzi zawierają dane w XML zapisanym jako tekst, który trzeba osobno sparsować. Przy takiej kombinacji — SOAP 1.2, WS-Addressing, nagłówek sesji — wbudowany SoapClient bywa kłopotliwy, dlatego sięgamy po bibliotekę.
Biblioteka gusapi/gusapi
Najpopularniejsza biblioteka PHP to gusapi/gusapi. Obsługuje logowanie, wyszukiwanie i pobieranie raportów:
use GusApi\GusApi;
$gus = app()->isProduction()
? new GusApi(config('services.gus.key'))
: new GusApi('abcde12345abcde12345', 'dev');
$gus->login();
$reports = $gus->getByNip($nip);Dla każdego znalezionego podmiotu pełne dane pobiera się metodą getFullReport($report, $reportType), dobierając typ raportu (stałe w klasie ReportTypes) do typu podmiotu — inny raport dotyczy spółki, inny jednoosobowej działalności.
Warto wiedzieć, że biblioteka obsługuje BIR 1.1. Jeśli potrzebujesz pól dostępnych tylko w 1.2 (np. PKD 2025), sprawdź aktualny stan projektu albo przygotuj własną obsługę raportów 1.2.
Biała lista podatników VAT
API wykazu podatników VAT jest prostsze: REST, bez klucza. Zwraca status VAT podmiotu, dane rejestrowe i — co najważniejsze przy płatnościach — zgłoszone rachunki bankowe.
$response = Http::baseUrl('https://wl-api.mf.gov.pl')
->get("/api/search/nip/{$nip}", ['date' => now()->toDateString()])
->throw()
->json('result');Każda odpowiedź ma requestId, który warto zapisać — to potwierdzenie, że rachunek był sprawdzony danego dnia. Limity są niskie: około 100 zapytań wyszukujących dziennie (do 30 podmiotów w jednym zapytaniu) i kilka tysięcy zapytań sprawdzających rachunek. Przy dużej liczbie kontrahentów lepiej korzystać z codziennie publikowanego pliku płaskiego.
Jak spinamy to w Laravelu
- Serwis z jednym interfejsem —
CompanyLookup::byNip()zwraca znormalizowany obiekt z nazwą, adresem, REGON, KRS i statusem VAT, niezależnie od tego, z którego API pochodzą dane. - Cache — dane firmy zmieniają się rzadko, więc wynik trzymamy w cache i nie odpytujemy GUS przy każdym otwarciu formularza. To także ochrona przed limitami.
- Kolejki — masowa aktualizacja danych kontrahentów (np. co noc) idzie w kolejce, porcjami, z przerwami między zapytaniami.
- Logowanie — każde zapytanie zapisujemy z wynikiem; przy danych, na podstawie których podejmuje się decyzje (np. rachunek do przelewu), to ślad audytowy.
- Obsługa braku danych — nieznaleziony podmiot, przerwa techniczna usługi, wygasła sesja: każdy przypadek ma własny komunikat dla użytkownika zamiast ogólnego błędu.
- Testy — w testach podmieniamy klientów API na atrapy (
Http::fake()dla białej listy, mock serwisu dla BIR), a środowisko testowe GUS zostawiamy do testów integracyjnych.
Te same zasady stosujemy przy innych rejestrach, np. CEIDG, KRS i SUDOP — w CRM dla brokerów synchronizacja z rejestrami działa zarówno na żądanie doradcy, jak i masowo po dacie zmian. Więcej o tym, jak budujemy takie połączenia, na stronie integracji API dla firm.
Podsumowanie
- BIR (REGON): SOAP 1.2 z WS-Addressing, klucz od GUS, sesja w nagłówku
sid, raporty zależne od typu podmiotu; wersje 1.1 i 1.2. - gusapi/gusapi oszczędza pracy z SOAP, ale obsługuje BIR 1.1.
- Biała lista VAT: REST bez klucza, niskie limity dzienne,
requestIdjako potwierdzenie sprawdzenia. - W Laravelu: jeden serwis, cache, kolejki dla operacji masowych, logowanie i atrapy w testach.
Chcesz, żeby Twój system sam uzupełniał dane kontrahentów? Napisz do nas — zbudujemy integrację z GUS, białą listą i innymi rejestrami, których potrzebujesz.