API VIES (unijny VAT)
walidacja VAT-UE bez klucza
Sprawdzenie unijnego numeru VAT w systemie VIES (Komisja Europejska) — jednym zapytaniem GET, w odpowiedzi czysty JSON. Dostajesz status ważności, nazwę i adres podatnika (o ile państwo je udostępnia) oraz znacznik czasu sprawdzenia. Bez klucza API, bez rejestracji i bez dziennego limitu. To wygodna warstwa nad usługą VIES (SOAP), która zdejmuje z Ciebie koperty XML.
Jeden GET, jeden JSON
Endpoint jest publiczny, metoda GET, a parametr ?format=json zwraca dane maszynowo (bez niego dostajesz stronę HTML dla człowieka). Ścieżka to /vies/{kraj}/{numer} — kraj to dwuliterowy kod państwa UE (np. PL, DE), numer to numer VAT bez prefiksu kraju:
curl "https://skanfirmy.pl/vies/PL/5260250995?format=json"
W odpowiedzi dostajesz status ważności numeru, nazwę i adres podatnika w formie zwracanej przez VIES oraz znacznik czasu zapytania (dowód sprawdzenia):
{
"countryCode": "PL",
"vatNumber": "5260250995",
"valid": true,
"name": "ORANGE POLSKA SPÓŁKA AKCYJNA",
"address": "ALEJE JEROZOLIMSKIE 160\n02-326 WARSZAWA",
"requestDate": "2026-08-25T12:57:10.319Z",
"checkedAt": "2026-08-25"
}
Pole valid to jedyna miarodajna odpowiedź na pytanie „czy ten unijny numer VAT jest ważny”. Pola name i address VIES zwraca tylko wtedy, gdy dane państwo członkowskie je ujawnia — część krajów ich nie udostępnia i wówczas potrafią być puste.
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 VIES: chcemy, żeby walidację VAT-UE 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).
Zamiast VIES SOAP
Oficjalna usługa to VIES Komisji Europejskiej — SOAP z operacją checkVat, kopertami XML i odpowiedzią, którą trzeba samodzielnie sparsować. Działa, ale integracja potrafi zająć popołudnie. Nasz endpoint robi to wszystko po stronie serwera i zwraca gotowy JSON — Ty wysyłasz jeden GET.
Co zwraca /vies/{kraj}/{numer}:
| Pole | Znaczenie |
|---|---|
valid | Wartość logiczna — jedyna miarodajna odpowiedź, czy numer VAT-UE jest ważny w VIES w chwili sprawdzenia |
name | Nazwa podatnika w formie zwracanej przez VIES (może być pusta, jeśli państwo jej nie ujawnia) |
address | Adres podatnika w formie zwracanej przez VIES (może być pusty lub zastrzeżony w niektórych państwach) |
countryCode | Dwuliterowy kod państwa UE z zapytania |
vatNumber | Numer VAT bez prefiksu kraju |
requestDate | Znacznik czasu z VIES — dowód, kiedy sprawdzenie zostało wykonane |
checkedAt | Data sprawdzenia |
Dla numeru z innego państwa działa tak samo — np. niemiecki numer sprawdzisz przez GET /vies/DE/811128135?format=json. Prefiks kraju (DE, PL) idzie w ścieżce jako {kraj}, a sam numer bez prefiksu jako {numer}.
W Pythonie
Z biblioteką requests całość to kilka linii — warto od razu sprawdzić valid:
import requests
def waliduj_vat_ue(kraj: str, numer: str) -> dict:
r = requests.get(f"https://skanfirmy.pl/vies/{kraj}/{numer}?format=json", timeout=10)
r.raise_for_status()
data = r.json()
if not data["valid"]:
raise ValueError(f"Numer VAT-UE {kraj}{numer} jest nieaktywny w VIES")
return data
d = waliduj_vat_ue("PL", "5260250995")
print(d["name"])
# ORANGE POLSKA SPÓŁKA AKCYJNA
Numer z niepoprawnym formatem lub kraj spoza UE zwraca 400. Warto obsłużyć zarówno taki błąd, jak i przypadek valid: false, zamiast zakładać, że każdy numer jest ważny.
W JavaScripcie
const r = await fetch("https://skanfirmy.pl/vies/PL/5260250995?format=json");
if (r.ok) {
const d = await r.json();
console.log(d.valid, d.name);
}
W PHP
$ch = curl_init("https://skanfirmy.pl/vies/PL/5260250995?format=json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$d = json_decode(curl_exec($ch), true);
echo $d["valid"] ? $d["name"] : "numer nieaktywny";
Krajowy VAT i dane rejestrowe — jednym NIP-em
VIES odpowiada na pytanie o unijny numer VAT. Jeśli sprawdzasz polską firmę i potrzebujesz krajowego statusu VAT (Wykaz VAT / Biała Lista), wpisu w KRS i numeru REGON, użyj /nip/{nip}?format=json — łączy te źródła w jednej odpowiedzi. Pozostałe endpointy (wszystkie GET → JSON, bez klucza):
/vies/{kraj}/{numer}— walidacja unijnego numeru VAT (VIES, Komisja Europejska)/nip/{nip}— status VAT + Biała Lista + KRS + REGON/nips/{lista}— wiele NIP-ów naraz (rozdzielonych przecinkami)/regon/{nip}— dane z rejestru REGON (GUS)
Dla agentów AI pod adresem https://skanfirmy.pl/mcp stoi serwer Model Context Protocol (MCP) z narzędziem do walidacji unijnego VAT (i kilkoma innymi do NIP, KRS i REGON) — również bez klucza. Mapa endpointów dla modeli jest w llms.txt. Walidację numeru VAT-UE w interfejsie zrobisz w narzędziu VIES (unijny VAT).
Publiczny endpoint a typowe płatne API VIES
Większość komercyjnych nakładek REST na VIES działa w modelu freemium — konto, klucz API i dzienny limit zapytań w bezpłatnym progu. Ten endpoint jest publiczny i bezpłatny, a poza samym valid zwraca też nazwę, adres i datę sprawdzenia. Różnice w skrócie:
| Typowe płatne API VIES | skanfirmy.pl /vies | |
|---|---|---|
| Klucz API | wymagany | niepotrzebny |
| Rejestracja / konto | tak | nie |
| Limit w bezpłatnym 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 |
| Zwraca | zwykle samo valid | valid + nazwa + adres + data sprawdzenia |
| Model | freemium / abonament | bezpłatnie |
To nie jest oficjalne API VIES — dane pochodzą z tego samego źródła (system VIES Komisji Europejskiej), tylko udostępnione jednym zapytaniem GET.
Skąd pochodzą dane i czym to nie jest
Dane pochodzą wprost z systemu VIES prowadzonego przez Komisję Europejską. To niezależne narzędzie — nie jest oficjalnym API VIES ani z nim powiązane; jedynie udostępnia jego dane w wygodniejszej formie. Nazwę i adres VIES zwraca tylko wtedy, gdy dane państwo członkowskie je ujawnia, a wartość valid odzwierciedla stan w chwili z pola requestDate — status może się później zmienić.
Najczęstsze pytania
Czy potrzebny jest klucz API albo rejestracja?
Nie. Endpoint /vies/{kraj}/{numer} jest publiczny — zwraca JSON po dodaniu ?format=json, bez klucza API, bez zakładania konta i bez dziennego limitu zapytań.
Jak sprawdzić unijny numer VAT (VAT-UE) w formacie JSON?
Wyślij GET na https://skanfirmy.pl/vies/{KRAJ}/{NUMER}?format=json, gdzie KRAJ to dwuliterowy kod państwa UE (np. DE, PL), a NUMER to numer VAT bez prefiksu kraju. W odpowiedzi dostaniesz pole valid oraz — jeśli państwo je udostępnia — nazwę i adres podatnika.
Czym to się różni od usługi VIES (SOAP)?
Oficjalna usługa VIES to SOAP z operacją checkVat, kopertami XML i odpowiedzią, którą trzeba samodzielnie sparsować. Nasz endpoint wykonuje to zapytanie po stronie serwera i zwraca gotowy JSON, więc po Twojej stronie zostaje jedno zapytanie GET.
Dlaczego nazwa i adres bywają puste?
Nazwę i adres VIES zwraca wyłącznie wtedy, gdy dane państwo członkowskie je ujawnia — część krajów tego nie robi i wówczas pola name oraz address są puste. To ograniczenie po stronie VIES, nie naszej warstwy; miarodajną odpowiedzią o ważności numeru pozostaje pole valid.
Czy korzystanie jest płatne?
Nie. Endpoint jest bezpłatny i bez rejestracji. Dane pochodzą wprost z systemu VIES prowadzonego przez Komisję Europejską, a wartość valid odzwierciedla stan z chwili z pola requestDate.