# API - dane o składach opału, cenach i przepisach

- **Adres kanoniczny:** https://skladyopalow.pl/api/
- **Stan na:** 2 października 2026 (2026-10-02)
- **Wydawca:** Składy Opałów (https://skladyopalow.pl/)
- **Jak cytować:** Składy Opałów, "API - dane o składach opału, cenach i przepisach", https://skladyopalow.pl/api/, stan na 2 października 2026.

Adres bazowy: https://skladyopalow.pl/wp-json/so/v1. JSON, tylko GET, bez klucza. Specyfikacja OpenAPI 3.1: https://skladyopalow.pl/api/openapi.json.

## GET /locations - Wyszukiwanie lokalizacji

Zamienia nazwę miejscowości, gminy albo kod pocztowy na stronę gminy w katalogu. Zwraca do 8 podpowiedzi.

- `q` (string, wymagany): Nazwa miejscowości, gminy albo kod pocztowy (także fragment, bez polskich znaków też działa).
- Przykład - Gdzie w katalogu jest Mińsk Mazowiecki?: https://skladyopalow.pl/wp-json/so/v1/locations?q=Mińsk%20Mazowiecki
- Przykład - Do której gminy należy kod 05-300?: https://skladyopalow.pl/wp-json/so/v1/locations?q=05-300

## GET /locate - Gmina dla punktu

Zwraca gminę, w której leży punkt (granice z Państwowego Rejestru Granic, dokładność około 100 m), i adres jej strony.

- `lat` (number, wymagany): Szerokość geograficzna (WGS84), w Polsce 48,8-55,1.
- `lon` (number, wymagany): Długość geograficzna (WGS84), w Polsce 13,9-24,3.
- Przykład - W jakiej gminie jest punkt 52,18 N 21,56 E?: https://skladyopalow.pl/wp-json/so/v1/locate?lat=52.18&lon=21.56

## GET /stores - Składy opału

Składy w jednostce (teryt) albo najbliższe od punktu (kod pocztowy albo lat i lon), z odległością w linii prostej. Każdy wpis ma status danych - cytując, podawaj go.

- `lat` (number): Szerokość geograficzna punktu (WGS84). Razem z lon - składy posortowane od najbliższego.
- `lon` (number): Długość geograficzna punktu (WGS84).
- `postcode` (string): Kod pocztowy - punktem odniesienia jest środek zabudowy obszaru kodu. Zamiast lat i lon.
- `teryt` (string): TERYT gminy, powiatu albo województwa - składy przypisane do jednostki (bez odległości). Ma pierwszeństwo przed punktem.
- `radius` (integer): Promień wyszukiwania od punktu w km (linia prosta).
- `fuel` (string): Tylko składy z tym paliwem w ofercie. "wegiel" obejmuje też sortymenty (kostka, orzech, groszek, ekogroszek, miał). Wartości: wegiel, ekogroszek, wegiel-kostka, wegiel-orzech, wegiel-groszek, mial-weglowy, pellet, brykiet, drewno-kominkowe.
- `limit` (integer): Maksymalna liczba wyników.
- Przykład - Najbliższe składy z ekogroszkiem od kodu 05-300: https://skladyopalow.pl/wp-json/so/v1/stores?postcode=05-300&fuel=ekogroszek&limit=5
- Przykład - Składy w mieście Mińsk Mazowiecki (TERYT 1412011): https://skladyopalow.pl/wp-json/so/v1/stores?teryt=1412011
- Przykład - Składy z pelletem w promieniu 15 km od punktu: https://skladyopalow.pl/wp-json/so/v1/stores?lat=52.23&lon=21.01&radius=15&fuel=pellet

## GET /stores/{id} - Jeden skład

Pełny wpis składu z cennikiem: najnowsza cena każdego paliwa z ostatnich 12 miesięcy, z datą.

- `id` (integer, wymagany): Identyfikator składu (pole id z listy składów).

## GET /prices - Ceny GUS

Oficjalne średnie roczne ceny detaliczne GUS (Bank Danych Lokalnych): węgiel kamienny za tonę, prąd G11 i gaz W-1.1 za kWh - Polska i województwa, od 1999 roku.

- Przykład - Ile kosztowała tona węgla według GUS?: https://skladyopalow.pl/wp-json/so/v1/prices

## GET /prices/{fuel} - Bieżące ceny paliwa

Mediana zatwierdzonych cen ze składów z ostatnich 6 miesięcy (cenniki składów i zgłoszenia czytelników) - te same liczby co strona ceny paliwa. Dla paliw węglowych dodatkowo punkt odniesienia GUS, nigdy wliczony do mediany.

- `fuel` (string, wymagany): Paliwo (slug). Wartości: wegiel, ekogroszek, wegiel-kostka, wegiel-orzech, wegiel-groszek, mial-weglowy, pellet, brykiet, drewno-kominkowe.
- `voivodeship` (string): Województwo: slug (np. mazowieckie) albo 2-cyfrowy TERYT (np. 14). Bez parametru - cała Polska z podziałem na województwa i miesiące.
- `values` (boolean): Dołącz pole values: posortowane ceny (zł), z których liczona jest mediana kraju - bez nazw składów.
- Przykład - Ceny pelletu w województwie mazowieckim: https://skladyopalow.pl/wp-json/so/v1/prices/pellet?voivodeship=mazowieckie
- Przykład - Cena ekogroszku w Polsce i w województwach: https://skladyopalow.pl/wp-json/so/v1/prices/ekogroszek

## GET /regulations - Przepisy antysmogowe

Stan prawny uchwał antysmogowych województw: akt, publikacja, tekst urzędowy, terminy jako dane i najbliższy termin. Z parametrem teryt albo kod - tylko województwo tej jednostki.

- `teryt` (string): TERYT dowolnej jednostki (gmina, powiat, województwo) - zwraca stan prawny jej województwa.
- `postcode` (string): Kod pocztowy - zwraca stan prawny województwa, w którym leży.
- `voivodeship` (string): Województwo: slug (np. malopolskie) albo 2-cyfrowy TERYT.
- Przykład - Jakie przepisy antysmogowe obowiązują w gminie Mińsk Mazowiecki?: https://skladyopalow.pl/wp-json/so/v1/regulations?teryt=1412011
- Przykład - Co wolno palić pod kodem 31-001 (Kraków)?: https://skladyopalow.pl/wp-json/so/v1/regulations?postcode=31-001

## GET /subsidy - Kalkulator dopłaty Czyste Powietrze

Poziom dofinansowania (podstawowy, podwyższony, najwyższy), procent i maksymalne kwoty dotacji dla wybranych prac według programu Czyste Powietrze (progi i limity z dokumentów programu, wersja i data stanu w polu program). Wynik orientacyjny - decyduje WFOŚiGW. Przyjmuje też POST z tymi samymi parametrami (formularz serwisu używa POST, żeby dochód nie trafiał do adresu). Dochodu nie zapisujemy.

- `people` (integer): Liczba osób w gospodarstwie domowym (1 - gospodarstwo jednoosobowe). Wymagana razem z dochodem.
- `income` (number): Przeciętny miesięczny dochód (zł) - na osobę albo całego gospodarstwa (parametr dochod_typ). Decyduje o poziomie podwyższonym i najwyższym. Nie jest zapisywany.
- `income_type` (string): Czy dochod to kwota na osobę (osoba), czy całego gospodarstwa (gospodarstwo - dzielimy przez osoby). Wartości: person, household.
- `benefit` (boolean): Ustalone prawo do zasiłku stałego, okresowego, rodzinnego albo specjalnego zasiłku opiekuńczego - kwalifikuje do poziomu najwyższego.
- `annual_income` (number): Roczny dochód wnioskodawcy (zł, PIT "Podstawa obliczenia podatku") - próg poziomu podstawowego. Nie jest zapisywany.
- `business` (boolean): Wnioskodawca lub małżonek prowadzi działalność gospodarczą (także najem) - wynik dopisze limit przychodu.
- `current_heating` (string): Obecne ogrzewanie: stale - tylko paliwo stałe poniżej 5 klasy; stale5 - kocioł klasy 5 lub ekoprojekt; inne - gaz, olej, prąd, pompa, sieć albo kilka źródeł. Wartości: solid_fuel, solid_fuel_class5, other.
- `eu` (string): Wskaźnik zapotrzebowania na energię użytkową do ogrzewania z audytu = rodzaj przedsięwzięcia: 1 - poniżej 80, 2 - od 80 do 140, 3 - powyżej 140 kWh/(m² rok); niewiem - wynik w trzech wariantach. Wartości: unknown, 1, 2, 3.
- `new_source` (string): Nowe źródło ciepła (Załącznik nr 2, tabela 2). Przy gruntowej pompie ciepła doliczamy dolne źródło. Wartości: none, district_heating, heat_pump_air_water, heat_pump_air_air, heat_pump_ground, gasification_boiler, pellet_boiler, electric.
- `central_heating_dhw` (boolean): Nowa instalacja centralnego ogrzewania i ciepłej wody użytkowej.
- `ceiling` (number): Powierzchnia w m²: ocieplenie stropu lub dachu (Załącznik nr 2, tabela 3, lp. 1). Puste - poza zakresem.
- `floor` (number): Powierzchnia w m²: ocieplenie podłogi (Załącznik nr 2, tabela 3, lp. 2). Puste - poza zakresem.
- `walls` (number): Powierzchnia w m²: ocieplenie ścian (Załącznik nr 2, tabela 3, lp. 3). Puste - poza zakresem.
- `windows` (number): Powierzchnia w m²: okna (Załącznik nr 2, tabela 3, lp. 4). Puste - poza zakresem.
- `doors` (number): Powierzchnia w m²: drzwi zewnętrzne (Załącznik nr 2, tabela 3, lp. 5). Puste - poza zakresem.
- `gates` (number): Powierzchnia w m²: brama garażowa (Załącznik nr 2, tabela 3, lp. 6). Puste - poza zakresem.
- `ventilation` (boolean): Wentylacja mechaniczna z odzyskiem ciepła (zestaw).
- `audit` (boolean): Zwrot kosztu audytu energetycznego (audyt jest obowiązkowy).
- `energy_certificate` (boolean): Zwrot kosztu świadectwa charakterystyki energetycznej po pracach.
- `cost_district_heating` (number): Opcjonalnie: koszt netto (zł) pozycji "sieć ciepłownicza". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_heat_pump_air_water` (number): Opcjonalnie: koszt netto (zł) pozycji "pompa ciepła powietrze/woda". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_heat_pump_air_air` (number): Opcjonalnie: koszt netto (zł) pozycji "pompa ciepła powietrze/powietrze". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_heat_pump_ground` (number): Opcjonalnie: koszt netto (zł) pozycji "gruntowa pompa ciepła". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_ground_source_loop` (number): Opcjonalnie: koszt netto (zł) pozycji "dolne źródło". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_gasification_boiler` (number): Opcjonalnie: koszt netto (zł) pozycji "kocioł zgazowujący drewno". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_pellet_boiler` (number): Opcjonalnie: koszt netto (zł) pozycji "kocioł na pellet". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_electric` (number): Opcjonalnie: koszt netto (zł) pozycji "ogrzewanie elektryczne". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_central_heating_dhw` (number): Opcjonalnie: koszt netto (zł) pozycji "instalacja c.o. i c.w.u.". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_ceiling` (number): Opcjonalnie: koszt netto (zł) pozycji "ocieplenie stropu lub dachu". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_floor` (number): Opcjonalnie: koszt netto (zł) pozycji "ocieplenie podłogi". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_walls` (number): Opcjonalnie: koszt netto (zł) pozycji "ocieplenie ścian". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_windows` (number): Opcjonalnie: koszt netto (zł) pozycji "okna". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_doors` (number): Opcjonalnie: koszt netto (zł) pozycji "drzwi zewnętrzne". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_gates` (number): Opcjonalnie: koszt netto (zł) pozycji "brama garażowa". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_ventilation` (number): Opcjonalnie: koszt netto (zł) pozycji "wentylacja z rekuperacją". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_audit` (number): Opcjonalnie: koszt netto (zł) pozycji "audyt energetyczny". Bez kosztu liczymy maksymalną kwotę dotacji.
- `cost_energy_certificate` (number): Opcjonalnie: koszt netto (zł) pozycji "świadectwo energetyczne". Bez kosztu liczymy maksymalną kwotę dotacji.
- `html` (boolean): Dołącz gotowe fragmenty HTML wyniku (używa ich formularz na stronie kalkulatora).
- Przykład - Ile dotacji na pompę ciepła i ocieplenie ścian dla 4 osób z dochodem 2000 zł na osobę?: https://skladyopalow.pl/wp-json/so/v1/subsidy?people=4&income=2000&current_heating=solid_fuel&eu=3&new_source=heat_pump_air_water&central_heating_dhw=1&walls=140

## Zasady użycia

**Dane udostępniamy do cytowania z podaniem źródła.** Przy każdym użyciu podaj nazwę serwisu (Składy Opałów), adres strony, której dotyczy informacja (pole url albo strona), i datę, na którą dane są aktualne.

### Status danych i odpowiedzialność

Każdy wpis składu ma pole zrodlo.status_danych: nieweryfikowane (dane z otwartych źródeł, niepotwierdzone), zweryfikowane (sprawdzone przez redakcję) albo wlasciciel (potwierdzone przez właściciela). Cytując skład, podawaj ten status. Godziny otwarcia, dostępność paliw i ceny mogą się zmienić - zawsze trzeba je potwierdzić w składzie. Ceny ze składów to mediany zatwierdzonych cen, a średnie GUS to osobne dane urzędowe - nie łącz ich w jednej liczbie.

### Tempo zapytań i masowe pobieranie

API jest bezpłatne i nie wymaga klucza. Prosimy o rozsądne tempo - nie więcej niż jedno zapytanie na sekundę z jednego źródła - i korzystanie z pamięci podręcznej: odpowiedzi mają nagłówek Cache-Control. Przy nadmiernym ruchu możemy ograniczyć dostęp. **Pobieranie całej bazy, tworzenie jej kopii i użycie komercyjne danych wymagają wcześniejszego kontaktu:** [kontakt@skladyopalow.pl](mailto:kontakt@skladyopalow.pl).

### Licencje

- Część danych o składach pochodzi z OpenStreetMap: © współtwórcy OpenStreetMap, licencja [Open Database License (ODbL)](https://www.openstreetmap.org/copyright). Takie wpisy mają atrybucję w polu zrodlo.pochodzenie. Baza danych zbudowana z ich wykorzystaniem podlega warunkom ODbL, w tym obowiązkowi podania źródła i udostępnienia na tych samych zasadach.

- Średnie ceny węgla, prądu i gazu pochodzą z Banku Danych Lokalnych GUS - przy każdej serii podajemy numer zmiennej i adres źródła.

- Nazwy, kody i granice gmin pochodzą z rejestru TERYT (GUS) i Państwowego Rejestru Granic (GUGiK).

- Teksty uchwał antysmogowych linkujemy do dzienników urzędowych województw.

### Dane firm

W katalogu są wyłącznie firmy - nie publikujemy osób prywatnych. Danych kontaktowych składów nie wolno wykorzystywać do niezamówionej korespondencji handlowej. Właściciel składu może poprawić, przejąć albo usunąć swój wpis przez formularz [Dodaj lub popraw skład](/dodaj-sklad/).

### Zmiany w API

Obecna wersja to so/v1. W odpowiedziach mogą pojawiać się nowe pola. Usunięcie pola albo zmianę jego znaczenia zapowiemy na tej stronie i w specyfikacji OpenAPI.
