Baza wiedzy o serwisach administracji publicznej

Publikacja umów przez API CRU – pola, strony umowy i walidacje

Autor: FabianOstatnia aktualizacja: ~4 min czytania

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 &lt; czy &amp;), 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.