Publiczne API Mapy Oświatowej
Dane o ponad 59 000 polskich placówek oświatowych — żłobkach, przedszkolach, szkołach i uczelniach — prosto z rejestrów publicznych. Bez klucza, bez rejestracji, tylko zapytania GET.
https://api.mapaoswiatowa.plBez klucza i bez rejestracji
Wszystkie opisane endpointy to GET, otwarte dla każdego, odpowiedzi w JSON kodowanym w UTF-8.
120 zapytań na minutę
Limit liczony per adres IP. Po przekroczeniu API odpowiada kodem 429 i nagłówkiem Retry-After.
Kontakty tylko po jednej placówce
Telefon, e-mail i profile społecznościowe zwraca wyłącznie profil pojedynczej placówki — listy ich nie niosą, żeby nie służyły do masowego pobierania kontaktów. Pole description też jest tylko w profilu, ale z powodu wagi: to jedyny dowolny tekst obok samych enumów i liczb.
Placówka usunięta z rejestru to 410
Nie 404: adres nie zostanie użyty ponownie. Gdy placówka zmieniła adres, odpowiedź niesie redirectSlug z aktualnym slugiem.
Szybki start
Szkoły podstawowe w miejscowości
Nazwa miejscowości zakodowana, bo ma polskie znaki.
curl "https://api.mapaoswiatowa.pl/api/institutions?city=Czy%C5%BCowice&type=PRIMARY_SCHOOL"Żłobki w promieniu 10 km
Dwa kroki: nazwa miejscowości nie jest współrzędnymi, a /nearby przyjmuje tylko te drugie.
curl "https://api.mapaoswiatowa.pl/api/locations/search?q=Czy%C5%BCowice"
curl "https://api.mapaoswiatowa.pl/api/institutions/nearby?lat=49.9828&lng=18.4088&radius=10&type=NURSERY"Technika w województwie, wg popularności
Filtry łączą się jako kolejne parametry; sortBy ma pięć wartości.
curl "https://api.mapaoswiatowa.pl/api/institutions?voivodeship=slaskie&subtype=TECHNICAL_SECONDARY&sortBy=views&limit=20"Przedszkola z wolnymi miejscami w powiecie
Slug powiatu jest unikalny dopiero w województwie, więc oba parametry idą razem.
curl "https://api.mapaoswiatowa.pl/api/institutions?voivodeship=mazowieckie&powiat=piaseczynski&type=PRESCHOOL&hasFreePlaces=true&limit=20"Wynik matematyki na egzaminie ósmoklasisty 2026
Jedno zapytanie zamiast detalu per szkoła; szkoła bez podejścia ma examYears: null i zostaje w wyniku.
curl "https://api.mapaoswiatowa.pl/api/institutions?city=Warszawa&type=PRIMARY_SCHOOL&exam=E8&examYear=2026&examSubject=matematyka&limit=10"Miejscowość ze statystykami
Ludność, rozbicie na typy, odmiana nazwy i środek miejscowości.
curl "https://api.mapaoswiatowa.pl/api/cities/warszawa"Endpointy
Komplet parametrów każdego z nich niesie specyfikacja OpenAPI.
Wyszukiwanie i geokodowanie
GET/api/locations/search?q={fraza}
Jedyny sposób zamiany nazwy miejscowości na współrzędne. Wynik typu city niesie id — to cityId, którym filtruje się placówki jednoznacznie.
GET/api/locations/reverse?lat={lat}&lng={lng}
Najbliższa miejscowość dla podanych współrzędnych.
Placówki
GET/api/institutions
Paginowana lista z ponad 30 filtrami. Bez danych kontaktowych i bez opisu placówki. Odpowiedź niesie institutions[] i pagination.
GET/api/institutions/nearby?lat={lat}&lng={lng}&radius={km}
Placówki w promieniu, posortowane po odległości (pole distance w km). Wpisy promowane wracają osobno, w polu promoted.
GET/api/institutions/{id}
Pełny profil: ponad 50 pól, zdjęcia z atrybucją, statystyki SIO, wyniki egzaminów, dane kontaktowe. Jako {id} zadziała id, slug, numer RSPO (z ?by=rspo) albo numer rejestru żłobków.
GET/api/institutions/popular
Dzienna próbka najczęściej oglądanych placówek z opisem.
Miejscowości i podziały administracyjne
GET/api/cities?voivodeship={slug}
Miejscowości z liczbą placówek, malejąco.
GET/api/cities/{slug}
Szczegóły miejscowości: rodzaj TERYT, środek z PRNG, ludność NSP 2021, szeregi oświatowe GUS i agregaty SIO.
GET/api/divisions?level=powiat|gmina
Wszystkie powiaty albo wszystkie gminy naraz, z najnowszym rocznikiem GUS BDL i SIO dla każdej jednostki osobno.
GET/api/divisions/{woj}
Powiaty województwa z kodami TERC i liczbami placówek.
GET/api/divisions/{woj}/{powiat}
Szczegóły powiatu. Miasto na prawach powiatu zwraca obiekt redirect ze slugiem swojej strony miejskiej.
GET/api/divisions/{woj}/{powiat}/{gmina}
Szczegóły gminy razem ze wskaźnikami GUS BDL. Gmina miejska zwraca obiekt redirect.
GET/api/districts/{city}/{district}
Dzielnica jednego z pięciu miast, które je mają — z seriami GUS BDL dla dzielnic Warszawy.
GET/api/voivodeships/{slug}
Statystyki województwa, 10 największych miast i oficjalne szeregi GUS BDL od 2008 roku.
Statystyki
GET/api/statistics
Agregaty krajowe wg typu, podtypu i województwa oraz krajowe sumy SIO za najnowszy rok szkolny.
GET/api/statistics/fees?type=NURSERY|PRESCHOOL
Statystyki opłat. Przy zbyt małej próbie zakres rozszerza się z miasta na województwo, a potem na kraj — pole scope mówi, czego wynik faktycznie dotyczy.
GET/api/statistics/nursery-fees
Rozkład opłat za pobyt w żłobkach na tle ustawowego progu świadczenia Aktywnie w żłobku.
GET/api/statistics/nursery-places
Miejsca, dzieci i wolne miejsca w żłobkach: kraj, sektory, województwa i dzielnice pięciu miast — w jednej odpowiedzi.
GET/api/statistics/vocational-trends
Krajowe trendy naboru do zawodów szkolnictwa branżowego wg danych SIO.
GET/api/statistics/demographic-forecast
Prognoza ludności GUS do 2060 roku w edukacyjnych grupach wieku, dla kraju i 16 województw.
GET/api/statistics/specialists
Zatrudnienie logopedów, psychologów i pedagogów oraz nauczane języki — z otwartego eksportu RSPO.
GET/api/statistics/exams?exam={E8|EM2023}
Średni wynik z każdego przedmiotu i liczba zdających w 16 województwach, rok po roku — Mapa wyników egzaminów (CIE, MEN).
Patroni i zawody
GET/api/patrons/search?q={fraza}
Patroni szkół z liczbą placówek.
GET/api/patrons/top
Ranking patronów wraz ze slugiem strony patrona.
GET/api/patrons/stats
Podział patronów na kategorie i płeć — klasyfikacja automatyczna, z datą w polu classifiedAt.
GET/api/patrons/{slug}
Patron po slugu. Patron z mniej niż 10 placówkami nie ma własnej strony i zwraca 404.
GET/api/vocational/professions
Zawody nauczane w technikach i szkołach branżowych — słownik do podpowiedzi i filtrowania.
GET/api/vocational/professions/all
Wszystkie zawody, w których uczy dziś choć jedna szkoła, z liczbą szkół i adresem strony zawodu.
GET/api/vocational/professions/{slug}
Zawód po slugu strony, z liczbą szkół, nazwą branży i podstawą programową.
Źródła danych
GET/api/data-sources
Skąd pochodzi każda liczba, na jakiej licencji i kiedy trafiła do bazy. Uwaga na dwie różne daty: refreshedAt to moment naszego importu, sourceVintage — rocznik samego źródła. Dla spisu powszechnego dzieli je kilka lat.
Status
GET/health
Stan usługi i jej bazy danych. Ten adres wskazuje relacja status w katalogu API.
Słowniki
Wartości zamknięte. Wartość spoza słownika w polach type i subtype zwraca błąd 400, a w polach operatorType, religion i pedagogy jest po cichu pomijana jako filtr.
type — typ placówki
| NURSERY | Żłobek — strona serwisu /kategoria/zlobki |
| PRESCHOOL | Przedszkole — strona serwisu /kategoria/przedszkola |
| PRIMARY_SCHOOL | Szkoła podstawowa — strona serwisu /kategoria/szkoly-podstawowe |
| SECONDARY_SCHOOL | Szkoła średnia — strona serwisu /kategoria/szkoly-srednie |
| POST_SECONDARY | Szkoła policealna — strona serwisu /kategoria/szkoly-policealne |
| HIGHER_EDUCATION | Szkoła wyższa — strona serwisu /kategoria/uczelnie |
| CONTINUING_EDUCATION | Kształcenie ustawiczne — strona serwisu /kategoria/ksztalcenie-ustawiczne |
| SCHOOL_COMPLEX | Zespół szkół — strona serwisu /kategoria/zespoly-szkol |
subtype — podtyp placówki
| CHILDRENS_CLUB | Klub dziecięcy (Żłobek) |
| KINDERGARTEN | Przedszkole (Przedszkole) |
| PRESCHOOL_POINT | Punkt przedszkolny (Przedszkole) |
| PRESCHOOL_TEAM | Zespół wychowania przedszkolnego (Przedszkole) |
| ARTISTIC | Artystyczna (Szkoła podstawowa) |
| SPECIAL_NEEDS | Specjalna (Szkoła podstawowa) |
| GENERAL_SECONDARY | Liceum ogólnokształcące (Szkoła średnia) |
| TECHNICAL_SECONDARY | Technikum (Szkoła średnia) |
| VOCATIONAL_1 | Szkoła branżowa I st. (Szkoła średnia) |
| VOCATIONAL_2 | Szkoła branżowa II st. (Szkoła średnia) |
| ARTISTIC | Artystyczna (Szkoła średnia) |
| ARTISTIC | Artystyczna (Szkoła policealna) |
| UNIVERSITY | Uniwersytet (Szkoła wyższa) |
| POLYTECHNIC | Politechnika (Szkoła wyższa) |
| ACADEMY | Akademia (Szkoła wyższa) |
| VOCATIONAL_CENTER | Centrum Kształcenia Zawodowego (Kształcenie ustawiczne) |
| SKILLS_CENTER | Branżowe Centrum Umiejętności (Kształcenie ustawiczne) |
operatorType — organ prowadzący
| gmina | Gmina |
| miasto | Miasto |
| powiat | Powiat |
| samorzad_woj | Samorząd województwa |
| minister | Minister |
| cuw | Centrum usług wspólnych |
| fundacja | Fundacja |
| stowarzyszenie | Stowarzyszenie |
| koscielna | Kościelna osoba prawna |
| spolka | Spółka |
| osoba_fizyczna | Osoba fizyczna |
religion — wyznanie placówki wyznaniowej
| katolicka | Katolicka |
| chrzescijanska | Chrześcijańska |
| ewangelicka | Ewangelicka |
| luteranska | Luterańska |
| prawoslawna | Prawosławna |
| zydowska | Żydowska |
| muzulmanska | Muzułmańska |
| inne_wyznanie | Inne wyznanie |
pedagogy — pedagogika alternatywna
| montessori | Montessori |
| waldorf | Waldorf |
| freinet | Freinet |
| democratic | Demokratyczna |
| reggio_emilia | Reggio Emilia |
| dalton | Plan daltoński |
| korczak | Pedagogika korczakowska |
| ib | International Baccalaureate (IB) |
voivodeship — slug województwa
| dolnoslaskie | Dolnośląskie |
| kujawsko-pomorskie | Kujawsko-pomorskie |
| lubelskie | Lubelskie |
| lubuskie | Lubuskie |
| lodzkie | Łódzkie |
| malopolskie | Małopolskie |
| mazowieckie | Mazowieckie |
| opolskie | Opolskie |
| podkarpackie | Podkarpackie |
| podlaskie | Podlaskie |
| pomorskie | Pomorskie |
| slaskie | Śląskie |
| swietokrzyskie | Świętokrzyskie |
| warminsko-mazurskie | Warmińsko-mazurskie |
| wielkopolskie | Wielkopolskie |
| zachodniopomorskie | Zachodniopomorskie |
Przedszkole to type PRESCHOOL, nie KINDERGARTEN — ta wartość należy do słownika subtype.
Jak czytać te dane
Pięć reguł, które w tych zbiorach najłatwiej złamać. Pełny opis źródeł i zastrzeżeń niesie llms.txt.
Brak wartości nie jest zerem
null w danych SIO, w szeregach GUS i w polach rejestrowych znaczy nie zgłoszono. Wyjątkiem są miejsca i przyjęci w przedszkolach, gdzie zdarzają się prawdziwe zera.
Zespołu szkół nie sumuje się z jego szkołami
SIO wykazuje uczniów przy szkołach członkowskich, a nauczycieli przy zespole. Dzielenie uczniów przez nauczycieli na poziomie jednej placówki daje liczbę bez znaczenia.
Organ prowadzący to nie sektor
operatorType mówi, kto placówkę prowadzi, i jest wypełniony dla około 59% wpisów. Podział na publiczne i niepubliczne niesie osobne pole isPublic, wypełnione dla około 90%.
Żłobki i uczelnie nie raportują do SIO
sioAvailability przyjmuje wtedy wartość out-of-scope. To brak obowiązku sprawozdawczego, nigdy zero dzieci ani zaniedbanie placówki. Miejsca w żłobkach podaje za to rejestr MRPiPS — stąd freePlaces i nurseryStats — ale to osobne uniwersum pomiaru i osobna data, więc z liczbami SIO się go nie sumuje.
Rejestr, SIO i GUS to trzy różne uniwersa pomiaru
GUS liczy jednostki sprawozdawcze wg lokalizacji, SIO wpisy rejestrowe na 30 września, a ten serwis wpisy rejestrowe. Różnic między nimi nie należy przedstawiać jako sprzeczności.
Licencje i cytowanie
Dane pochodzą z rejestrów publicznych i z OpenStreetMap, a licencja zależy od pola.
OpenStreetMap — ODbL 1.0
Godziny otwarcia, dostępność dla wózków, profile społecznościowe, a dla placówek bez identyfikatora rejestrowego — cały wpis. Wymaga podania OpenStreetMap jako źródła i zachowania licencji dla danych pochodnych.
PRNG i GUS BDL — CC BY 4.0
Środek miejscowości i odmiana jej nazwy pochodzą z Państwowego Rejestru Nazw Geograficznych; ludność i szeregi oświatowe — z Banku Danych Lokalnych GUS. Dla PRNG obowiązuje formuła: wykorzystano materiały państwowego zasobu geodezyjnego i kartograficznego.
System Informacji Oświatowej — CC BY 4.0 oraz CC0
Wykaz placówek jest na licencji CC BY 4.0 — cytuj MEN, System Informacji Oświatowej, wraz z rokiem szkolnym i stanem na 30 września. Arkusz przedszkolny oraz zbiór o zawodach szkolnictwa branżowego są udostępnione jako CC0.
Zdjęcia z Wikimedia Commons
Zdjęcie z Commons niesie w polu attribution autora, licencję i adres strony pliku. Kto wykorzystuje je dalej, zachowuje warunki tej licencji i podaje autora.
Odkrywalność dla agentów
Cztery adresy, po których automat rozpoznaje to API bez czytania tej strony.
/.well-known/api-catalog
Katalog API wg RFC 9727 — dokument linkset, od którego agent zaczyna. Wskazuje specyfikację, tę stronę i endpoint statusu.
/openapi.json
Specyfikacja OpenAPI 3.1: wszystkie ścieżki, parametry i zamknięte słowniki. Do wczytania w generatorze klienta albo przeglądarce specyfikacji.
/llms.txt
Kontrakt opisowy dla modeli językowych: pola, źródła danych, reguły interpretacji i przykłady zapytań.
/health
Stan usługi. Odpowiada 200, gdy API i baza danych działają, a 503, gdy baza jest nieosiągalna.
Strona główna oraz strony placówek, miejscowości i wpisów blogowych odpowiadają wersją Markdown, gdy żądanie niesie nagłówek Accept: text/markdown. Adres pozostaje ten sam.
Najczęściej zadawane pytania
Co się stanie po przekroczeniu limitu zapytań?
API odpowiada kodem 429 i nagłówkiem `Retry-After`. Limit 120 zapytań na minutę liczony jest per adres IP, więc rozsądniej jest odpytywać sekwencyjnie i cache'ować odpowiedzi po swojej stronie niż zrównoleglać zapytania.
Czy mogę wykorzystać te dane komercyjnie?
Tak, przy zachowaniu licencji źródeł oraz wskazaniu Mapy Oświatowej jako źródła tam, gdzie prezentujesz pobrane dane. Dane z OpenStreetMap są objęte licencją ODbL 1.0 (wymaga podania źródła i zachowania licencji dla danych pochodnych), dane PRNG, GUS BDL i wykaz SIO — licencją CC BY 4.0, a arkusz przedszkolny SIO i zbiór o zawodach są udostępnione jako CC0. Warunkiem korzystania z API pozostaje regulamin: nie służy ono do odtworzenia bazy serwisu.
Jak cytować dane o liczbie uczniów?
Z pola sioStats razem z rokiem szkolnym i informacją, że dane pochodzą z Systemu Informacji Oświatowej MEN (stan na 30 września). Pole studentCount pochodzi z innego źródła i nie jest z SIO uzgadniane.
Dlaczego dwie miejscowości o tej samej nazwie zwracają różne wyniki?
Bo kilka miejscowości w Polsce nosi tę samą nazwę. Filtr city dopasowuje po nazwie, więc dla jednoznacznego wyniku ustal cityId przez /api/locations/search i filtruj po nim.
Czy mogę pobrać całą bazę jednym zapytaniem?
Nie. Listy są stronicowane po maksymalnie 100 wpisów, a endpoint /api/points, który zwraca wszystkie punkty naraz, służy wyłącznie do renderowania mapy — nie niesie nazw ani żadnych pól opisowych.
Budujesz coś na tych danych?
Napisz, czego brakuje w API albo co w danych wygląda na błąd. Zgłoszenia o placówkach trafiają do weryfikacji i poprawiają bazę dla wszystkich.
Napisz do nas