Dokumentacja REST interfejsu API VIES
Wstęp
Udostępniane przez nas API wykorzystuje standardowy protokół HTTP. Wszystkie funkcje API korzystają z metody HTTP GET. Każde wywołanie funkcji wymaga autoryzacji zapytania. Dane do autoryzacji zapytania przesyłane są w nagłówku HTTP.
Usługa produkcji
Wymagana jest rejestracja podmiotu, który chce korzystać z funkcjonalności systemu viesapi.eu. Aby to zrobić, przejdź do Rejestracja stronę i wypełnij odpowiedni formularz. Warunkiem korzystania z systemu viesapi.eu jest akceptacja Warunki usługi. Poprawne wypełnienie formularza i kliknięcie Zarejestrować przycisk założy konto w systemie viesapi.eu i jego automatyczną aktywację.
Przy pierwszym logowaniu generowany jest automatycznie identyfikator wraz z odpowiednim kluczem. Identyfikator jest publiczny i nie wymaga ochrony, natomiast klucz jest prywatny i nie powinien być udostępniany osobom trzecim.
Adres serwisu produkcyjnego: https://viesapi.eu/api
Usługa testowa
Pełną funkcjonalność wszystkich bibliotek współdzielonych można sprawdzić za pomocą udostępnionej Przetestuj API VIES. Korzystając z testowego API można sprawdzić wszystkie funkcje oferowane w płatnych planach bez konieczności zakładania konta.
Adres serwisu testowego: https://viesapi.eu/api-test
Definicja interfejsu API
Szczegółowa definicja API jest dostępna w formacie zgodnym z OpenAPI i można ją pobrać jako plik YAML tutaj.
API jest również dostępne jako interfejs klienta Swagger UI.
Wykonanie zapytania
Przykład wykonania zapytania do serwisu testowego:
GET /api-test/get/vies/euvat/PL7171642051 HTTP/1.1
Host: viesapi.eu:443
Authorization: MAC id="api_key_id", ts="unix_timestamp", nonce="random_str", mac="b64_calculated_mac_value"
User-Agent: VIESAPIClient/client_version platform_name/platform_version
Accept: mime_type
Gdzie:
api_key_id– identyfikator klucza API (na środowisku produkcyjnym wartość identyfikatora wygenerowanego podczas rejestracji, na środowisku testowym wartość test_id),unix_timestamp– aktualny czas w postaci liczby sekund od tzw Epoka Uniksa,random_str– losowy ciąg, inny dla każdego zapytania (min. 8 znaków, max. 16 znaków),b64_calculated_mac_value– obliczony HMAC (za pomocąAPI key, wartośćtest_keyna środowisku testowym),client_version– wersja kliencka (w naszych bibliotekach jest to wersja naszej biblioteki API np. 1.2.3),platform_name– nazwa platformy klienckiej API (w naszych bibliotekach jest to nazwa języka biblioteki np. JAVA, PHP, .NET, Python),platform_version– wersja platformy klienta API (w naszych bibliotekach jest to wersja środowiska bibliotecznego np. 17 dla JAVA, lub 7.4 dla PHP),mime_type– nazwa typu MIME, w jakim powinna zostać zwrócona odpowiedź, obsługiwane są dwa typy:text/xmlorazapplication/json, jeśli żądanie nie zawiera nagłówka Accept, domyślnie zwracany jest kod XML.
Żądanie uwierzytelnienia
Dane autoryzacyjne muszą być przygotowane zgodnie z Uwierzytelnianie HTTP: Uwierzytelnianie dostępu MAC i jest to zalecana metoda uwierzytelniania. Istnieje również możliwość skorzystania z ww Uwierzytelnianie HTTP: Uwierzytelnianie podstawowe metody, jednakże ze względów bezpieczeństwa prosimy o jej stosowanie tylko wtedy, gdy z jakiegoś powodu użycie pierwszej metody nie jest możliwe.
Każde zapytanie do naszego serwisu musi zostać uwierzytelnione przy użyciu jednej z dwóch dostępnych metod.
Metoda 1 – HMAC (zalecana)
Specyfikacja zastosowanej metody autoryzacji: Uwierzytelnianie HTTP: Uwierzytelnianie dostępu MAC. Autoryzacja polega na wyliczeniu HMAC SHA256 z odpowiednio przygotowanego ciągu znaków i przesłaniu wyniku w nagłówku HTTP.
Przykład
Ciąg wejściowy do funkcji HMAC to:
ts + '\n' + nonce + '\n' + method + '\n' + path + '\n' + host + '\n' + port + '\n\n'
Gdzie:
ts– aktualny czas w postaci liczby sekund od tzw Epoka Uniksanależy zawsze podawać aktualny czas wykonania zapytania (tolerancja serwera +/- 10 min w stosunku do aktualnego czasu),nonce– losowy ciąg, inny dla każdego zapytania (min. 8 znaków, max. 16 znaków),method– nazwa metody HTTP (zawsze GET),path– ścieżka URL zapytania do wykonania,host– Nazwa serwera VIES API (zawszeviesapi.eu),port– numer portu serwera VIES API (zawsze 443),’\n’– znak nowej linii (kod ASCII 10, 0x0A).
Dla zapytania o NIP PL7171642051 wysłanego do usługi testowej w dniu 2019-11-25 00:00:00 UTC ciąg wejściowy do funkcji HMAC będzie wyglądał następująco:
str = "1574640000\ndt831hs59s\nGET\n/api-test/get/vies/euvat/PL7171642051\nviesapi.eu\n443\n\n"
Plik wejściowy z ciągiem znaków dla tego przykładu można pobrać tutaj.
Z przygotowanego ciągu obliczamy HMAC SHA256, jako hasło HMAC, które podajemy API key, czyli w przypadku testowego API, wartość test_key:
HMAC_SHA256(str, "test_key") = 7776a12b958233ce60dd0f16b8d141e80472a1ee3b1e1fb136d7abe34cb59306
Funkcja HMAC SHA256 zwraca 32 bajty binarne (pokazane powyżej jako a hex ciąg dla czytelności). Pobierz plik z wartością binarną tutaj.
Wartość binarną wyliczonego HMAC należy zakodować algorytmem Base64, otrzymujemy:
d3ahK5WCM85g3Q8WuNFB6ARyoe47Hh+xNter40y1kwY=
Wartość tę należy przesłać jako wartość MAC w nagłówku z danymi do autoryzacji. Wreszcie:
Authorization: MAC id="test_id", ts="1574640000", nonce="dt831hs59s", mac="d3ahK5WCM85g3Q8WuNFB6ARyoe47Hh+xNter40y1kwY="
Na komputerze z systemem Linux wymaganą wartość MAC można obliczyć w jednym kroku za pomocą tego polecenia:
$ echo -e -n "1574640000\ndt831hs59s\nGET\n/api-test/get/vies/euvat/PL7171642051\nviesapi.eu\n443\n\n" | openssl dgst -sha256 -hmac "test_key" -binary | openssl enc -base64
Metoda 2 — Uwierzytelnianie podstawowe
Specyfikacja zastosowanej metody autoryzacji: Uwierzytelnianie HTTP: Uwierzytelnianie podstawowe.
Przykład 1
Ciąg wejściowy do funkcji Base64 to:
str = key_id + ':' + key
Gdzie:
key_id– Identyfikator klucza API (w przypadku środowiska testowego,test_idstrunowy),key– Klucz API (w przypadku środowiska testowego stringtest_key).
Dla środowiska testowego ciąg wejściowy dla funkcji Base64 będzie wyglądał następująco:
str = "test_id:test_key"
Po zastosowaniu funkcji Base64 otrzymujemy:
Base64(str) = dGVzdF9pZDp0ZXN0X2tleQ==
Wartość tę należy przesłać jako wartość Basic w nagłówku z danymi do autoryzacji. Ostatecznie:
Authorization: Basic dGVzdF9pZDp0ZXN0X2tleQ==
Przykład 2
Poniższy przykład pokazuje zapytanie, które można wywołać w Środowisko testowe z przeglądarki internetowej. Wystarczy skopiować i wkleić do paska adresu przeglądarki:
https://test_id:test_key@viesapi.eu/api-test/get/vies/euvat/PL7171642051
Gdzie:
test_id– do uwierzytelnienia w produkcji środowisko, parametr powinien zawierać poprawny identyfikator klucza używanego do autoryzacji,test_key– do uwierzytelnienia w produkcji środowisku, parametr powinien zawierać poprawną wartość klucza używanego do autoryzacji.
Identyfikator klucza oraz klucz są generowane przez użytkownika po zalogowaniu się na jego konto w serwisie viesapi.eu portal (API keys patka). See dokumentacja aby uzyskać więcej informacji na temat generowania identyfikatorów i kluczy.
getVIESData odpowiedź
Jeśli żądanie zostanie obsłużone poprawnie, generowana jest następująca odpowiedź:

Szczegółowy opis zwracanych atrybutów:
uid– unikalny identyfikator zapytania generowany przez viesapi.eu,countryCode– kod kraju, w którym zarejestrowana jest firma powiązana z podanym w zapytaniu numerem VAT UE,vatNumber– podany w zapytaniu numer VAT UE weryfikowanej firmy,valid– odpowiedź z serwisu VIES, informująca o aktualnym statusie VAT UE sprawdzanego podmiotu:true– podany w zapytaniu numer VAT UE jest aktualny,false– podany w zapytaniu numer VAT UE jest nieprawidłowy,
traderName– nazwa handlowa firmy,traderCompanyType– zawsze zwracał ciąg znaków '-',traderAddress– adres siedziby firmy, pod którym jest zarejestrowana firma (format oryginalny),traderAddressComponent– szczegóły adresów grupowania komponentów – opcjonalny atrybut, nigdy nie zostanie zwrócony w tej funkcji.id– unikalny identyfikator zapytania generowany przez system VIES (Numer Konsultacyjny),date– data wykonania zapytaniasource– źródło danych, zawsze: http://ec.europa.eu
pobierzVIESDataParsed odpowiedź
Jeśli żądanie zostanie obsłużone poprawnie, generowana jest następująca odpowiedź:

Szczegółowy opis zwracanych atrybutów:
uid– unikalny identyfikator zapytania generowany przez viesapi.eu,countryCode– kod kraju, w którym zarejestrowana jest firma powiązana z podanym w zapytaniu numerem VAT UE,vatNumber– podany w zapytaniu numer VAT UE weryfikowanej firmy,valid– odpowiedź z serwisu VIES, informująca o aktualnym statusie VAT UE sprawdzanego podmiotu:true– podany w zapytaniu numer VAT UE jest aktualny,false– podany w zapytaniu numer VAT UE jest nieprawidłowy,
traderName– nazwa rejestracyjna firmy (format oryginalny),traderNameComponents– forma prawna spółki grupującej komponenty:name– nazwa firmy od traderName (bez formy prawnej),legalForm– nazwa formy prawnej wyodrębniona z traderName (bez nazwy firmy),legalFormCanonicalId– słownikowy identyfikator formy prawnej,legalFromCanonicalName– słownikowa nazwa formy prawnej,
traderCompanyType– zawsze zwracał ciąg znaków '-',traderAddress– adres siedziby firmy, pod którym jest zarejestrowana firma (format oryginalny),traderAddressComponent– szczegóły adresu grupowania komponentów:country– nazwa kraju przedsiębiorcy w jego języku ojczystym,postalCode– kod pocztowy adresu przedsiębiorcy,city– miasto adresu przedsiębiorcy,street- ulica, pod którą znajduje się adres przedsiębiorcy,streetNumber– numer ulicy, pod którą mieści się siedziba przedsiębiorcy,houseNumber– numer domu, pod którym mieści się siedziba przedsiębiorcy,
id– unikalny identyfikator zapytania generowany przez system VIES (Numer Konsultacyjny),date– data wykonania zapytania,source– źródło danych, zawsze: http://ec.europa.eu
| legalFormCanonicalId | legalFormCanonicalName | nazwa wyliczenia biblioteki |
| 0 | Nieznany | NIEZNANY |
| 1 | Jednoosobowa działalność gospodarcza | JEDNOSTKOWA WŁASNOŚĆ FIRMOWA |
| 2 | Spółka z ograniczoną odpowiedzialnością | SPÓŁKA_Z_OGRANICZONĄ_ODPOWIEDZIALNOŚCIĄ |
| 3 | Spółka jawna | GENERALNE_PARTNERSTWO |
| 4 | Spółka akcyjna | SPÓŁKA_AKCYJNA |
| 5 | Spółka komandytowa | SPÓŁKA_KOMPLETOWANA |
| 6 | Spółka z ograniczoną odpowiedzialnością | SPÓŁKA_O_OGRANICZONEJ_ODPOWIEDZIALNOŚCI_PRYWATNEJ |
| 7 | Jednoosobowa spółka akcyjna | SPÓŁKA_AKCYJNA_JEDNOSTKOWA |
| 8 | Prosta spółka z ograniczoną odpowiedzialnością | SPÓŁKA_Z_OGRANICZONĄ_ODPOWIEDZIALNOŚCIĄ_PROSTA |
| 9 | Jednoosobowa spółka z ograniczoną odpowiedzialnością | SPÓŁKA_O_OGRANICZONEJ_ODPOWIEDZIALNOŚCI_JEDNOOSOBOWEJ |
| 10 | Spółka akcyjna uproszczona | UPROSZCZONA_SPÓŁKA_AKCYJNA |
| 11 | Mała firma | MAŁA_FIRMA |
| 12 | Spółka komandytowo-akcyjna | SPÓŁKA_AKCYJNA_KOMPLETNA |
| 13 | Partnerstwo profesjonalne | PARTNERSTWO_ZAWODOWE |
| 14 | Spółka partnerska z ograniczoną odpowiedzialnością | SPÓŁKA_OGRANICZONA_ODPOWIEDZIALNOŚCI |
| 15 | Partnerstwo prywatne | PARTNERSTWO_PRYWATNE |
| 16 | Spółka z ograniczoną odpowiedzialnością Spółka komandytowa | SPÓŁKA_Z_OGRANICZONĄ_ODPOWIEDZIALNOŚCIĄ_SPÓŁKA_KOMPLETNA |
| 17 | Spółka z ograniczoną odpowiedzialnością Spółka komandytowo-akcyjna | SPÓŁKA_Z_OGRANICZONĄ_ODPOWIEDZIALNOŚCIĄ_SPÓŁKA_AKCYJNA_KOMPLETNA |
| 18 | Instytucja publiczna | INSTYTUCJA_PUBLICZNA |
Ważne zastrzeżenie!
Funkcja analizy składniowej korzysta z zewnętrznych algorytmów sztucznej inteligencji i interfejsów API w celu automatycznego wyodrębniania atrybutów, takich jak: miasto, kod pocztowy, ulica z numerem domu (numer budynku) i numer domu, dlatego nie możemy zagwarantować prawidłowego działania funkcji 100%.
pobierzVIESDataAsync odpowiedź
Jeśli żądanie zostanie obsłużone poprawnie, generowana jest następująca odpowiedź:

Szczegółowy opis zwracanych atrybutów:
token– token wsadowy (guid) wygenerowany przez viesapi.eu, powinien zostać użyty do wywołania funkcji getVIESDataAsync (po 2-3 minutach) w celu uzyskania wyników.
pobierzVIESDataAsyncResult odpowiedź
Jeżeli żądanie zostanie obsłużone poprawnie, powinna zostać wygenerowana następująca odpowiedź zawierająca listę obiektów z danymi zwróconymi przez VIES:

Szczegółowy opis zwracanych atrybutów:
numbers– tablica obiektów z wynikami zwróconymi przez VIES, odpowiadającymi numerom VAT UE przesłanym w żądaniu wywołania funkcji getVIESDataAsyncuid– unikalny identyfikator zapytania generowany przez viesapi.eu,countryCode– kod kraju, w którym zarejestrowana jest firma powiązana z podanym w zapytaniu numerem VAT UE,vatNumber– podany w zapytaniu numer VAT UE weryfikowanej firmy,valid– odpowiedź z serwisu VIES, informująca o aktualnym statusie VAT UE sprawdzanego podmiotu:true– podany w zapytaniu numer VAT UE jest aktualny,false– podany w zapytaniu numer VAT UE jest nieprawidłowy,
traderName– nazwa handlowa firmy,traderCompanyType– zawsze zwracał ciąg znaków '-',traderAddress– adres siedziby firmy, pod którym jest zarejestrowana firma (format oryginalny),id– unikalny identyfikator zapytania generowany przez system VIES (Numer Konsultacyjny),date– data wykonania zapytaniasource– źródło danych, zawsze: http://ec.europa.eu
errors– tablica obiektów z błędami zwróconymi przez VIES dla danych numeru VAT UE przesłanych w żądaniu wywołania funkcji getVIESDataAsyncuid– unikalny identyfikator zapytania generowany przez viesapi.eu,countryCode– kod kraju, w którym zarejestrowana jest firma powiązana z podanym w zapytaniu numerem VAT UE,vatNumber– podany w zapytaniu numer VAT UE weryfikowanej firmy,error– szczegóły błędu zwróconego dla tego konkretnego numeru VAT UEdate– data wykonania zapytaniasource– źródło danych, zawsze: http://ec.europa.eu
Odpowiedź na błąd
W przypadku jakiegokolwiek błędu związanego z obsługą żądania, zwracany jest następujący komunikat o błędzie:

Szczegółowy opis zwracanych atrybutów:
code– unikalny kod błędu do automatycznej obsługi błędów,description– opis błędu możliwego do przechwycenia przez człowieka,details- Mrudy szczegółowy opis błędu (opcjonalnie),
Kody błędów
Poniższa tabela zawiera listę wszystkich możliwych błędów zwracanych przez interfejsy API REST i biblioteki programistyczne:
| Kod błędu | Komunikat o błędzie |
| 8 | Nieprawidłowy format żądania |
| 10 | Nieprawidłowa ścieżka API |
| 11 | Wewnętrzny błąd usługi |
| 22 | Numer VAT UE jest nieprawidłowy |
| 23 | Nie udało się pobrać danych z systemu VIES |
| 26 | Ta funkcja nie jest dostępna w aktualnie wybranym planie |
| 27 | Ta funkcja nie obsługuje tego trybu wyszukiwania |
| 33 | Zapytanie o podane dane nie jest możliwe w trybie testowym |
| 35 | Nie jest wymagana autoryzacja zapytania dostępu |
| 36 | Usługa jest tymczasowo niedostępna ze względu na zaplanowane prace techniczne |
| 43 | Nie udało się pobrać liczby zapytań użytkowników w bieżącym miesiącu |
| 54 | Nieprawidłowa data lub godzina na komputerze lub systemie użytkownika |
| 55 | Nieprawidłowa wartość ciągu MAC w nagłówku z danymi uwierzytelniającymi zapytania |
| 57 | Nieprawidłowa wartość klucza w nagłówku z danymi uwierzytelniającymi zapytania |
| 58 | Osiągnięto maksymalną liczbę jednoczesnych zapytań dla tego państwa członkowskiego |
| 59 | Aplikacja w państwie członkowskim nie odpowiada lub jest niedostępna |
| 62 | Partia jest nadal przetwarzana, spróbuj ponownie później |
| 63 | Osiągnięto maksymalną liczbę żądań zbiorczych. Prześlij ponownie żądanie później |
| 101 | Numer IP połączenia nie zgadza się z numerem IP przypisanym do klucza API |
| 102 | Klucz API jest zablokowany |
| 103 | Nieprawidłowy klucz API |
| 104 | Osiągnięto maksymalną liczbę zapytań dostępną dla wybranego planu |
| 105 | Konto zablokowane lub usunięte |
| 106 | Nieprawidłowy typ konta |
| 107 | Konto przedpłacone nie zostało opłacone |
| 108 | Nieprawidłowy identyfikator klucza API |
| 201 | Nie udało się połączyć z usługą API VIES |
| 202 | Odpowiedź usługi API VIES ma nieprawidłowy format |
| 203 | Nieprawidłowy typ numeru |
| 204 | NIP jest nieprawidłowy |
| 205 | Numer identyfikacyjny VAT UE jest nieprawidłowy |
| 206 | Funkcja wygenerowała wyjątek |
| 207 | Data ma nieprawidłowy format |
| 208 | Nieprawidłowy parametr wejściowy |
| 209 | Przekroczono limit rozmiaru partii [3-99] |