teryt24.pl

teryt24.pl · Dokumentacja API

Feed zmian rejestru TERYT

GUS publikuje „pliki aktualizacyjne”: RÓŻNICE między stanami katalogu. GET /v1/changes udostępnia je jako feed — z datą stanu katalogu, na którym zmiana nastąpiła, i z polami GUS-a w oryginalnych nazwach (bloki before i after nie wymyślają własnego schematu).

Trzy znaczenia, powiedziane wprost. LIKWIDACJA oznacza, że obiekt zniknął z katalogu — NIE oznacza, że adres stał się nieprawidłowy. ZMIANA KOLEJNOŚCI (typ „reordered”, czyli ULIC-owe „Z”) to zmiana FORMATOWA: zmieniła się część nazwy ulicy decydująca o jej pozycji alfabetycznej — ma własny typ, więc można go odfiltrować. Daty to STANY KATALOGU (GUS-owe StanPrzed/StanPo), a nie moment publikacji pliku.

Feed zaczyna się od pierwszego wgranego pliku aktualizacyjnego: wcześniejszej historii rejestru NIE odtwarza się, bo pliki różnicowe opisują tylko te stany, dla których zostały wygenerowane. `meta.coverage.complete` mówi to wprost. Do czasu pierwszego pobrania endpoint odpowiada 503.

GET /v1/changes

Feed zmian: filtry po stanie katalogu, rejestrze i typie zmiany. Kolejność: od najnowszych.

Sprawdź na żywo: /v1/changes?dataset=simc&since=2026-10-01&limit=2

Parametry
NazwaWymaganyOpis
since—The catalogue state to start from (YYYY-MM-DD). Changes whose "after" state is on or after this date are returned.
until—The catalogue state to stop at (YYYY-MM-DD), inclusive.
dataset—The registry: terc (administrative units) | simc (localities) | ulic (streets). All three when omitted.
type—The change type(s), comma-separated: added, modified, moved, renamed, reordered, deleted. All of them when omitted.
limit—Maximum changes per page (1–200).
offset—0-based, skips the first N changes (max 10000).

Przykład

Zmiany miejscowości

curl "https://teryt24.pl/v1/changes?dataset=simc&since=2026-10-01&limit=2"

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

{
  "changes": [
    {
      "dataset": "simc",
      "type": "renamed",
      "correctionType": "Z",
      "stanBefore": "2026-10-12",
      "stanAfter": "2026-11-09",
      "identityBefore": "0983988",
      "identityAfter": "0983988",
      "nameBefore": "Dzierżoniów",
      "nameAfter": "Dzierżoniów Śląski",
      "before": { "Stan": "2026-10-12", "Woj": "14", "Pow": "65", "Gmi": "03", "Rodz": "01", "Nazwa": "Dzierżoniów" },
      "after": { "Stan": "2026-11-09", "Woj": "14", "Pow": "65", "Gmi": "03", "Rodz": "01", "Nazwa": "Dzierżoniów Śląski" }
    }
  ],
  "meta": {
    "total": 1,
    "offset": 0,
    "limit": 2,
    "coverage": { "from": "2026-10-12", "to": "2026-11-09", "ingestedAt": "2026-11-10T03:12:44.000Z", "complete": false }
  }
}
Odpowiedzi
StatusOpis
200The changes, newest first, plus `meta.coverage` — the states the feed covers, when it was last ingested, and the fact that the earlier history is not reconstructed.
400Invalid query parameters.
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.
500Unexpected server failure (e.g. the database is unreachable). The body is deliberately generic — error detail lives in the server logs, never in the response.

Przeglądaj dane

Zmiany dotyczą tych samych obiektów, które mają strony 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.