Dla programistów · REST i MCP

API KRS po NIP
REST/JSON bez klucza

Wybrane dane z aktualnego odpisu 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, organ i sposób reprezentacji, funkcje członków zarządu (bez imion i nazwisk) 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 wybrane dane z aktualnego odpisu KRS — numer KRS, nazwę, formę prawną, kapitał zakładowy, organ i sposób reprezentacji, funkcje członków zarządu (bez imion i nazwisk) 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. Limit chroni serwis przed nadużyciami: najwyżej 20 zapytań na 10 sekund z jednego adresu IP (po przekroczeniu kod 429 przez 10 sekund; od 25.09.2026). Nie mamy własnego limitu dziennego, ale /nip najpierw pyta Wykaz VAT, a limit dzienny ma API Ministerstwa Finansów — po jego wyczerpaniu /nip zwraca 503 z nagłówkiem Retry-After. Endpoint /krs/{numer-KRS} pyta tylko KRS, więc ten limit go nie dotyczy. Serwis jest bezpłatny i służy do pojedynczych zapytań inicjowanych przez użytkowników lub ich agentów, nie do masowego pobierania danych.

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}:

PoleZnaczenie
numerKRSNumer w Krajowym Rejestrze Sądowym
nazwa, formaPrawnaOficjalna nazwa i forma prawna (np. SPÓŁKA AKCYJNA, SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ)
kapitalKapitał zakładowy (dla spółek kapitałowych)
organ, sposobReprezentacjiOrgan uprawniony do reprezentacji i zasada reprezentacji (kto i jak podpisuje w imieniu spółki)
skladFunkcje członków organu reprezentacji (np. PREZES ZARZĄDU) — bez imion i nazwisk
pkdMain, pkdOtherKody PKD — przeważający i pozostałe — każdy jako { code, opis }
dataRejestracjiData pierwszego wpisu do KRS
oppZnacznik 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. W takim przypadku sięgnij po rejestr REGON przez /regon/{nip} — u osoby fizycznej zwraca on tylko nazwę, formę, miejscowość i status działalności; kodów PKD osób fizycznych nie zwracamy (pole ceidg odpowiedzi /nip ma od 27.09.2026 zawsze wartość null), pełny wpis jest w CEIDG. Pole krsError nie opisuje braku wpisu w KRS: ma wartość (numer KRS) tylko wtedy, gdy Wykaz VAT podaje numer KRS, ale odpisu nie udało się pobrać z API KRS (błąd, przekroczony czas albo brak odpisu). Od 26.09.2026 dane podmiotów spoza KRS — osób fizycznych — zwracamy w węższym zakresie (zamiast listy rachunków ich liczba, zamiast adresu miejscowość, a od 27.09.2026 bez numeru REGON i kodów PKD); szczegóły w API Wykazu VAT i API GUS (REGON).

Masz już numer KRS? Endpoint bezpośredni

Jeśli znasz numer KRS (10 cyfr, wiodące zera dozwolone), pobierzesz ten sam zestaw danych bez podawania NIP — endpointem GET /krs/{numer-KRS}. Zwraca wyłącznie JSON: obiekt {source, krs, checkedAt}, w którym pole krs ma te same pola co pole krs wyżej (forma prawna, kapitał, organ, sposób reprezentacji, kody PKD). Przydatne, gdy numer KRS masz już z innego źródła i nie chcesz nadkładać drogi przez NIP.

curl "https://skanfirmy.pl/krs/0000028860"

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 funkcja in k["sklad"]:
        print(" -", funkcja)
# 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 (poza osobami fizycznymi) — wszystko w jednej odpowiedzi. Pozostałe endpointy (wszystkie GET → JSON, bez klucza):

  • /nip/{nip} — status VAT + Biała Lista + KRS + REGON (poza osobami fizycznymi)
  • /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, a pełna specyfikacja maszynowa w OpenAPI 3.1. 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 KRSskanfirmy.pl /nip (pole krs)
Klucz APIwymaganyniepotrzebny
Rejestracja / kontotaknie
Limit w darmowym proguzwykle jest20 zapytań na 10 s z jednego IP; bez własnego limitu dziennego (dzienny limit API MF — po jego wyczerpaniu 503)
Format odpowiedziREST/JSONREST/JSON
Serwer MCP dla agentów AIzwykle braktak
Wyszukiwaniepo numerze KRSpo NIP
Modelfreemium / abonamentbezpł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 wybrane dane z aktualnego odpisu KRS: numer KRS, nazwę, formę prawną, kapitał zakładowy, organ i sposób reprezentacji, funkcje członków zarządu bez imion i nazwisk (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 — 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 (u osoby fizycznej: nazwa, forma, miejscowość i status działalności). Pole krsError ma wartość tylko wtedy, gdy Wykaz VAT podaje numer KRS, ale odpisu nie udało się pobrać z API KRS (błąd, przekroczony czas albo brak odpisu).

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.