Rejestry API → API białej listy VAT
API białej listy VAT
Status podatnika
| Parametr | Gdzie | Opis |
|---|---|---|
nip |
ścieżka | NIP podatnika (10 cyfr, separatory dozwolone). |
date |
query | Dzień, na który sprawdzamy status. Domyślnie dziś. |
fresh, certificate |
query | Jak wyżej. |
data:
statusVat
(Czynny/Zwolniony/Niezarejestrowany),
name, regon, krs,
accountNumbers[], registrationLegalDate,
removalDate, restorationDate,
hasVirtualAccounts, adresy.
Weryfikacja rachunku bankowego
Odpowiada na pytanie „czy ten rachunek należał do tego podatnika tego
dnia” — czyli na pytanie, które decyduje o odpowiedzialności solidarnej i
o kosztach uzyskania przychodu.
account to NRB (26 cyfr) albo IBAN.
Skąd bierzemy potwierdzenie. Utrzymujemy własny indeks
dziennego pliku płaskiego MF (3,3 mln par NIP+rachunek, odświeżany
codziennie o 4:00). Gdy indeks obejmuje wskazany dzień, potwierdzenie
idzie z niego (data.provider = "flat_file") —
bez zużywania limitów MF. To dlatego weryfikacja
rachunków skaluje się u nas do dziesiątek tysięcy dziennie.
Semantyka, na której łatwo się przejechać.
Trafienie w pliku jest dowodem pozytywnym. Brak trafienia
nie jest dowodem negatywnym — rachunki wirtualne są w
pliku opisane maskami, których nie rozwijamy. Dlatego przy braku
trafienia zawsze dopytujemy API MF (data.provider = "wl_api"), żeby nigdy nie odpowiedzieć „rachunek nie należy do podatnika”, gdy
w rzeczywistości należy.
Limity MF, których nie musisz znać, bo trzymamy je po swojej stronie: 100 zapytań wyszukujących na dobę na adres IP (do 30 podmiotów w zapytaniu) i 5000 podmiotów metodą sprawdzającą. Przekroczenie blokuje adres IP do północy — razem z wyszukiwarką WWW.
Przykład zapytania i odpowiedzi
Status podatnika VAT na wskazany dzień. Parametr date (format RRRR-MM-DD) jest opcjonalny, domyślnie liczy się dziś.
curl -s "https://api.debtstrike.eu/v1/vat/7740001454?date=2026-10-22" \
-H "Authorization: Bearer ds_test_TWOJ_KLUCZ"
Zapytanie działa z kluczem testowym ds_test_. Taki klucz zwraca stałe, syntetyczne dane podmiotu testowego (NIP 7740001454, KRS 0000028860, REGON 610188201), nie dotyka rejestrów i nie zdejmuje ani jednej jednostki pakietu ("billed": 0). Każdy inny numer zwraca status: not_found, więc przećwiczysz też tę ścieżkę. Z kluczem ds_live_ zmienia się tylko klucz, a dane są prawdziwe.
{
"status": "found",
"data": {
"name": "PODMIOT TESTOWY SPÓŁKA AKCYJNA (SANDBOX)",
"nip": "7740001454",
"statusVat": "Czynny",
"regon": "610188201",
"krs": "0000028860",
"workingAddress": "CHEMIKÓW 7, 09-411 PŁOCK",
"residenceAddress": null,
"accountNumbers": ["12345678901234567890123456"],
"registrationLegalDate": "2001-07-19",
"registrationDenialDate": null,
"restorationDate": null,
"removalDate": null,
"hasVirtualAccounts": false
},
"meta": { "billed": 0 }
}
Fragment odpowiedzi: koperta (apiVersion, requestId, subject, source, timestamps) jest opisana na stronie przeglądowej. Weryfikację rachunku wywołasz tak samo, zmieniając ścieżkę na /v1/vat/{nip}/bank-account/{account}.
Pola odpowiedzi w data
| Pole | Typ | Znaczenie |
|---|---|---|
name |
string | Nazwa podatnika z Wykazu. |
nip, regon, krs |
string | Identyfikatory podatnika. regon i krs mogą być null, gdy Wykaz ich nie zawiera. |
statusVat |
string | Czynny, Zwolniony albo Niezarejestrowany. |
workingAddress, residenceAddress |
string albo null | Adres siedziby lub prowadzenia działalności oraz adres zamieszkania, o ile Wykaz je podaje. |
accountNumbers |
string[] | Rachunki bankowe podatnika (NRB, 26 cyfr), widniejące w Wykazie na wskazany dzień. |
registrationLegalDate |
string albo null | Data rejestracji jako podatnika VAT, format RRRR-MM-DD. |
registrationDenialDate |
string albo null | Data odmowy rejestracji. |
restorationDate |
string albo null | Data przywrócenia do rejestru VAT. |
removalDate |
string albo null | Data wykreślenia z rejestru VAT. |
hasVirtualAccounts |
boolean | Czy podatnik ma rachunki wirtualne. |
Pola odpowiedzi weryfikacji rachunku
curl -s "https://api.debtstrike.eu/v1/vat/7740001454/bank-account/12345678901234567890123456" \
-H "Authorization: Bearer ds_live_TWOJ_KLUCZ"
| Pole | Typ | Znaczenie |
|---|---|---|
accountAssigned |
boolean | true, gdy rachunek należał do podatnika w danym dniu. |
requestId |
string albo null | Identyfikator zapytania zwrócony przez źródło, jeśli odpowiedź szła z API Ministerstwa Finansów. |
provider |
string | flat_file (potwierdzenie z naszego indeksu pliku płaskiego, bez zużywania limitu MF) albo wl_api (odpowiedź z API Ministerstwa Finansów). |
statusVat |
string | Opcjonalnie: Czynny albo Zwolniony, wyprowadzony z pliku płaskiego przy trafieniu w indeksie. |
Odpowiedzi i błędy tego endpointu
| HTTP | Kod lub status |
Kiedy |
|---|---|---|
| 200 | found |
Podatnik znaleziony albo rachunek rozstrzygnięty. |
| 200 | not_found |
Wykaz nie zawiera podmiotu. To fakt, na którym wolno oprzeć decyzję. |
| 200 | unavailable |
Wykaz nie odpowiedział. To brak wiedzy, nie dowód braku podmiotu. |
| 400 | invalid_identifier |
NIP bez 10 cyfr lub z błędną sumą kontrolną albo rachunek, który nie jest poprawnym NRB lub IBAN (26 cyfr). |
| 403 | source_not_in_plan |
Klucz nie ma zakresu vat. |
| 422 | unsupported_parameter |
Parametr date w złym formacie albo z datą z przyszłości. |
Pozostałe kody (401, 429, 500) są wspólne dla wszystkich źródeł i opisane w
tabeli błędów. Błędy mają format application/problem+json (RFC 9457) z polami code i requestId.
Pozostałe rejestry w tym samym API
Wszystkie źródła mają tę samą kopertę, ten sam sposób uwierzytelniania i te same kody błędów:
- KRS API: odpis aktualny po NIP, KRS albo REGON
- API REGON / GUS: tożsamość, adres i PKD
- CRBR API: beneficjenci rzeczywiści
- BZP API: postępowania publiczne
- SUDOP API: pomoc publiczna i de minimis
- Agregat podmiotu: REGON, VAT i KRS jednym zapytaniem
Zanim wyślesz pierwsze zapytanie
Zasady wspólne dla wszystkich źródeł opisuje strona przeglądowa:
uwierzytelnianie kluczem,
koperta odpowiedzi,
różnica między not_found a unavailable, rozliczenie zapytań i
limity. Pełny kontrakt:
/v1/openapi.json.