{"openapi":"3.1.0","info":{"title":"DentalWork – ceny i gabinety stomatologiczne (API v1)","version":"1.0.0","description":"Bezpłatne API tylko do odczytu: gabinety stomatologiczne w Polsce (RPWDL, NFZ) i ceny zabiegów z publicznych cenników gabinetów. Przy każdej cenie źródło i data pobrania; ceny orientacyjne. Brak ocen, rankingów jakości i płatnych pozycji. Limit 60 zapytań na minutę. Serwer MCP: https://dentalwork.pl/mcp. Dane gabinetów: Rejestr Podmiotów Wykonujących Działalność Leczniczą (Centrum e-Zdrowia) oraz Narodowy Fundusz Zdrowia (https://api.nfz.gov.pl/), licencja CC BY 4.0, dane przetworzone przez DentalWork.pl. Ceny: publiczne cenniki gabinetów, adres źródła i data pobrania przy każdej cenie. Ceny orientacyjne.","contact":{"name":"DentalWork.pl","url":"https://dentalwork.pl/dla-agentow","email":"kontakt@dentalwork.pl"},"license":{"name":"CC BY 4.0 (dane gabinetów i statystyki)","url":"https://creativecommons.org/licenses/by/4.0/"}},"servers":[{"url":"https://dentalwork.pl"}],"externalDocs":{"description":"Instrukcja podłączenia (MCP, API)","url":"https://dentalwork.pl/dla-agentow"},"paths":{"/api/v1/procedures":{"get":{"operationId":"listProcedures","summary":"Lista 10 zabiegów porównywarki z definicją „co obejmuje cena”","responses":{"200":{"description":"Zabiegi","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/cities":{"get":{"operationId":"findCity","summary":"Wyszukiwanie miasta lub województwa po nazwie (slug do pozostałych zapytań)","parameters":[{"name":"q","in":"query","required":true,"description":"Nazwa, 2–60 znaków, np. Kraków","schema":{"type":"string","minLength":2,"maxLength":60}},{"name":"limit","in":"query","required":false,"description":"Liczba wyników 1–10","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}],"responses":{"200":{"description":"Miasta i województwa","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Nieprawidłowe parametry","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/clinics":{"get":{"operationId":"searchClinics","summary":"Gabinety w mieście, województwie albo w promieniu od punktu (dokładnie jedno z trzech)","parameters":[{"name":"city","in":"query","required":false,"description":"Slug miasta (z /api/v1/cities), np. krakow","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}},{"name":"voivodeship","in":"query","required":false,"description":"Slug województwa bez polskich znaków, np. malopolskie","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}},{"name":"lat","in":"query","required":false,"description":"Szerokość geograficzna (z lng)","schema":{"type":"number","minimum":49,"maximum":55}},{"name":"lng","in":"query","required":false,"description":"Długość geograficzna (z lat)","schema":{"type":"number","minimum":14,"maximum":24.2}},{"name":"radius_km","in":"query","required":false,"description":"Promień 1–50 km","schema":{"type":"number","minimum":1,"maximum":50,"default":10}},{"name":"nfz","in":"query","required":false,"description":"Tylko z umową NFZ","schema":{"type":"boolean"}},{"name":"children","in":"query","required":false,"description":"Przyjmuje dzieci na NFZ","schema":{"type":"boolean"}},{"name":"accessible","in":"query","required":false,"description":"Z udogodnieniami dla osób z niepełnosprawnościami","schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"description":"Strona 1–50","schema":{"type":"integer","minimum":1,"maximum":50,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Wyników na stronę 1–20","schema":{"type":"integer","minimum":1,"maximum":20,"default":10}}],"responses":{"200":{"description":"Gabinety (kolejność: adres albo odległość)","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Nieprawidłowe parametry","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/clinics/{slug}":{"get":{"operationId":"getClinic","summary":"Karta gabinetu: adres, NFZ, ceny ze źródłem i datą","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,160}$"}}],"responses":{"200":{"description":"Karta gabinetu","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Nieprawidłowe parametry","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Nie znaleziono gabinetu","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"Wpis usunięty na wniosek gabinetu","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/prices/compare":{"get":{"operationId":"comparePrices","summary":"Ceny zabiegu w mieście albo województwie: statystyka i oferty gabinetów (od najniższej ceny)","parameters":[{"name":"procedure","in":"query","required":true,"description":"Kod albo slug zabiegu","schema":{"type":"string","enum":["consultation","konsultacja-stomatologiczna","filling_composite","plomba","root_canal_molar","leczenie-kanalowe","extraction","usuniecie-zeba","scaling","skaling-i-piaskowanie","whitening","wybielanie-zebow","implant","implant","crown_ceramic","korona-porcelanowa","braces_fixed","aparat-staly","xray_pano","pantomogram"]}},{"name":"city","in":"query","required":false,"description":"Slug miasta (z /api/v1/cities), np. krakow","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}},{"name":"voivodeship","in":"query","required":false,"description":"Slug województwa bez polskich znaków, np. malopolskie","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}},{"name":"nfz","in":"query","required":false,"description":"Tylko gabinety z umową NFZ","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Liczba ofert 1–20","schema":{"type":"integer","minimum":1,"maximum":20,"default":10}},{"name":"sort","in":"query","required":false,"description":"Kolejność: price_asc (domyślnie), price_desc, address, date (najnowsze pobranie)","schema":{"type":"string","enum":["price_asc","price_desc","address","date"],"default":"price_asc"}}],"responses":{"200":{"description":"Porównanie cen","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Compare"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Nieprawidłowe parametry","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/prices/stats":{"get":{"operationId":"priceStats","summary":"Statystyka cen zabiegu w Polsce, mieście albo województwie (mediana i kwartyle od 3 gabinetów)","parameters":[{"name":"procedure","in":"query","required":true,"description":"Kod albo slug zabiegu","schema":{"type":"string","enum":["consultation","konsultacja-stomatologiczna","filling_composite","plomba","root_canal_molar","leczenie-kanalowe","extraction","usuniecie-zeba","scaling","skaling-i-piaskowanie","whitening","wybielanie-zebow","implant","implant","crown_ceramic","korona-porcelanowa","braces_fixed","aparat-staly","xray_pano","pantomogram"]}},{"name":"city","in":"query","required":false,"description":"Slug miasta (z /api/v1/cities), np. krakow","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}},{"name":"voivodeship","in":"query","required":false,"description":"Slug województwa bez polskich znaków, np. malopolskie","schema":{"type":"string","pattern":"^[a-z0-9-]{1,80}$"}}],"responses":{"200":{"description":"Statystyka","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Nieprawidłowe parametry","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Limit 60 zapytań na minutę z jednego adresu (nagłówek Retry-After)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Dane chwilowo niedostępne","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"}}},"Meta":{"type":"object","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"dataDates":{"type":"object"},"pageUrl":{"type":["string","null"]},"orderingNote":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string"},"license":{"type":"string"},"truncated":{"type":"boolean"}}},"Offer":{"type":"object","properties":{"clinicSlug":{"type":"string"},"clinicName":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"priceMin":{"type":"integer"},"priceMax":{"type":["integer","null"]},"isFromPrice":{"type":"boolean"},"currency":{"const":"PLN"},"label":{"type":["string","null"],"description":"Nazwa pozycji z cennika (dosłownie, do 300 znaków)"},"unit":{"type":["string","null"]},"source":{"type":"object","properties":{"domain":{"type":["string","null"]},"url":{"type":["string","null"]},"type":{"enum":["clinic_website","owner"]}}},"fetchedAt":{"type":"string","format":"date"},"stale":{"type":"boolean","description":"Cena pobrana ponad 90 dni temu"},"nfzContract":{"type":"boolean"},"clinicUrl":{"type":["string","null"]}}},"Compare":{"type":"object","properties":{"procedure":{"type":"object"},"area":{"type":"object"},"stats":{"type":"object"},"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}},"coverage":{"type":"object","properties":{"clinicsInArea":{"type":"integer"},"clinicsWithPrice":{"type":"integer"}}},"hint":{"type":"string"},"pageUrl":{"type":["string","null"]}}}}}}