teryt24.pl

teryt24.pl · Dokumentacja API

Granice administracyjne (GeoJSON)

GET /v1/boundaries/counties i GET /v1/boundaries/regions zwracają granice administracyjne Polski z zatwierdzonej edycji PRG (GUGiK) jako RFC 7946 FeatureCollection w WGS84: 380 powiatów (włącznie z miastami na prawach powiatu) i 16 województw, kluczowanych kodem TERC. Każdy feature niesie geometrię Polygon albo MultiPolygon w parach [lon, lat] (pierścienie zamknięte, zewnętrzne przeciwnie do wskazówek zegara) oraz właściwości terc, name (dosłowna nazwa z katalogu TERC tej instancji; null, gdy katalogu brak), kind, provinceCode oraz labelLat/labelLon — punkt etykietowania: punkt wnętrza najdalszy od granicy kształtu, nie środek bounding boxa, który dla dziesięciu z 380 powiatów leży w sąsiedzie.

Wspólna granica sąsiadów jest upraszczana RAZ — jako łuk, którym oba powiaty przechodzą — więc sąsiednie feature niosą tę samą linię i miedzy powiatami nie ma rys, bez zamalowywania ich białym obrysem. Opcjonalny filtr ?province=<WOJ> zawęża zbiór do jednego województwa (cały kraj to ~0,7 MB surowe, ~70 kB po kompresji); 404 dla dobrze sformułowanego kodu, którego geometria nie zna — pusta kolekcja czytałaby się jak „województwo zniknęło”. Nagłówek odpowiedzi X-PRG-Boundaries-Version podaje edycję PRG, z której geometria pochodzi, więc konsument może audytować, co narysował.

GET /v1/boundaries/counties

Wszystkie 380 powiatów w jednym GeoJSON; ?province= zawęża do jednego województwa. Content-Type: application/geo+json.

Sprawdź na żywo: /v1/boundaries/counties?province=14

Parametry
NazwaWymaganyOpis
province—Optional 2-digit TERC voivodeship code filter (e.g. '14'), as served by /v1/regions — trims the collection to that voivodeship's geometry. A blank value is treated as absent.

Przykład

Powiaty Mazowieckiego (?province=14)

curl "https://teryt24.pl/v1/boundaries/counties?province=14"

Odpowiedź (skrócona — pokazano pierwsze wiersze):

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [21.20657, 51.58833], [21.21739, 51.59667], [21.20116, 51.605],
          [21.21739, 51.60667], [21.2282, 51.63167], [21.24172, 51.63667],
          … 67 more pairs — the ring closes on [21.20657, 51.58833]
        ]]
      },
      "properties": { "terc": "1401", "name": "białobrzeski", "kind": "powiat", "provinceCode": "14", "labelLat": 51.61462, "labelLon": 20.95693 }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
          [[ [20.85504, 51.34333], [20.86045, 51.36], [20.84152, 51.35667], … 79 more pairs — closes on [20.85504, 51.34333] ]],
          [[ [20.61978, 51.235], [20.62789, 51.24], [20.61708, 51.24333], [20.61978, 51.235] ]]
        ]
      },
      "properties": { "terc": "1423", "name": "przysuski", "kind": "powiat", "provinceCode": "14", "labelLat": 51.38507, "labelLon": 20.63991 }
    }
  ]
}
Odpowiedzi
StatusOpis
200Successful response — an RFC 7946 FeatureCollection.
400Invalid query parameters.
404The province filter is a well-formed code the boundary geometry does not cover.
429Rate limit exceeded (60 requests/min/IP) or a plan's monthly quota exhausted. Includes `Retry-After` and `X-RateLimit-*` headers; the body's `code` distinguishes the two kinds.
503Service is warming up.
Kształty, które endpoint zwraca — z tych samych łuków, po przekształceniu do WGS84. Granice: PRG (GUGiK), stan 2026-10-14.

Cały przykład na żywo — choropleth 380 powiatów po realnych liczbach tej instancji — działa na demonstracji granic.

const res = await fetch("https://teryt24.pl/v1/boundaries/counties?province=14");
const geo = await res.json();  // RFC 7946 FeatureCollection — WGS84 [lon, lat]

map.on("load", function () {
  map.addSource("powiats", { type: "geojson", data: geo });
  map.addLayer({
    id: "powiats-fill",
    type: "fill",
    source: "powiats",
    paint: { "fill-color": "#9fc7ae", "fill-opacity": 0.55 },
  });
  map.addLayer({
    id: "powiats-outline",
    type: "line",
    source: "powiats",
    paint: { "line-color": "#2f6f4f", "line-width": 0.7 },
  });
});
// feature.properties.terc is the join key: the same 4-digit county codes
// GET /v1/regions/{code}/counties answers with, so shading the map by any
// per-county figure of your own is one match() expression on ["get", "terc"].

GET /v1/boundaries/regions

16 województw — ta sama geometria co powiaty, poziom wyżej: provinceCode jest tu równe terc.

Sprawdź na żywo: /v1/boundaries/regions

Parametry
NazwaWymaganyOpis
province—Optional 2-digit TERC voivodeship code filter (e.g. '14'), as served by /v1/regions — trims the collection to that voivodeship's geometry. A blank value is treated as absent.

Przykład

Lista województw

curl "https://teryt24.pl/v1/boundaries/regions"

Odpowiedź (skrócona — pokazano pierwsze wiersze):

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [16.41491, 51.785], [16.26889, 51.66333], [16.21751, 51.715],
          … 137 more pairs — the ring closes on [16.41491, 51.785]
        ]]
      },
      "properties": { "terc": "02", "name": "DOLNOŚLĄSKIE", "kind": "region", "provinceCode": "02", "labelLat": 51.14961, "labelLon": 16.42419 }
    }
    … 15 more features — one per voivodeship, sorted by TERC code
  ]
}
Odpowiedzi
StatusOpis
200Successful response — an RFC 7946 FeatureCollection.
400Invalid query parameters.
404The province filter is a well-formed code the boundary geometry does not cover.
429Rate limit exceeded (60 requests/min/IP) or a plan's monthly quota exhausted. Includes `Retry-After` and `X-RateLimit-*` headers; the body's `code` distinguishes the two kinds.
503Service is warming up.

Przeglądaj dane

Te same granice rysują strony statystyczne — mapa i tabela w przeglądarce:

Wszystkie endpointy /v1 zwracają JSON, obsługują CORS i są objęte dokumentem openapi.json. Interaktywna wersja tej referencji: /docs.

Limity: 60 zapytań/min na IP bez klucza; klucz API (nagłówek X-API-Key) dostaje własny kubełek. Po przekroczeniu endpointy odpowiadają HTTP 429 z nagłówkiem Retry-After. Szczegóły: limity i klucze · zasady użycia.

Atrybucja jest warunkiem użycia. Wyświetlając wyniki w aplikacji, stronie, mapie lub raporcie, pokaż: Dane: GUS TERYT, punkty adresowe PRG (GUGiK), kody pocztowe GeoNames — przez teryt24.pl z linkiem do zasad użycia. Użycie wyłącznie po stronie serwera jest zwolnione.