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_key na ś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/xml oraz application/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 (zawsze viesapi.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_id strunowy),
  • key – Klucz API (w przypadku środowiska testowego string test_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ź:

vies api - getVIESDataParsed

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),
  • traderAddressComponentszczegół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 zapytania
  • source – ź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ź:

vies api - getVIESDataParsed

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),
  • traderAddressComponentszczegół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 sprzedawcy
    • 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

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

Odpowiedź API VIES getVIESDataAsync

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:

vies api getVIESDataAsyncResults

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 getVIESDataAsync
    • 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),
    • id – unikalny identyfikator zapytania generowany przez system VIES (Numer Konsultacyjny),
    • date – data wykonania zapytania
    • source – ź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 getVIESDataAsync
    • 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,
    • errorszczegóły błędu zwróconego dla tego konkretnego numeru VAT UE
    • date – data wykonania zapytania
    • source – ź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:

odpowiedź na błąd interfejsu API rest vies

Szczegółowy opis zwracanych atrybutów:

  • code – unikalny kod błędu do automatycznej obsługi błędów,
  • descriptionopis 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 [2-99]