Przegląd API
Publiczne API działa pod /v1 i uwierzytelnia się kluczem API Bearer z prefiksem rw_live_. Prefiks rw_test_ to sandbox: nie czyta ani nie zapisuje danych organizacji, nie jest liczony do limitów i zwraca deterministyczne dane testowe (oznaczone sandbox: true) tylko dla syntetycznych NIP-ów 1111111111, 2222222222 i 3333333333 (inne NIP-y zwracają 404, a webhooki wymagają klucza live; serwer MCP odrzuca klucze rw_test_ (403) — użyj klucza live lub OAuth). Każde żądanie zapisu wymaga nagłówka Idempotency-Key; zwykłe odpowiedzi można odtworzyć, ale replay operacji zwracającej jednorazowy sekret kończy się jawnym błędem 409.
Koperta odpowiedzi
Poprawne odpowiedzi opakowują ładunek w data i meta:
{
"data": { "added": ["<YOUR_VALID_NIP>"], "skipped": [], "reactivated": [], "failed": [], "plan_limit": 250 },
"meta": { "request_id": "req_h4x82k", "timestamp": "2026-07-10T08:14:02.114Z" }
}Błędy
Błędy używają stabilnego enuma error.code (VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, RATE_LIMITED, SOURCE_ERROR, SOURCE_UNAVAILABLE, INTERNAL_ERROR) i tam, gdzie ma to zastosowanie, zawierają retry_after w sekundach:
{
"error": {
"code": "RATE_LIMITED",
"message": "Usage limit exceeded for manual_refreshes",
"retry_after": 41230
},
"meta": { "request_id": "req_p03m1c", "timestamp": "2026-07-10T08:15:44.902Z" }
}Stronicowanie
Stronicowane feedy listy obserwowanych, zdarzeń i dostarczeń webhooków przyjmują limit (od 1 do 500) oraz nieprzezroczysty cursor. Gdy istnieją kolejne wiersze, odpowiedź zawiera meta.next_cursor; przekaż go z powrotem, aby pobrać następną stronę.
Jednorazowe sprawdzenia (/v1/checks/*) a lista obserwowanych
Oprócz cyklicznego monitoringu listy obserwowanych (/v1/watchlist) każde konto z kluczem produkcyjnym rw_live_ i zakresem read może wykonywać jednorazowe sprawdzenia bez dopisywania podmiotu do listy obserwowanych. Każde wywołanie wymaga nagłówka Idempotency-Key i zużywa 1 jednostkę api_requests (zwracaną przy błędach 4xx/5xx); klucze sandbox (rw_test_) zwracają 403.
POST /v1/checks/vat— Jednorazowe sprawdzenie statusu VAT do 30 numerów NIP na Białej liście MF (wykazpodatnikowvat.mf.gov.pl/api) na wskazany dzień; zwraca status_vat, liczbę rachunków i request_id MF.POST /v1/checks/bank-account— Weryfikacja rachunku bankowego przed przelewem metodą check MF (czy 26-cyfrowy NRB lub PL+NRB jest przypisany do NIP w wybranym dniu). Zwraca assigned (true/false), request_id MF oraz zamaskowany numer rachunku (widoczne tylko 4 ostatnie cyfry).POST /v1/checks/vies— Weryfikacja numeru VAT UE w systemie Komisji Europejskiej VIES (country_code + vat_number, opcjonalnie dane pytającego dla uzyskania numeru konsultacji request_identifier). Niedostępność państwa członkowskiego kończy się statusem 503 SOURCE_UNAVAILABLE, nigdy fałszywym valid: false.POST /v1/checks/sanctions— Weryfikacja na lokalnie synchronizowanych oficjalnych listach sankcyjnych: polskiej liście MSWiA (PL_MSWIA), skonsolidowanej liście UE (EU_FSF) oraz amerykańskiej liście OFAC (US_OFAC_SDN). Dopasowanie jest wyłącznie dokładne (exact match po NIP albo znormalizowanej nazwie/aliasie, bez rozmytego scoringu). Gdy którakolwiek lista ma synchronizację starszą niż 48h, brak trafienia zwraca result: "inconclusive" (stale: true), nigdy "no_match". Narzędzie pomocnicze — nie zastępuje pełnego programu AML/KYC, weryfikacji PEP ani porady prawnej.
curl -X POST https://api.riskwatch.pl/v1/checks/vat \
-H "Authorization: Bearer rw_live_yourkey" \
-H "Idempotency-Key: check-vat-001" \
-H "Content-Type: application/json" \
-d '{"nips":["<YOUR_VALID_NIP>"],"date":"2026-11-06"}'curl -X POST https://api.riskwatch.pl/v1/checks/bank-account \
-H "Authorization: Bearer rw_live_yourkey" \
-H "Idempotency-Key: check-nrb-001" \
-H "Content-Type: application/json" \
-d '{"nip":"<YOUR_VALID_NIP>","account":"<YOUR_26_DIGIT_NRB>","date":"2026-11-06"}'curl -X POST https://api.riskwatch.pl/v1/checks/vies \
-H "Authorization: Bearer rw_live_yourkey" \
-H "Idempotency-Key: check-vies-001" \
-H "Content-Type: application/json" \
-d '{"country_code":"DE","vat_number":"143454214"}'curl -X POST https://api.riskwatch.pl/v1/checks/sanctions \
-H "Authorization: Bearer rw_live_yourkey" \
-H "Idempotency-Key: check-sanctions-001" \
-H "Content-Type: application/json" \
-d '{"nip":"<YOUR_VALID_NIP>","name":"Synthetic Sp. z o.o."}'