Baza wiedzy o serwisach administracji publicznej
Publikacja umów przez API CRU – pola, strony umowy i walidacje
Endpoint POST /agreements przyjmuje listę umów (paczkę). Jeżeli element ma agreementId, system aktualizuje istniejącą umowę. Jeżeli go nie ma – tworzy nową. Każdy element musi mieć numerPorzadkowy, który służy do przypisania błędów w odpowiedzi.
Przykładowe żądanie
[
{
"numerPorzadkowy": 1,
"externalSystemId": "ZP/2026/045",
"komorkaWewnetrznaJsfp": "Wydział Inwestycji",
"finansowanaZeSrodkow": false,
"podstawoweDane": {
"statusUmowy": "Aktywna",
"numerUmowy": "45/2026",
"brakNumeruUmowy": false,
"dataZawarciaUmowy": "15.09.2026"
},
"okresObowiazywania": {
"umowaNaCzasNieoznaczony": false,
"okresLiczba": 3,
"okresJednostka": "miesiąc"
},
"szczegolyUmowy": {
"przedmiotUmowy": "Remont sali gimnastycznej",
"wartoscPrzedmiotu": "185000.00"
},
"stronyUmowy": [
{ "rodzaj": "SU03", "regon": "000000000" },
{ "kraj": "PL", "rodzaj": "SU01", "nip": "0000000000", "czyKonsorcjum": false }
]
}
]
Numery REGON i NIP w przykładzie są fikcyjne – podstaw dane swojej jednostki i wykonawcy.
Dane podstawowe
- statusUmowy jest wymagany i musi mieć jedną z dozwolonych wartości,
- dataZawarciaUmowy jest wymagana (format dd.mm.rrrr),
- gdy brakNumeruUmowy = true, nie przekazuje się numerUmowy, a gdy false – numer jest wymagany.
Okres obowiązywania
- czas nieoznaczony (umowaNaCzasNieoznaczony = true) – nie przekazuje się okresLiczba, okresJednostka, okresOd ani okresDo,
- czas oznaczony – wymagana jest para okresLiczba i okresJednostka albo para okresOd i okresDo.
Daty okresu: okresOd i okresDo nie mogą być wcześniejsze niż 01.01.2026, okresOd nie może wypadać później niż rok od wysłania żądania, okresDo nie może być późniejsze niż 31.12.2500 ani wcześniejsze niż okresOd.
Wartość umowy
Pole wartoscPrzedmiotu to tekst z dokładnie dwoma cyframi po kropce, od 0.00 do 1000000000000.00. Poprawne: 100.10, 1000.00, 0.05. Błędne: 100, 100.1, 100,10, 100.123.
Strony umowy – rodzaje
- SU01 – przedsiębiorca. Z Polski: dokładnie jeden identyfikator (nip albo regon), bez nazwy – dane pobiera się z REGON, adres opcjonalny, ale jeśli podany, to kompletny (miejscowosc, kodPocztowy, wojewodztwo, powiat, gminaMiastoDzielnica, numerNieruchomosci). Z zagranicy: nazwa i daneAdresowe wymagane, bez nip i regon,
- SU02 – osoba fizyczna. Tylko imie i nazwisko – bez nip, regon, nazwy i adresu,
- SU03 – jednostka sektora finansów publicznych. Tylko z Polski, jeden identyfikator, bez nazwy i bez adresu – adres pobiera się z REGON.
Od drugiej strony (stronyUmowy[1] i kolejne) wymagane są pola kraj i czyKonsorcjum.
Pierwsza strona umowy
stronyUmowy[0] to zawsze jednostka publikująca umowę. Przekazuje się wyłącznie rodzaj = SU03 i regon. Nie podaje się kraju, nazwy, NIP, adresu, informacji o konsorcjum ani wyłączenia jawności – system uzupełnia dane z bazy CRU.
Adres strony zagranicznej
Dla przedsiębiorcy spoza Polski w daneAdresowe można podać tylko: ulica, numerNieruchomosci, numerLokalu, kodPocztowy, miejscowosc. Wymagane są numerNieruchomosci, kodPocztowy i miejscowosc. Pól wojewodztwo, powiat i gminaMiastoDzielnica nie przekazuje się.
Kilka podmiotów pod jednym NIP w REGON
Jeżeli REGON zwróci więcej niż jeden podmiot dla numeru (na przykład firmę z CEIDG i gospodarstwo rolne), API zwróci błąd CONFLICT z listą dostępnych typów. Trzeba ponowić żądanie z polem typDzialalnosci: CEIDG, AGRICULTURAL albo OTHER.
Wyłączenie jawności
Obiekty niejawnoscStrony, niejawnoscPrzedmiotu i niejawnoscWartosciPrzedmiotu muszą być kompletne. Przy podstawie INNA komentarz jest wymagany, przy pozostałych podstawach nie przekazuje się go. Gdy strona ma niejawnoscStrony, można przekazać tylko kraj, rodzaj, czyKonsorcjum i niejawnoscStrony.
Zmiany umowy
Każdy element listy zmianyUmowy wymaga pól rodzajZmiany, dataZmiany i komentarz. Kody rodzajów zmian:
- TSU01 – korekta danych,
- TSU02 – aneks do umowy,
- TSU03 – zmiana w zakresie wyłączenia jawności danych,
- TSU04 – zmiana danych strony umowy,
- TSU05 – rozwiązanie umowy,
- TSU06 – wypowiedzenie umowy,
- TSU07 – odstąpienie od umowy,
- TSU10 – wygaśnięcie umowy,
- TSU11 – cesja umowy,
- inne – inna przyczyna.
Zakaz HTML w polach tekstowych
Pola tekstowe nie mogą zawierać znaczników HTML lub XML, encji (na przykład < czy &), pojedynczych znaków < i > ani treści, które mogą zostać zinterpretowane jako kod. Takie wartości zostaną odrzucone.
Jak czytać odpowiedź?
Dla poprawnie zbudowanego żądania API zwraca 200 OK, nawet gdy część umów ma błędy. Wynik każdej umowy sprawdzasz w polach successCount, errorCount, success i errors. Kody 4xx i 5xx oznaczają błędy techniczne całego żądania. Szczegóły: Błędy API CRU JSFP – co oznaczają?.
Wycofanie umów – POST /withdraw
{
"umowy": [
{ "agreementId": "identyfikator-umowy", "komentarz": "Błędna publikacja – umowa zostanie wprowadzona ponownie." }
]
}
Każda umowa jest przetwarzana niezależnie. Wycofać można tylko umowę opublikowaną, bez trwającego procesu zmiany. Po wycofaniu umowa ma status „Wycofana z publikacji”.
Stan na 11 października 2026 r. Artykuł ma charakter informacyjny i nie stanowi porady prawnej.
Źródło: opracowano na podstawie materiałów Ministerstwa Finansów o Centralnym Rejestrze Umów JSFP (gov.pl/web/finanse, w tym najczęściej zadawanych pytań, podręcznika użytkownika i dokumentacji API) udostępnianych na licencji CC BY-SA 4.0. Treść została opracowana od nowa własnymi słowami i uzupełniona; artykuł udostępniamy na tej samej licencji.
