API.adresy.app

Wyszukiwarka adresów PRG

🔍

Wyszukaj adres w bazie PRG

Wpisz adres powyżej lub spróbuj jednego z przykładów:

Klucz API wymagany. Bez klucza przetwarzanie pliku nie jest dostępne. Zarejestruj się bezpłatnie lub zaloguj, by uzyskać klucz.

Kliknij lub przeciągnij plik

CSV, XLSX, TXT, JSON

Potrzebujesz więcej? Wyższe plany odblokują:
Starter — 39 zł/mies
✓ Pliki CSV/XLSX do 10 000 wierszy
✓ Historia jobów i wyników
✓ Przetwarzanie w tle
✓ Pobieranie CSV z wynikami
✓ 200 req/min
Business — 299 zł/mies
✓ Pliki do 100 000 wierszy
✓ Aktualizacje różnicowe (diff)
✓ Webhook callback
✓ 1 200 req/min · SLA 99.9%
✓ Priority support
Masz konto? Wgraj plik bezpośrednio w panelu →  ·  Załóż konto  ·  Zmień plan

Miejscowości

Wyszukaj miejscowość w rejestrze TERYT SIMC

Ulice w miejscowości

Wyszukaj ulicę w wybranej miejscowości

Wyszukaj TERYT

Znajdź kody TERYT (SIMC, ULIC) dla adresu

Powiaty w województwie

Lista powiatów i liczba gmin w danym województwie

Gminy w powiecie

Lista gmin i ich typów w wybranym powiecie

Dzielnice i osiedla

Lista dzielnic i jednostek pomocniczych w mieście

Mapa

Wyszukaj adres, koordynaty lub kod TERYT — lub kliknij na mapę

Kliknij na mapę lub wyszukaj... m

Działki katastralne

Dane: ULDK GUGiK (uldk.gugik.gov.pl) — bezpłatne

Kliknij na mapie → wyświetli numer działki, adres i koordynaty. Użyj wyszukiwarki po lewej aby wycentrować mapę.

API kodów pocztowych, TERYT i PRG

Darmowe REST API do danych adresowych Polski. Kody pocztowe, TERYT SIMC/ULIC, punkty adresowe PRG (GUGiK), geokodowanie WGS84, dopasowywanie i walidacja adresów. JSON, bez rejestracji dla testów, klucz API dla produkcji.

Gotowy zacząć? Załóż darmowe konto i wygeneruj klucz API w 30 sekund.
Załóż konto Zaloguj
📚 Nie wiesz od czego zacząć? Przeczytaj nasz Przewodnik po API dla początkujących — tłumaczy krok po kroku, zawiera przykłady Python, Make.com i n8n.

Quickstart — pierwszy request w 30 sekund

Endpointy: https://api.adresy.app/api/v1. Odpowiedzi JSON (UTF-8). GET dla odczytu, POST dla batch.

curl -s "https://api.adresy.app/api/v1/match?q=Rynek+1,+Wrocław&api_key=TWOJ_KLUCZ"

Odpowiedź:

{
  "results": [
    {
      "input": "Rynek 1, Wrocław",
      "status": "found",
      "match": {
        "miejscowosc": "Wrocław",
        "ulica_norm": "Rynek",
        "nr_budynku": "1",
        "kod_pocztowy": "50-106",
        "teryt_simc": "0986283",
        "teryt_ulic": "19357",
        "gmina": "Wrocław",
        "powiat": "Wrocław",
        "wojewodztwo": "DOLNOŚLĄSKIE",
        "lat": 51.10893,
        "lon": 17.03262,
        "score": 0.98,
        "match_layer": "EXACT"
      }
    }
  ]
}

GET /match?q= to najprostszy sposób — podaj dowolny adres jako tekst, otrzymasz dopasowanie z rejestru PRG z kodem pocztowym, TERYT i współrzędnymi.

Uwierzytelnianie i limity

Bez klucza 20 zapytań/min (per IP). Wystarczy do testów.
Free (darmowy) 30 req/min, 3 000 req/miesiąc. Nagłówek Authorization: Bearer <klucz>.
Starter (39 zł/mies) 200 req/min, 100 000 req/miesiąc. Batch CSV/XLSX, faktura VAT.
Business (299 zł/mies) 1 200 req/min, 10 000 000 req/miesiąc. SLA 99,9%, priority support.
Enterprise Dedykowana infrastruktura, webhooki, on-premise. Kontakt.
curl -s "https://api.adresy.app/api/v1/lookup/kod-pocztowy?kod=00-001" \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx"

Alternatywnie: &api_key=TWOJ_KLUCZ jako query param — wygodne do testów w przeglądarce:

https://api.adresy.app/api/v1/match?q=Rynek+1,+Wrocław&api_key=sk_live_xxx

1. Wyszukiwanie po kodzie pocztowym

GET /api/v1/lookup/kod-pocztowy

Zwraca ulice i numery przypisane do kodu pocztowego. Dane z PRG (GUGiK).

ParametrTypOpis
kodstringKod pocztowy NN-NNN (wymagany)
limitintMax ulic w odpowiedzi (domyślnie 200)
curl / Python / JavaScript
# curl
curl -s "https://api.adresy.app/api/v1/lookup/kod-pocztowy?kod=50-079"

# Python
import httpx
r = httpx.get("https://api.adresy.app/api/v1/lookup/kod-pocztowy",
    params={"kod": "50-079"}, headers={"Authorization": "Bearer sk_live_xxx"})
data = r.json()

// JavaScript
const res = await fetch("https://api.adresy.app/api/v1/lookup/kod-pocztowy?kod=50-079",
  { headers: { "Authorization": "Bearer sk_live_xxx" } });
const data = await res.json();

2. Kod pocztowy dla adresu

GET /api/v1/lookup/kod-dla-adresu

Podaj miejscowość, ulicę i numer — otrzymasz kod pocztowy. Idealne do walidacji formularzy.

curl -s "https://api.adresy.app/api/v1/lookup/kod-dla-adresu" \
  --data-urlencode "miejscowosc=Wrocław" \
  --data-urlencode "ulica=Rynek" \
  --data-urlencode "nr=1" -G
Odpowiedź
{
  "found": true,
  "kod_pocztowy": "50-106",
  "miejscowosc": "Wrocław",
  "ulica": "Rynek",
  "nr": "1",
  "teryt_simc": "0986283",
  "teryt_ulic": "19357"
}

3. TERYT — SIMC i ULIC

GET /api/v1/lookup/teryt

Kody TERYT (SIMC/ULIC) z przynależnością administracyjną. Wyszukiwanie po nazwie lub kodzie SIMC.

curl -s "https://api.adresy.app/api/v1/lookup/teryt" \
  --data-urlencode "miejscowosc=Kraków" \
  --data-urlencode "ulica=Floriańska" -G
Odpowiedź
{
  "found": true,
  "results": [{
    "simc": "0950463",
    "nazwa": "Kraków",
    "typ": "miasto",
    "gmina": "Kraków",
    "powiat": "Kraków",
    "wojewodztwo": "małopolskie",
    "ulice": [{"ulic": "05123", "cecha": "ul.", "nazwa_1": "Floriańska"}]
  }]
}

4. Dekoduj TERYT — pełna hierarchia adresowa

GET /api/v1/teryt/decode

Zamienia kody TERYT na pełną hierarchię adresową: województwo → powiat → gmina → miejscowość → dzielnica → ulica → numer. Obsługuje trzy formaty wejścia:

  • SIMC (7 cyfr) — kod miejscowości: 0986283 → Wrocław
  • ULIC (5 cyfr) — kod ulicy: 19357 → Rynek (Wrocław)
  • SIMC#ULIC#NR — pełny adres punktowy: 0986283#19357#1
ParametrOpis
simcKod SIMC lub format SIMC#ULIC#NR
ulicKod ULIC (ulicy)
kodDowolny kod TERYT (auto-detect)
# Miejscowość (SIMC)
curl -s "https://api.adresy.app/api/v1/teryt/decode?simc=0986283"

# Ulica (ULIC)
curl -s "https://api.adresy.app/api/v1/teryt/decode?ulic=19357"

# Pełny adres (SIMC#ULIC#NR)
curl -s "https://api.adresy.app/api/v1/teryt/decode?simc=0986283%2319357%231"
Odpowiedź — pełny adres SIMC#ULIC#NR
{
  "found": true,
  "typ": "adres",
  "wojewodztwo": "DOLNOŚLĄSKIE",
  "powiat": "Wrocław",
  "gmina": "Wrocław",
  "miejscowosc": "Wrocław",
  "teryt_simc": "0986283",
  "dzielnica": "Stare Miasto",
  "teryt_simc_dzielnica": "0986544",
  "ulica": "Rynek",
  "teryt_ulic": "19357",
  "nr_budynku": "1",
  "kod_pocztowy": "50-106",
  "lat": 51.10893,
  "lon": 17.03262
}

5. Adresy po współrzędnych (geokodowanie odwrotne)

GET /api/v1/lookup/blisko

Najbliższe punkty adresowe dla współrzędnych WGS84. PostGIS + indeks GiST.

curl -s "https://api.adresy.app/api/v1/lookup/blisko?lat=51.1089&lon=17.0326&radius=200&limit=5"
Odpowiedź
{
  "found": true,
  "count": 5,
  "results": [{
    "miejscowosc": "Wrocław",
    "ulica": "Rynek",
    "nr_budynku": "1",
    "kod_pocztowy": "50-106",
    "distance_m": 12.4,
    "lat": 51.10893,
    "lon": 17.03262
  }]
}

6. Szybkie dopasowanie — GET /match?q=

GET /api/v1/match?q=...

Najprostszy endpoint — podaj adres jako tekst, otrzymasz dopasowanie z PRG z pełnym TERYT, kodem pocztowym i współrzędnymi. Obsługuje literówki, skróty, brak kodu.

ParametrTypOpis
qstringAdres do dopasowania (wymagany)
wojewodztwostringOgraniczenie do województwa
min_scorefloatMin. score dopasowania (0-1, domyślnie 0.6)
curl -s "https://api.adresy.app/api/v1/match?q=Marszalkowska+1+Warszawa"
Python / JavaScript
# Python
import httpx
r = httpx.get("https://api.adresy.app/api/v1/match",
    params={"q": "Marszałkowska 1 Warszawa"},
    headers={"Authorization": "Bearer sk_live_xxx"})
print(r.json()["results"][0]["match"]["kod_pocztowy"])

// JavaScript
const res = await fetch(
  "https://api.adresy.app/api/v1/match?q=" + encodeURIComponent("Rynek 1, Wrocław"),
  { headers: { "Authorization": "Bearer sk_live_xxx" } }
);
const { results } = await res.json();
console.log(results[0].match.kod_pocztowy);

7. Dopasowywanie adresów — POST /match

POST /api/v1/match

Najmocniejszy endpoint. Bierze „brudny" adres (literówki, skróty, bez kodu) i dopasowuje do rekordu PRG z pełnym TERYT, kodem pocztowym i współrzędnymi. Fuzzy-match (RapidFuzz) + heurystyki polskich skrótów.

curl -s -X POST "https://api.adresy.app/api/v1/match" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_live_xxx" \
  -d '{
    "addresses": ["ul. Marsz Pilsudskiego 5a, Wroclaw"],
    "context": {"wojewodztwo": "dolnośląskie"},
    "options": {"fuzzy_threshold": 82, "max_candidates": 5}
  }'
Python / JavaScript
# Python
import httpx
r = httpx.post("https://api.adresy.app/api/v1/match",
    json={"addresses": ["Kościuszki 14 Kraków"]},
    headers={"Authorization": "Bearer sk_live_xxx"})
data = r.json()

// JavaScript
const res = await fetch("https://api.adresy.app/api/v1/match", {
  method: "POST",
  headers: {"Content-Type": "application/json", "Authorization": "Bearer sk_live_xxx"},
  body: JSON.stringify({addresses: ["Kościuszki 14 Kraków"]})
});
const data = await res.json();

8. Walidacja pliku CSV/XLSX

POST /api/v1/match/file

Prześlij plik z adresami (CSV UTF-8 lub XLSX, do 100 tys. wierszy). Otrzymasz ten sam plik z dopisanymi kolumnami: dopasowanie, TERYT, współrzędne, score.

curl -s -X POST "https://api.adresy.app/api/v1/match/file" \
  -H "Authorization: Bearer sk_live_xxx" \
  -F "[email protected]" -o wynik.csv

Streaming (NDJSON): POST /api/v1/match/stream — wyniki lecą zanim całość się zakończy.

Inne endpointy

GET /api/v1/health Status aplikacji
GET /api/v1/stats Statystyki bazy danych
GET /api/v1/wojewodztwa?q=... Autocomplete województw

Kody błędów

StatusZnaczenieDziałanie
200OK
400Nieprawidłowe parametrySprawdź detail w JSON
401Brak / zły klucz APISprawdź nagłówek Authorization
404Nie znalezionofound: false to norma
429Rate limitOdczytaj Retry-After, zwolnij
500Błąd serweraPonów z backoffem

FAQ

Czy API jest darmowe?

Tak — bez rejestracji masz 20 zapytania/min na IP. Plan Free z kluczem API (30 req/min, 3 000 req/mies) jest bezpłatny. Dla wyższego ruchu: Starter od 39 zł/mies (200 req/min, 100k req/mies).

Skąd pochodzą dane?

Punkty adresowe z PRG (GUGiK), TERYT z GUS, kody pocztowe z przypisania PRG + weryfikacja z Pocztą Polską. Import PRG dobowy, TERYT miesięczny.

Czy mogę używać API komercyjnie?

Tak. Dane PRG i TERYT są publiczne. Wymagamy podania źródła (Adresy.app) przy publicznej prezentacji danych.

Jak działa /match vs /lookup?

/match — fuzzy-match brudnych danych (literówki, skróty, OCR). /lookup — szybkie wyszukiwanie czystych danych (znany kod, znana ulica). Dla formularzy i importów użyj match, dla walidacji lookup.

Współrzędne w WGS84?

Tak — lat/lon w EPSG:4326 (WGS84). Wewnętrznie PUWG 1992. Parametr srid=2180 dla natywnego układu.

Co zrobić przy 429?

Odczytaj Retry-After, zaimplementuj wykładniczy backoff (1s, 2s, 4s...). Cache lokalny dla powtarzających się zapytań na 24h.

Czy dane są zgodne z RODO?

Tak. API zwraca dane adresowe (budynki, ulice, kody) — nie dane osobowe. Serwery w EU (Falkenstein, DE).