Dla programistów · REST i MCP

API Wykazu VAT (Biała Lista) po NIP
REST/JSON bez klucza

Status VAT i dane podmiotu z Wykazu VAT (Biała Lista, Ministerstwo Finansów) po numerze NIP — jednym zapytaniem GET, w odpowiedzi czysty JSON. Bez klucza API, bez rejestracji i bez dziennego limitu zapytań. To warstwa nad API Wykazu VAT MF, która zdejmuje z Ciebie sesje, daty w URL i parsowanie odpowiedzi.

Jeden GET, jeden JSON

Endpoint jest publiczny, metoda GET, a parametr ?format=json zwraca dane maszynowo (bez niego dostajesz stronę HTML dla człowieka). Dane z Wykazu VAT są w polu bl (Biała Lista):

curl "https://skanfirmy.pl/nip/5260250995?format=json"

W odpowiedzi dostajesz status VAT, oficjalną nazwę, REGON, adres, numer KRS i znacznik czasu z Ministerstwa Finansów — prosto z Wykazu VAT:

{
  "nip": "5260250995",
  "source": "krs",
  "bl": {
    "nip": "5260250995",
    "name": "ORANGE POLSKA SPÓŁKA AKCYJNA",
    "regon": "012100784",
    "statusVat": "Czynny",
    "address": "ALEJE JEROZOLIMSKIE 160, 02-326 WARSZAWA",
    "krs": "0000010681",
    "registrationLegalDate": "1996-01-01",
    "mfRequestDateTime": "25-08-2026 14:59:57"
  },
  "krs": { ... },
  "checkedAt": "2026-08-25"
}

Bez klucza API, bez rejestracji, bez limitu

Endpoint działa od razu — nie musisz zakładać konta, generować klucza API ani pilnować dziennego limitu zapytań. To celowa różnica względem komercyjnych nakładek na Wykaz VAT: chcemy, żeby weryfikację statusu VAT dało się wpiąć w minutę, także z poziomu agenta AI. Serwis jest utrzymywany bezpłatnie; przy dużym, automatycznym ruchu prosimy tylko o rozsądek (pojedyncze zapytania inicjowane przez użytkowników, nie masowy scraping).

Co zwraca pole bl

Wykaz VAT (Biała Lista) prowadzi Ministerstwo Finansów. Pole bl w odpowiedzi /nip/{nip} zawiera dane podatnika VAT po NIP:

PoleZnaczenie
statusVatLiterał MF: Czynny — czynny podatnik VAT, Zwolniony — podatnik zwolniony, Niezarejestrowany — brak w rejestrze VAT
nameOficjalna nazwa podatnika z Wykazu VAT
regonNumer REGON podmiotu
addressAdres z Wykazu VAT (siedziba lub stałe miejsce prowadzenia działalności)
krsNumer KRS (jeśli podmiot jest w Krajowym Rejestrze Sądowym)
registrationLegalDateData rejestracji jako podatnik VAT
mfRequestDateTimeZnacznik czasu odpowiedzi Ministerstwa Finansów — dowód, na jaki moment aktualny jest status (przydatne do celów dowodowych)

Do rozgałęzień w kodzie porównuj zawsze surowy literał MF ("Czynny", "Zwolniony", "Niezarejestrowany") — nie tłumacz go przed porównaniem, bo tłumaczenie zmieniłoby wartość, na której opierasz logikę.

Uwaga: to nie jest lista rachunków bankowych

Endpoint /nip/{nip} nie zwraca listy rachunków bankowych z Wykazu VAT. Zwraca status VAT i dane podmiotu (pole bl), ale nie tablicy numerów kont. Jeśli chcesz sprawdzić, czy konkretny rachunek (NRB, 26 cyfr) figuruje na Białej Liście dla danego NIP, użyj narzędzia MCP sprawdz_rachunek — weryfikuje ono pojedynczy rachunek względem Wykazu VAT. W interfejsie zrobisz to samo w narzędziu Weryfikacja rachunku. Nie zakładaj, że endpoint zwróci wszystkie konta podmiotu — po prostu ich nie ma w odpowiedzi.

W Pythonie

Z biblioteką requests całość to kilka linii. Zwróć uwagę na porównanie do surowego literału "Czynny":

import requests

def status_vat(nip: str) -> str:
    r = requests.get(f"https://skanfirmy.pl/nip/{nip}?format=json", timeout=10)
    r.raise_for_status()
    return r.json()["bl"]["statusVat"]

s = status_vat("5260250995")
# porównuj do surowego literału MF, nie do przetłumaczonej etykiety
if s == "Czynny":
    print("Czynny podatnik VAT")
else:
    print("Uwaga — status:", s)
# ORANGE POLSKA SPÓŁKA AKCYJNA → Czynny

Podmiot spoza rejestru zwraca 404, a NIP z błędną sumą kontrolną — 400. Warto obsłużyć oba przypadki, zamiast zakładać, że każdy NIP ma wpis.

W JavaScripcie

const r = await fetch("https://skanfirmy.pl/nip/5260250995?format=json");
if (r.ok) {
  const { bl } = await r.json();
  console.log(bl.name, "→", bl.statusVat);
  // bl.statusVat === "Czynny" — porównuj do surowego literału
}

W PHP

$ch = curl_init("https://skanfirmy.pl/nip/5260250995?format=json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$bl = json_decode(curl_exec($ch), true)["bl"];
echo $bl["name"] . " · VAT: " . $bl["statusVat"];
// ORANGE POLSKA SPÓŁKA AKCYJNA · VAT: Czynny

Wiele NIP-ów naraz

Do sprawdzenia statusu VAT dla listy podmiotów jednym zapytaniem użyj /nips/{lista}?format=json — NIP-y rozdzielasz przecinkami, a w odpowiedzi dostajesz wpis (z polem bl) dla każdego z nich:

curl "https://skanfirmy.pl/nips/5260250995,7010001454?format=json"

Więcej niż status VAT — jednym NIP-em

Odpowiedź /nip/{nip}?format=json łączy Wykaz VAT (pole bl) z danymi z KRS (pole krs) w jednej odpowiedzi. Jeśli potrzebujesz też danych z REGON albo walidacji unijnego numeru VAT, użyj osobnych endpointów (wszystkie GET → JSON, bez klucza):

  • /nip/{nip} — status VAT (Wykaz VAT) + KRS + REGON
  • /nips/{lista} — wiele NIP-ów naraz (rozdzielonych przecinkami)
  • /regon/{nip} — dane z rejestru REGON (GUS) — zobacz API GUS (REGON)
  • /vies/{kraj}/{numer} — walidacja unijnego numeru VAT (VIES, Komisja Europejska) — zobacz API VIES

Dane z KRS wyciągane po tym samym NIP-ie opisuje API KRS, a dane z REGON — API GUS (REGON).

Dla agentów AI pod adresem https://skanfirmy.pl/mcp stoi serwer Model Context Protocol (MCP) z narzędziem sprawdz_nip (te same dane, w tym pole bl) oraz sprawdz_rachunek (weryfikacja konkretnego rachunku bankowego względem Wykazu VAT) — również bez klucza. Mapa endpointów dla modeli jest w llms.txt. Weryfikację po NIP w interfejsie zrobisz w narzędziu Biała Lista VAT.

Publiczny endpoint a typowe płatne API Wykazu VAT

Większość komercyjnych nakładek REST na Wykaz VAT działa w modelu freemium — konto, klucz API i dzienny limit zapytań w bezpłatnym progu. Ten endpoint jest publiczny i bez opłat. Różnice w skrócie:

Typowe płatne API Wykazu VATskanfirmy.pl /nip
Klucz APIwymaganyniepotrzebny
Rejestracja / kontotaknie
Limit zapytańzwykle jestbrak twardego limitu (prosimy o rozsądek)
Format odpowiedziREST/JSONREST/JSON
Serwer MCP dla agentów AIzwykle braktak
Zakreszwykle sam status VATVAT + KRS + REGON + VIES (osobne endpointy)
Modelfreemium / abonamentbezpłatnie

To nie jest oficjalne API Wykazu VAT — dane pochodzą z tego samego źródła (Wykaz VAT prowadzony przez Ministerstwo Finansów), tylko udostępnione jednym zapytaniem GET.

Skąd pochodzą dane i czym to nie jest

Dane pochodzą wprost z Wykazu VAT (Biała Lista) prowadzonego przez Ministerstwo Finansów. To niezależne narzędzie — nie jest oficjalnym API MF ani z nim powiązane; jedynie udostępnia jego dane w wygodniejszej formie. Zakres i aktualność danych są takie, jak w Wykazie VAT; znacznik mfRequestDateTime mówi, na jaki moment status został pobrany z MF.

Najczęstsze pytania

Jak sprawdzić status VAT firmy po NIP w formacie JSON?

Wyślij GET na https://skanfirmy.pl/nip/{NIP}?format=json i odczytaj pole bl.statusVat. Zwraca ono literał Ministerstwa Finansów: Czynny, Zwolniony lub Niezarejestrowany. W tym samym polu bl dostajesz też nazwę, REGON, adres i numer KRS.

Czy potrzebny jest klucz API albo rejestracja?

Nie. Endpoint /nip/{nip} jest publiczny — zwraca JSON po dodaniu ?format=json, bez klucza API, bez zakładania konta i bez dziennego limitu zapytań.

Czy endpoint zwraca listę rachunków bankowych z Białej Listy?

Nie. Pole bl zawiera status VAT i dane podmiotu (nazwa, REGON, adres, KRS), ale nie listy rachunków bankowych. Żeby sprawdzić, czy konkretny rachunek (NRB) figuruje na Białej Liście dla danego NIP, użyj narzędzia MCP sprawdz_rachunek lub narzędzia /rachunek w interfejsie.

Jakie wartości przyjmuje statusVat i jak je porównywać?

Pole statusVat przyjmuje surowe literały Ministerstwa Finansów: Czynny, Zwolniony lub Niezarejestrowany. W kodzie porównuj zawsze do surowego literału (np. == "Czynny") i nie tłumacz go przed rozgałęzieniem — tłumaczenie zmieniłoby wartość, na której opiera się logika.

Czy korzystanie jest płatne?

Nie. Endpoint jest bezpłatny i bez rejestracji. Dane pochodzą wprost z Wykazu VAT (Biała Lista) prowadzonego przez Ministerstwo Finansów.