Wprowadzenie
Udostępnione przez nas API wykorzystuje standardowy protokół HTTP. Wszystkie funkcje API wykorzystują metodę HTTP GET. Każde wywołanie funkcji wymaga autoryzacji zapytania. Dane do autoryzacji zapytania są przesyłane w nagłówku HTTP.
Serwis produkcyjny
Wymagana jest rejestracja podmiotu, który chce skorzystać z funkcjonalności systemu nip24.pl. W tym celu należy wejść na stronę Rejestracja i wypełnić odpowiedni formularz. Warunkiem koniecznym do korzystania z systemu nip24.pl jest akceptacja regulaminu. Poprawne wypełnienie formularza i kliknięcie przycisku Zarejestruj powoduje utworzenie konta w systemie nip24.pl oraz automatyczną jego aktywację.
Podczas pierwszego logowania generowany jest automatycznie identyfikator wraz z odpowiadającym mu kluczem. Identyfikator ma charakter publiczny i nie wymaga ochrony, natomiast klucz ma charakter prywatny i nie powinien być udostępniany osobom trzecim.
Adres serwisu produkcyjnego: https://www.nip24.pl/api
Serwis testowy
Pełną funkcjonalność wszystkich udostępnionych bibliotek można sprawdzić korzystając z udostępnionego Testowego API. Dzięki API testowemu możliwe jest sprawdzenie wszystkich funkcji oferowanych w planach płatnych bez konieczności zakładania konta.
Adres serwisu produkcyjnego: https://www.nip24.pl/api-test
Definicja interfejsu API
Szczegółowa definicja interfejsu API jest dostępna w formacie zgodnym z OpenAPI i można ją pobrać w formie pliku YAML tutaj.
API dostępne jest również w formie interfejsu klienta Swagger UI.
Wykonanie zapytania
Przykład wykonania zapytania do serwisu testowego:
GET /api-test/get/invoice/nip/7171642051 HTTP/1.1Host: www.nip24.pl:443Authorization: MAC id="api_key_id", ts="unix_timestamp", nonce="random_str", mac="b64_calculated_mac_value"User-Agent: NIP24Client/client_version platform_name/platform_versionAccept: 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– bieżący czas w formie liczby sekund od tzw. unix epoch,random_str– losowy ciąg, różny dla każdego zapytania (min. 8 znaków, max. 16 znaków),b64_calculated_mac_value– obliczony HMAC (z użyciem klucza API, na środowisku testowym wartość test_key),client_version– wersja klienta API (w naszych bibliotekach to wersja naszej biblioteki API, np. 1.3.0),platform_name– nazwa platformy klienta API (w naszych bibliotekach to nazwa języka biblioteki, np. Java, PHP, .NET, Python),platform_version– wersja platformy klienta API (w naszych bibliotekach to wersja środowiska biblioteki, np. 1.8.0 dla Java, lub 5.6.4 dla PHP),mime_type– nazwa typuMIME, w jakim ma być zwrócona odpowiedź, obsługiwane są dwa typy:application/xmliapplication/json, jeżeli żądanie nie zawiera nagłówka, domyślnie jest zwracany XML.
Autoryzacja zapytania
Dane autoryzacyjne muszą być przygotowane zgodnie z HTTP Authentication: MAC Access Authentication i jest to zalecana metoda uwierzytelniania. Możliwe jest również użycie metody HTTP Authentication: Basic Authentication, jednak ze względów bezpieczeństwa prosimy o korzystanie z niej 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 – Uwierzytelnienie z wykorzystaniem MAC Authentication
Specyfikacja użytej metody autoryzacji: HTTP Authentication: MAC Access Authentication. Przygotowanie nagłówka autoryzacyjnego dla zapytania wysłanego do naszego serwisu tą metodą polega na obliczeniu HMAC SHA256 z odpowiednio przygotowanego ciągu i przesłania wyniku w nagłówku HTTP.
Przykład
Ciąg wejściowy do funkcji HMAC ma postać:
ts + '\n' + nonce + '\n' + method + '\n' + path + '\n' + host + '\n' + port + '\n\n'
Gdzie:
ts– bieżący czas w formie liczby sekund od tzw. unix epoch, należy podawać zawsze bieżący czas wykonywania zapytania (tolerancja serwera +/- 10 min w stosunku do czasu bieżącego),nonce– losowy ciąg, różny 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 NIP24 (zawsze www.nip24.pl),port– numer portu serwera NIP24 (zawsze 443),'\n'– znak nowej linii (kod ASCII 10 0x0A).
Dla zapytania o dane do faktury dla NIP 7171642051 wysłanego do serwisu testowego dn. 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/invoice/nip/7171642051\nwww.nip24.pl\n443\n\n"
Plik z ciągiem wejściowym dla tego przykładu do pobrania tutaj.
Z przygotowanego ciągu obliczamy HMAC SHA256, jako hasło HMAC podajemy klucz API, czyli w przypadku API testowego wartość test_key:
HMAC_SHA256(str, "test_key") = 0a35fa77fc29c30feb48c4b831929f2f85ed833f56b4617832a09facaca1bd55
Funkcja HMAC SHA256 zwraca 32 bajty binarne (powyżej dla czytelności przedstawione jako ciąg heksadecymalny). Plik z wartością binarną do pobrania tutaj.
Wartość binarną obliczonego HMAC należy zakodować algorytmem Base64, otrzymujemy:
CjX6d/wpww/rSMS4MZKfL4Xtgz9WtGF4MqCfrKyhvVU=
Tą wartość należy przesłać jako wartość MAC w nagłówku z danymi do autoryzacji. Ostatecznie:
Authorization: MAC id="test_id", ts="1574640000", nonce="dt831hs59s", mac="CjX6d/wpww/rSMS4MZKfL4Xtgz9WtGF4MqCfrKyhvVU="
Metoda 2 – Uwierzytelnienie z wykorzystaniem Basic Authentication
Specyfikacja stosowanej metody autoryzacji: HTTP Authentication: Basic Authentication. Przygotowanie nagłówka autoryzacyjnego dla zapytania wysłanego do naszego serwisu tą metodą polega na zakodowaniu odpowiednio przygotowanego ciągu funkcją Base64 i przesłania wyniku w nagłówku HTTP.
Przykład
Ciąg wejściowy do funkcji Base64 ma postać:
str = key_id + ':' + key
Gdzie:
key_id– identyfikator klucza API (w przypadku środowiska testowego, ciągtest_id),key– klucz API (w przypadku środowiska testowego, ciągtest_key).
Dla środowiska testowego ciągiem wejściowym dla funkcji Base64 będzie ciąg:
str = "test_id:test_key"
Po zastosowaniu funkcji Base64 otrzymujemy:
Base64(str) = dGVzdF9pZDp0ZXN0X2tleQ==
Tą wartość należy przesłać jako wartość Basic w nagłówku z danymi do autoryzacji. Ostatecznie:
Authorization: Basic dGVzdF9pZDp0ZXN0X2tleQ==
Przykład
Poniższy przykład przedstawia zapytanie, które można wywołać w środowisku testowym z poziomu przeglądarki internetowej. Po prostu skopiuj i wklej go w pasku adresu w przeglądarce:
https://test_id:test_key@www.nip24.pl/api-test/get/vies/euvat/PL7171642051
Gdzie:
test_id– identyfikator klucza do zastosowania tylko w środowisku testowym. Aby uwierzytelnić się w środowisku produkcyjnym, parametr powinien zawierać poprawny identyfikator klucza używanego do autoryzacji,test_key– klucz do zastosowania tylko w środowisku testowym. Aby uwierzytelnić się w środowisku produkcyjnym, 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 portalu nip24.pl (zakładka Klucze API).
Zobacz stronę dokumentacji, aby uzyskać więcej informacji na temat generowania identyfikatorów i kluczy.
Błędna odpowiedź (error response)
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– szczegółowy opis błędu (opcjonalnie),
Kody błędów
| Kod błędu | Komunikat błędu | Opis |
| 7 | The VAT number is invalid | Podano nieprawidłowy NIP (nie zgadza się suma kontrolna algorytmu) |
| 8 | Invalid request format | Błędny format przesłanego żądania |
| 10 | Invalid API path | W konfiguracji biblioteki został wpisany błędny adres URL ścieżki do API. Poprawna ścieżka do API produkcyjnego: https://nip24.pl/api/ |
| 11 | Internal service error | Błąd wewnętrzny serwisu |
| 20 | NIP, REGON or KRS number was not provided | Wymagany parametr nie został przesłany w żądaniu |
| 22 | EU VAT number is invalid | Podany w parametrze wejściowym numer EU VAT ma niepoprawny format. Zobacz tabelę poprawnych numerów EU VAT |
| 23 | Failed to get data from VIES system | Błąd pobierania danych z systemu VIES |
| 26 | This feature is not available on the currently selected plan | Funkcja nie jest dostępna w aktualnie wybranym planie. Użyj bezpłatnej funkcji getAccountStatus w celu pobrania informacji o aktualnym stanie konta |
| 27 | This function does not support this search mode | Funkcja nie jest dostępna w trybie wyszukiwania |
| 30 | Searching by NIP number is not available in the currently selected plan | Wyszukiwanie po numerze NIP nie jest dostępne w aktualnie wybranym planie |
| 33 | Querying the given data is not possible in the test mode | Obsłużenie żądania nie jest możliwe w trybie testowym |
| 35 | No access query authorization required | Brak dostępu. Wysłanie żądania wymaga poprawnej autoryzacji. Wybierz jedną z dwóch możliwych metod uwierzytelnienia. |
| 36 | The service is temporarily unavailable due to scheduled technical work | Usługa niedostępna ze względu na prace serwisowe |
| 43 | The number of user queries for the current month could not be retrieved | Błąd podczas pobierania informacji o liczbie aktualnie wykorzystanych żądań |
| 54 | Incorrect date or time on the user\s computer or system | Błędna data lub czas na systemie z którego wysyłane zostało żądanie. Poproszę ustawić poprawna datę i czas |
| 55 | Invalid MAC string value in header with query credentials | Wartość MAC przesłana w nagłówku nie zgadza się danymi uwierzytelniającymi |
| 57 | Invalid key value in header with query credentials | Błędny klucz API w nagłówku żądania |
| 58 | The maximum number of concurrent queries for this Member State has been reached | System VIES zwrócił informację o tym, że system podatkowy Państwa Członkowskiego którego dotyczyło żądanie osiągnął w danej chwili limit wydajności. Spróbuj ponownie za chwilę |
| 59 | The application at the Member State is not replying or not available | System VIES lub system konkretnego Państwa Członkowskiego nie odpowiada |
| 101 | The connection IP number does not match the IP number assigned to the API key | Adres IP z którego zostało wysłane żądanie nie jest zgodny z adresem IP w konfiguracji konta |
| 102 | API key is blocked | Użyty do uwierzytelnienia klucz API jest zablokowany |
| 103 | Invalid API key | Błędny klucz API |
| 104 | The maximum number of queries available for the selected plan has been reached | Maksymalna liczba wykonanych zapytań w danym planie została wykorzystana. Zaloguj się na swoje konto aby dokupić więcej zapytań |
| 105 | Account blocked or deleted | Konto zostało zablokowane lub usunięte. Skontaktuj się z biurem obsługi klienta. |
| 106 | Invalid account type | Błąd najczęściej zwracany w przypadku niepoprawnie wpisanego identyfikatora. Sprawdź poprawność w wysłanego w żądaniu identyfikatora |
| 107 | The pre-paid account has not been paid | Konto użytkownika nie zostało opłacone. Zaloguj się na swoje konto aby opłacić usługi |
| 108 | Invalid API key ID | Nie został odnaleziony klucz korespondujący z przesłanym identyfikatorem. Sprawdź poprawność przesłanego w żądaniu identyfikatora |
| 201 | Failed to connect to the VIES API service | Błąd połączenia z systemem VIES |
| 202 | VIES API service response has invalid format | System VIES zwrócił niepoprawną odpowiedź |
| 203 | Invalid number type | Błęndy typ numeryczny |
| 204 | NIP is invalid | Błędny numer NIP |
| 205 | EU VAT ID is invalid | Błędny numer EU VAT |
| 206 | Function generated an exception | Funkcja wygenerowała wyjątek. Skontaktuj się ze wsparciem w celu uzyskania pomocy: kontakt@nip24.pl |
| 207 | Date has an invalid format | Format daty jest błędny. Zastosuj format: YYYY-MM-DD HH:MM:SS |
| 208 | Invalid input parameter | Błędny parametr wejściowy |