Rejestry API → SUDOP API
SUDOP API
Zdarzenia pomocowe zarejestrowane przez UOKiK: kto udzielił, kiedy, w
jakiej formie i za ile (PLN oraz EUR według przelicznika organu). Parametr
limit (domyślnie 200, maksimum 1000) ogranicza listę
events.
{
"status": "found",
"data": {
"totalEvents": 296, "returnedEvents": 2, "truncated": true,
"summary": {
"firstAidOn": "2017-01-17", "lastAidOn": "2026-07-20",
"totalGrossPln": 3106694545.94, "totalGrossEur": 713913825.44,
"deMinimisEvents": 1
},
"deMinimis": {
"pools": [], "windowFrom": "2023-07-26", "windowTo": "2026-07-26",
"totalGrantedEur": 0,
"note": "Wyliczenie ORIENTACYJNE, nie zastępuje zaświadczeń o pomocy de minimis…"
},
"events": [
{
"grantedOn": "2026-07-20",
"grantorName": "Polskie Sieci Elektroenergetyczne S.A.",
"measureName": "Polski mechanizm rynku mocy",
"legalBasis": "ustawa z dnia 8 grudnia 2017 r. o rynku mocy",
"formName": "dotacja lub inne bezzwrotne świadczenie",
"value": { "nominalPln": 108098.97, "grossPln": 108098.97, "grossEur": 24931.15 },
"isDeMinimis": false, "deMinimisPool": null
}
]
}
}
De minimis — co liczymy, a czego nie obiecujemy
Sekcja data.deMinimis sumuje pomoc w ruchomym oknie trzech
lat, oddzielnie dla każdej puli (e1,
e1t, e1c, e2, e2c), bo
pule mają różne limity i różne podstawy prawne — od 100 tys. EUR dla
transportu drogowego towarów po 750 tys. EUR dla usług w ogólnym interesie
gospodarczym.
Nie sprzedajemy jednej liczby „zostało Ci X limitu”
i chcemy być w tym wprost. Powody: limit dotyczy
jednego przedsiębiorstwa w rozumieniu rozporządzenia, czyli
obejmuje podmioty powiązane — więc suma dla samego NIP-u
bywa zaniżona. Do tego pomoc sprzed 2024 r. podlega
innemu rozporządzeniu i innemu sposobowi liczenia okresu. Pole
headroomEur jest orientacyjne, oznaczone ostrzeżeniem
de_minimis_indicative i
nie zastępuje zaświadczeń o pomocy de minimis. Wiążącą
wykładnię daje organ udzielający pomocy.
Sumy zawsze pochodzą z kompletu zdarzeń, także gdy lista
events została przycięta parametrem limit —
wtedy truncated = true i ostrzeżenie
sudop_truncated. Przycięcie listy nigdy nie zafałszuje
podsumowania.
Przykład zapytania i odpowiedzi
Zdarzenia pomocy publicznej beneficjenta po NIP-ie. Parametr limit (domyślnie 200, maksimum 1000) ogranicza listę events. Klucz testowy zwraca jedno syntetyczne zdarzenie de minimis, żeby pokazać też kształt sekcji deMinimis.
curl -s "https://api.debtstrike.eu/v1/sudop/7740001454?limit=100" \
-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": {
"beneficiary": { "nip": "7740001454",
"name": "PODMIOT TESTOWY SPÓŁKA AKCYJNA (SANDBOX)" },
"totalEvents": 1, "returnedEvents": 1, "truncated": false,
"events": [
{ "grantedOn": "2025-06-30", "grantorName": "URZĄD TESTOWY (SANDBOX)",
"formCode": "A1.1", "formName": "dotacja lub inne bezzwrotne świadczenie",
"value": { "nominalPln": 40000, "grossPln": 40000, "grossEur": 9000 },
"isDeMinimis": true, "deMinimisPool": "e2" }
],
"summary": { "firstAidOn": "2025-06-30", "lastAidOn": "2025-06-30",
"totalGrossPln": 40000, "totalGrossEur": 9000,
"deMinimisEvents": 1 },
"deMinimis": { "windowFrom": "2023-01-01", "windowTo": "2026-01-01",
"pools": [ { "pool": "e2", "regulation": "rozporządzenie KE 2023/2831",
"limitEur": 300000, "grantedEur": 9000,
"headroomEur": 291000, "events": 1 } ],
"totalGrantedEur": 9000 }
},
"meta": { "billed": 0 }
}
Wartości w przykładzie są wymyślone. Pominięto część pól zdarzenia (m.in. measureName, legalBasis, beneficiarySize, sectorCode, communeName) oraz notę w deMinimis.note. Wyliczenie de minimis jest orientacyjne i nie zastępuje zaświadczenia.
Pola odpowiedzi w data
| Pole | Typ | Znaczenie |
|---|---|---|
beneficiary |
object | nip i name beneficjenta. |
totalEvents |
number | Ile zdarzeń rejestr ma łącznie dla tego NIP-u. |
returnedEvents |
number | Ile zdarzeń zwróciliśmy w tej odpowiedzi (ogranicza je limit). |
truncated |
boolean | true, gdy zwróciliśmy mniej, niż rejestr ma. Nie ucinamy listy po cichu. |
events[] |
array | Zdarzenia pomocowe. Każde ma m.in. grantedOn (data udzielenia), grantorNip, grantorName, legalBasis, formCode, formName, destinationCode, destinationName. |
events[].value |
object | nominalPln, grossPln i grossEur. Równowartość w euro liczy organ według swojego przelicznika. |
events[].isDeMinimis, deMinimisPool |
boolean, string albo null | Czy zdarzenie to pomoc de minimis i do której puli się zalicza. |
summary |
object | firstAidOn, lastAidOn, totalGrossPln, totalGrossEur, deMinimisEvents. |
deMinimis |
object | Wyliczenie orientacyjne w ruchomym oknie (windowFrom, windowTo): pools[] z polami pool, regulation, limitEur, grantedEur, headroomEur, events, a do tego totalGrantedEur i note. |
Odpowiedzi i błędy tego endpointu
| HTTP | Kod lub status |
Kiedy |
|---|---|---|
| 200 | found |
Zawsze przy poprawnym NIP-ie. SUDOP to rejestr zdarzeń, więc brak pomocy to pusta lista events i totalEvents: 0, a nie not_found. Przed policzeniem sum po stronie klienta sprawdź truncated. |
| 200 | unavailable |
SUDOP nie odpowiedział. To brak wiedzy, nie dowód braku pomocy. |
| 400 | invalid_identifier |
NIP bez 10 cyfr lub z błędną sumą kontrolną. |
| 403 | source_not_in_plan |
Klucz nie ma zakresu sudop. |
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 białej listy VAT: status podatnika i weryfikacja rachunku
- API REGON / GUS: tożsamość, adres i PKD
- CRBR API: beneficjenci rzeczywiści
- BZP API: postępowania publiczne
- 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.