Wyszukaj adres w bazie PRG
Wpisz adres powyżej lub spróbuj jednego z przykładów:
Kliknij lub przeciągnij plik
CSV, XLSX, TXT, JSON
Narzędzia adresowe
Wyszukiwarka miejscowości, ulic, kodów pocztowych, TERYT, okręgów wyborczych i szkół. Dane z PRG (GUGiK), TERYT (GUS), RSPO (MEiN) i PKW.
Kody pocztowe i TERYT
Miejscowości
Wyszukaj miejscowość w rejestrze TERYT SIMC
Ulice w miejscowości
Wyszukaj ulicę w wybranej miejscowości
Kod pocztowy
Sprawdź adresy przypisane do kodu pocztowego
Kod dla adresu
Znajdź kod pocztowy dla podanego adresu
Wyszukaj TERYT
Znajdź kody TERYT (SIMC, ULIC) dla adresu
Dekoduj TERYT
Wpisz SIMC, ULIC lub pełny kod SIMC#ULIC#NR
Dane publiczne
Okręgi wyborcze
Wyszukaj obwody głosowania, okręgi rad gmin, powiatów i sejmików
Szkoły i placówki oświatowe
Dane: RSPO/SIO 2025/2026
Adres z mapy
Kliknij na mapę, aby znaleźć najbliższe adresy
Adresy w pobliżu
Wklej współrzędne w dowolnym formacie
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.
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 | 3 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).
| Parametr | Typ | Opis |
|---|---|---|
kod | string | Kod pocztowy NN-NNN (wymagany) |
limit | int | Max 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. Dekodowanie TERYT
GET /api/v1/lookup/teryt/decode
Zamienia kody TERYT na pełne dane. Auto-detect: SIMC (7 cyfr), ULIC (5 cyfr), format SIMC#ULIC#NR.
curl -s "https://api.adresy.app/api/v1/lookup/teryt/decode?kod=0986283"
5. Adresy w pobliżu (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.
| Parametr | Typ | Opis |
|---|---|---|
q | string | Adres do dopasowania (wymagany) |
wojewodztwo | string | Ograniczenie do województwa |
min_score | float | Min. 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
| Status | Znaczenie | Działanie |
|---|---|---|
200 | OK | — |
400 | Nieprawidłowe parametry | Sprawdź detail w JSON |
401 | Brak / zły klucz API | Sprawdź nagłówek Authorization |
404 | Nie znaleziono | found: false to norma |
429 | Rate limit | Odczytaj Retry-After, zwolnij |
500 | Błąd serwera | Ponów z backoffem |
FAQ
Czy API jest darmowe?
Tak — bez rejestracji masz 3 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).