API KRS po NIP
REST/JSON bez klucza
Dane z Krajowego Rejestru Sądowego po numerze NIP — jednym zapytaniem GET, w odpowiedzi czysty JSON. Bez klucza API i bez rejestracji. Nie musisz znać numeru KRS: wyszukiwanie idzie po NIP, a w odpowiedzi dostajesz formę prawną, kapitał zakładowy, zarząd, sposób reprezentacji i kody PKD.
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 KRS znajdziesz w polu krs:
curl "https://skanfirmy.pl/nip/5260250995?format=json"
W polu krs dostajesz komplet danych rejestrowych — numer KRS, nazwę, formę prawną, kapitał zakładowy, organ reprezentacji wraz ze sposobem reprezentacji, skład zarządu i kody PKD:
{
"krs": {
"numerKRS": "0000010681",
"nazwa": "ORANGE POLSKA SPÓŁKA AKCYJNA",
"formaPrawna": "SPÓŁKA AKCYJNA",
"nip": "5260250995",
"regon": "012100784",
"opp": false,
"adres": "AL. JEROZOLIMSKIE 160, 02-326, WARSZAWA",
"kapital": "3937072437,00 PLN",
"organ": "ZARZĄD SPÓŁKI",
"sposobReprezentacji": "PREZES ŁĄCZNIE Z CZŁONKIEM ZARZĄDU",
"sklad": ["CZŁONEK ZARZĄDU", "..."],
"pkdMain": [{ "code": "61.10.B", "opis": "POZOSTAŁA DZIAŁALNOŚĆ W ZAKRESIE TELEKOMUNIKACJI ..." }],
"pkdOther": [{ "code": "78.10.Z", "opis": "..." }],
"dataRejestracji": "02.05.2001",
"dataOstatniegoWpisu": "24.04.2026",
"stanZDnia": "24.04.2026",
"dataCzasOdpisu": "25.08.2026 14:59:57"
}
}
Bez klucza API i bez rejestracji
Endpoint działa od razu — nie musisz zakładać konta ani generować klucza API. To celowa różnica względem komercyjnych nakładek na KRS: chcemy, żeby integrację 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).
Wyszukiwanie po NIP, nie po numerze KRS
Oficjalne API KRS Ministerstwa Sprawiedliwości działa po numerze KRS — musisz go najpierw skądś mieć, a odpowiedź to pełny odpis w rozbudowanej strukturze JSON (osobno rubryki, działy i wpisy). W praktyce najczęściej masz jednak NIP, nie numer KRS. Nasz endpoint przyjmuje NIP, po stronie serwera znajduje właściwy wpis i zwraca spłaszczony, gotowy do użycia zestaw pól.
Co zwraca pole krs w odpowiedzi /nip/{nip}:
| Pole | Znaczenie |
|---|---|
numerKRS | Numer w Krajowym Rejestrze Sądowym |
nazwa, formaPrawna | Oficjalna nazwa i forma prawna (np. SPÓŁKA AKCYJNA, SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ) |
kapital | Kapitał zakładowy (dla spółek kapitałowych) |
organ, sposobReprezentacji | Organ uprawniony do reprezentacji i zasada reprezentacji (kto i jak podpisuje w imieniu spółki) |
sklad | Lista osób w organie reprezentacji (skład zarządu) |
pkdMain, pkdOther | Kody PKD — przeważający i pozostałe — każdy jako { code, opis } |
dataRejestracji | Data pierwszego wpisu do KRS |
opp | Znacznik organizacji pożytku publicznego (true/false) |
Jeśli podmiot nie figuruje w KRS (np. jednoosobowa działalność zarejestrowana wyłącznie w CEIDG), pole krs jest null, a pole krsError może wyjaśnić powód. W takim przypadku sięgnij po dane z rejestru REGON przez /regon/{nip}.
W Pythonie
Z biblioteką requests całość to kilka linii:
import requests
def dane_krs(nip: str) -> dict | None:
r = requests.get(f"https://skanfirmy.pl/nip/{nip}?format=json", timeout=10)
r.raise_for_status()
return r.json().get("krs")
k = dane_krs("5260250995")
if k:
print(k["formaPrawna"], "·", k["kapital"])
for osoba in k["sklad"]:
print(" -", osoba)
# SPÓŁKA AKCYJNA · 3937072437,00 PLN
NIP z błędną sumą kontrolną zwraca 400, a podmiot spoza KRS ma krs: null — warto obsłużyć oba przypadki, zamiast zakładać, że każdy NIP ma wpis w rejestrze sądowym.
W JavaScripcie
const r = await fetch("https://skanfirmy.pl/nip/5260250995?format=json");
const { krs } = await r.json();
if (krs) {
console.log(krs.formaPrawna, krs.kapital);
console.log(krs.pkdMain[0].code, krs.pkdMain[0].opis);
}
W PHP
$ch = curl_init("https://skanfirmy.pl/nip/5260250995?format=json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$krs = json_decode(curl_exec($ch), true)["krs"];
if ($krs) {
echo $krs["formaPrawna"] . " · " . $krs["kapital"];
}
Więcej niż KRS — jednym NIP-em
Ten sam endpoint /nip/{nip}?format=json, oprócz pola krs, zwraca też status VAT z Wykazu podatników VAT (Biała Lista, Ministerstwo Finansów) i numer REGON — wszystko w jednej odpowiedzi. Pozostałe endpointy (wszystkie GET → JSON, bez klucza):
/nip/{nip}— status VAT + Biała Lista + KRS + REGON/regon/{nip}— dane z rejestru REGON (GUS)/nips/{lista}— wiele NIP-ów naraz (rozdzielonych przecinkami)/vies/{kraj}/{numer}— walidacja unijnego numeru VAT (VIES, Komisja Europejska)
Dla agentów AI pod adresem https://skanfirmy.pl/mcp stoi serwer Model Context Protocol (MCP) z narzędziem sprawdz_nip, które zwraca to samo pole krs (oraz kilkoma innymi do REGON, VIES i list NIP) — również bez klucza. Mapa endpointów dla modeli jest w llms.txt. Weryfikację po NIP w interfejsie zrobisz w narzędziu Dane z KRS.
Publiczny endpoint a typowe płatne API KRS
Większość komercyjnych nakładek REST na KRS działa w modelu freemium — konto, klucz API i dzienny limit zapytań w darmowym progu — a do tego wyszukuje po numerze KRS. Ten endpoint jest publiczny, bezpłatny i przyjmuje NIP. Różnice w skrócie:
| Typowe płatne API KRS | skanfirmy.pl /nip (pole krs) | |
|---|---|---|
| Klucz API | wymagany | niepotrzebny |
| Rejestracja / konto | tak | nie |
| Limit w darmowym progu | zwykle jest | brak twardego limitu (prosimy o rozsądek) |
| Format odpowiedzi | REST/JSON | REST/JSON |
| Serwer MCP dla agentów AI | zwykle brak | tak |
| Wyszukiwanie | po numerze KRS | po NIP |
| Model | freemium / abonament | bezpłatnie |
To nie jest oficjalne API KRS — dane pochodzą z tego samego źródła (Krajowy Rejestr Sądowy, Ministerstwo Sprawiedliwości), tylko udostępnione jednym zapytaniem GET po numerze NIP.
Skąd pochodzą dane i czym to nie jest
Dane pochodzą wprost z Krajowego Rejestru Sądowego prowadzonego przez Ministerstwo Sprawiedliwości. To niezależne narzędzie — nie jest oficjalnym API KRS ani z nim powiązane; jedynie udostępnia jego dane w wygodniejszej formie. Kody i opisy PKD to prawna klasyfikacja działalności w Polsce i zwracane są w oryginale (nie są tłumaczone). Zakres i aktualność danych są takie, jak w KRS.
Najczęstsze pytania
Czy potrzebny jest numer KRS, żeby pobrać dane?
Nie. Wyszukiwanie idzie po numerze NIP — wyślij GET na /nip/{NIP}?format=json, a numer KRS znajdziesz w odpowiedzi (pole krs.numerKRS). Nie musisz go znać wcześniej. To różnica względem oficjalnego API KRS, które wyszukuje po numerze KRS.
Czy potrzebny jest klucz API albo rejestracja?
Nie. Endpoint /nip/{nip} jest publiczny — zwraca JSON po dodaniu ?format=json, bez klucza API i bez zakładania konta. Dane z KRS są w polu krs.
Jakie dane z KRS zwraca to API?
Pole krs zawiera numer KRS, nazwę, formę prawną, kapitał zakładowy, organ i sposób reprezentacji, skład zarządu (sklad), kody PKD przeważający i pozostałe (pkdMain, pkdOther), datę rejestracji oraz znacznik organizacji pożytku publicznego (opp).
Co, jeśli firma nie figuruje w KRS?
Wtedy pole krs jest null, a pole krsError może wyjaśnić powód — na przykład dla jednoosobowej działalności zarejestrowanej wyłącznie w CEIDG. W takim przypadku użyj endpointu /regon/{nip}, który korzysta z rejestru REGON.
Czy korzystanie jest płatne?
Nie. Endpoint jest bezpłatny i bez rejestracji. Dane pochodzą wprost z Krajowego Rejestru Sądowego prowadzonego przez Ministerstwo Sprawiedliwości.