Dla programistów · REST i MCP

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

PoleZnaczenie
validWartość logiczna — jedyna miarodajna odpowiedź, czy numer VAT-UE jest ważny w VIES w chwili sprawdzenia
nameNazwa podatnika w formie zwracanej przez VIES (może być pusta, jeśli państwo jej nie ujawnia)
addressAdres podatnika w formie zwracanej przez VIES (może być pusty lub zastrzeżony w niektórych państwach)
countryCodeDwuliterowy kod państwa UE z zapytania
vatNumberNumer VAT bez prefiksu kraju
requestDateZnacznik czasu z VIES — dowód, kiedy sprawdzenie zostało wykonane
checkedAtData 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 VIESskanfirmy.pl /vies
Klucz APIwymaganyniepotrzebny
Rejestracja / kontotaknie
Limit w bezpłatnym proguzwykle jestbrak twardego limitu (prosimy o rozsądek)
Format odpowiedziREST/JSONREST/JSON
Serwer MCP dla agentów AIzwykle braktak
Zwracazwykle samo validvalid + nazwa + adres + data sprawdzenia
Modelfreemium / abonamentbezpł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.