{"openapi":"3.1.0","info":{"title":"Publiczne Umowy — otwarte API Rejestru Umów JSFP","version":"2.0.0","summary":"Umowy polskich instytucji publicznych: kto, z kim, na co i za ile.","description":"Otwarte API umów jednostek sektora finansów publicznych (JSFP) w Polsce. Dane pochodzą z Centralnego Rejestru Umów (rejestrumow.gov.pl, Ministerstwo Finansów) i są odświeżane co godzinę. Bez uwierzytelniania i klucza, CORS otwarty (`access-control-allow-origin: *`), kwoty w PLN, treści po polsku.\n\nDla asystentów AI: skrótowy opis serwisu i danych jest pod https://publiczneumowy.org/llms.txt. Cytując konkretną umowę, linkuj do `https://publiczneumowy.org/umowa/{id}`.","contact":{"name":"Publiczne Umowy","url":"https://publiczneumowy.org/api"},"license":{"name":"CC0-1.0 (dane publiczne)","identifier":"CC0-1.0"}},"externalDocs":{"description":"Opis API po polsku + przykłady","url":"https://publiczneumowy.org/api"},"servers":[{"url":"https://publiczneumowy.org"}],"tags":[{"name":"umowy","description":"Wyszukiwanie i odczyt umów"},{"name":"sygnaly","description":"Automatycznie wykryte wzorce do weryfikacji (nie zarzuty)"},{"name":"meta","description":"Statystyki i stan serwisu"}],"paths":{"/api/agreements":{"get":{"tags":["umowy"],"summary":"Lista umów z filtrami","description":"Zwraca tablicę umów. Filtry łączą się jako AND. Wyniki stronicowane: `limit` domyślnie 100, maksymalnie 1000; nagłówek `X-Total-Count` podaje pełną liczbę wyników przed stronicowaniem. Pełny zrzut wszystkich umów (bez filtrów) jest dostępny jako jeden duży plik pod `/data.json`.","operationId":"listAgreements","parameters":[{"name":"woj","in":"query","schema":{"type":"string"},"description":"Województwo — nazwa lub slug bez polskich znaków","example":"zachodniopomorskie"},{"name":"zam","in":"query","schema":{"type":"string"},"description":"Fragment nazwy zamawiającego (urzędu)","example":"starostwo"},{"name":"wyk","in":"query","schema":{"type":"string"},"description":"Fragment nazwy wykonawcy (dowolnej strony nie-JSFP)","example":"orange"},{"name":"nip","in":"query","schema":{"type":"string"},"description":"Dokładny NIP dowolnej strony umowy","example":"5832705185"},{"name":"regon","in":"query","schema":{"type":"string"},"description":"Dokładny REGON dowolnej strony umowy"},{"name":"q","in":"query","schema":{"type":"string"},"description":"Pełnotekstowo: zamawiający, wykonawca, przedmiot, lokalizacja","example":"szpital"},{"name":"min","in":"query","schema":{"type":"number"},"description":"Minimalna wartość umowy (zł)","example":1000000},{"name":"max","in":"query","schema":{"type":"number"},"description":"Maksymalna wartość umowy (zł)"},{"name":"od","in":"query","schema":{"type":"string","format":"date"},"description":"Data zawarcia od (RRRR-MM-DD)","example":"2026-07-01"},{"name":"do","in":"query","schema":{"type":"string","format":"date"},"description":"Data zawarcia do (RRRR-MM-DD)"},{"name":"sort","in":"query","schema":{"type":"string","enum":["wartosc","data"]},"description":"`wartosc` = od najdroższej, `data` = od najnowszej daty zawarcia; domyślnie: ostatnio opublikowane"},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"maximum":1000},"description":"Liczba wyników na stronę (≤1000)"},{"name":"offset","in":"query","schema":{"type":"integer","default":0},"description":"Przesunięcie stronicowania"}],"responses":{"200":{"description":"Tablica umów. Nagłówek `X-Total-Count` = liczba wyników przed stronicowaniem.","headers":{"X-Total-Count":{"description":"Pełna liczba pasujących umów","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Umowa"}}}}}}}},"/api/agreement/{id}":{"get":{"tags":["umowy"],"summary":"Jedna umowa po id","operationId":"getAgreement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"UUID umowy (pole `id` z listy)"}],"responses":{"200":{"description":"Rekord umowy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Umowa"}}}},"404":{"description":"Nie znaleziono"}}}},"/api/stats":{"get":{"tags":["meta"],"summary":"Statystyki zbioru","operationId":"getStats","responses":{"200":{"description":"Liczność i wartość zbioru","content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"string","format":"date-time"},"count":{"type":"integer"},"totalValue":{"type":"number"}}}}}}}}},"/api/health":{"get":{"tags":["meta"],"summary":"Status serwisu i ostatniego odświeżenia","operationId":"getHealth","responses":{"200":{"description":"ok + informacje o ostatnim cronie (dodane umowy, kolejka, IndexNow)"}}}},"/api/flags":{"get":{"tags":["sygnaly"],"summary":"Sygnały — automatycznie wykryte wzorce do weryfikacji","operationId":"listFlags","description":"Wzorce statystyczne w danych rejestru, które MOGĄ wskazywać na nieprawidłowości i wymagają weryfikacji: `salami` (możliwe dzielenie zamówień tuż pod progiem 130 tys. zł netto PZP), `koncentracja` (≥50% wartości umów urzędu u jednego wykonawcy), `adres` (różni wykonawcy pod wspólnym adresem u tego samego urzędu). Sygnał NIE jest zarzutem — pole `ids` linkuje umowy-dowody do samodzielnej oceny. Pełna metodologia: https://publiczneumowy.org/api","parameters":[{"name":"typ","in":"query","schema":{"type":"string","enum":["salami","koncentracja","adres"]},"description":"Filtr typu sygnału"},{"name":"limit","in":"query","schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"Ranking sygnałów wg wagi","content":{"application/json":{"schema":{"type":"object","properties":{"disclaimer":{"type":"string"},"count":{"type":"integer"},"flags":{"type":"array","items":{"$ref":"#/components/schemas/Sygnal"}}}}}}}}}},"/data.json":{"get":{"tags":["umowy"],"summary":"Pełny zrzut wszystkich umów (duży plik)","operationId":"dumpAgreements","description":"Jedna tablica JSON ze wszystkimi umowami — do analiz offline. Uwaga: plik rośnie z rejestrem (dziesiątki MB). Do zapytań punktowych używaj `/api/agreements`.","responses":{"200":{"description":"Tablica wszystkich umów","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Umowa"}}}}}}}}},"components":{"schemas":{"Sygnal":{"type":"object","description":"Wzorzec statystyczny do weryfikacji — NIE zarzut","properties":{"id":{"type":"string"},"typ":{"type":"string","enum":["salami","koncentracja","adres"]},"waga":{"type":"number","description":"Punktacja do rankingu (wyżej = mocniejszy sygnał)"},"regon_zam":{"type":"string"},"zam":{"type":"string","description":"Zamawiający"},"nip_wyk":{"type":"string"},"nip2":{"type":["string","null"],"description":"Drugi NIP (tylko typ adres)"},"wyk":{"type":"string","description":"Wykonawca (dla typu adres: obie firmy)"},"n":{"type":"integer","description":"Liczba umów w sygnale"},"suma":{"type":"number","description":"Łączna wartość umów w sygnale (PLN)"},"opis":{"type":"string"},"ids":{"type":"array","items":{"type":"string"},"description":"Id umów-dowodów (→ /umowa/{id})"},"computed_at":{"type":"string","format":"date-time"}}},"Umowa":{"type":"object","description":"Płaski rekord umowy z Centralnego Rejestru Umów JSFP","properties":{"id":{"type":"string","format":"uuid","description":"Identyfikator umowy (klucz do /api/agreement/{id} i strony /umowa/{id})"},"zam":{"type":"string","description":"Zamawiający — jednostka sektora finansów publicznych"},"wyk":{"type":"string","description":"Pierwszy wykonawca (pełna lista w `strony`)"},"woj":{"type":"string","description":"Województwo zamawiającego (WIELKIMI LITERAMI)"},"powiat":{"type":"string"},"gmina":{"type":"string"},"wartosc":{"type":"number","description":"Wartość przedmiotu umowy w PLN"},"przedmiot":{"type":"string","description":"Przedmiot umowy"},"opis":{"type":["string","null"],"description":"Opis wartości przedmiotu (np. przeliczenie waluty)"},"data":{"type":"string","description":"Data zawarcia, format DD.MM.RRRR"},"dataKon":{"type":["string","null"],"description":"Data zakończenia (DD.MM.RRRR) lub null"},"dataPub":{"type":"string","description":"Data publikacji w rejestrze (DD.MM.RRRR)"},"numer":{"type":["string","null"],"description":"Numer umowy lub null"},"brakNr":{"type":"boolean","description":"true = umowa zgłoszona bez numeru"},"status":{"type":"string","description":"Status w rejestrze, np. Aktywna"},"nieozn":{"type":"boolean","description":"true = czas nieoznaczony"},"okres":{"type":["string","null"],"description":"Okres obowiązywania, np. „3 miesiące\""},"fin":{"type":"boolean","description":"true = finansowanie zewnętrzne/UE"},"zmiany":{"type":"integer","description":"Liczba aneksów/zmian"},"strony":{"type":"array","description":"Wszystkie strony umowy (urząd + wykonawcy)","items":{"type":"object","properties":{"rodzaj":{"type":"string","description":"JSFP (zamawiający) | Przedsiębiorca | Osoba fizyczna | …"},"nazwa":{"type":"string"},"nip":{"type":["string","null"]},"regon":{"type":["string","null"]},"kraj":{"type":["string","null"]},"adr":{"type":"string","description":"Adres jednolinijkowy"},"kons":{"type":["boolean","null"],"description":"true = konsorcjum"}}}}}}}}}