OpenPLZ API
Free postal code API with no key: streets and localities for Germany, Austria, Switzerland and Liechtenstein with full administrative hierarchy. Tested.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the OpenPLZ API?
OpenPLZ is a free, key-free API providing postal code and street directory data for Germany, Austria, Switzerland and Liechtenstein, including the full administrative hierarchy of municipality, district and federal state.
German-speaking countries share the PLZ postal code system, and OpenPLZ covers all four in one API with a consistent schema — which is unusual, since most postal APIs are single-country.
The administrative depth is what distinguishes it: alongside the locality name you get the municipality, district and federal state with their official statistical keys, which matters for anything involving German regional administration.
Quick facts
- Base URL
https://openplzapi.org- Authentication
- No API key required.
- Rate limit
- No published hard limit; fair use expected.
- Pricing
- Free and open source, using official open data.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the OpenPLZ API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Look up a German postal code
GET https://openplzapi.org/de/Localities?postalCode=10117
curl 'https://openplzapi.org/de/Localities?postalCode=10117'const res = await fetch("https://openplzapi.org/de/Localities?postalCode=10117");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://openplzapi.org/de/Localities?postalCode=10117", timeout=20)
res.raise_for_status()
print(res.json())[
{
"postalCode": "10117",
"name": "Berlin",
"municipality": {
"key": "11000000",
"name": "Berlin, Stadt",
"type": "Kreisfreie Stadt"
},
"federalState": {
"key": "11",
"name": "Berlin"
}
}
]2. Look up an Austrian postal code
GET https://openplzapi.org/at/Localities?postalCode=1010
curl 'https://openplzapi.org/at/Localities?postalCode=1010'const res = await fetch("https://openplzapi.org/at/Localities?postalCode=1010");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://openplzapi.org/at/Localities?postalCode=1010", timeout=20)
res.raise_for_status()
print(res.json())[
{
"key": "17223",
"postalCode": "1010",
"name": "Wien, Innere Stadt",
"municipality": {
"key": "90001",
"code": "90101",
"name": "Wien",
"status": "Statutarstadt"
},
"district": {
"key": "900",
"code": "901",
"name": "Wien 1., Innere Stadt"
},
"federalProvince": {
"key": "9",
"name": "Wien"
}
},
{
"key": "17223",
"postalCode": "1010",
"name": "Wien, Innere Stadt",
"municipality": {
"key": "90001",
"code": "90401",
"name": "Wien",
"status": "Statutarstadt"
},
"district": {
"key": "900",
"code": "904",
"name": "Wien 4., Wieden"
},
"federalProvince": {
"key": "9",
"name": "Wien"
}
},
{
"key": "17223",
"postalCode": "1010",
"name": "Wien, Innere Stadt",
"municipality": {
"key": "90001",
"code": "90701",
"name": "Wien",
"status": "Statutarstadt"
},
"district": {
"key": "900",
"code": "907",
"name": "Wien 7., Neubau"
},
"federalProvince": {
"key": "9",
"name": "Wien"
}
},
{
"key": "17223",
"postalCode": "1010",
"name": "Wien, Innere Stadt",
"municipality": {
"key": "90001",
"code": "90901",
"name": "Wien",
"status": "Statutarstadt"
},
"district": {
"key": "900",
"code": "909",
"name": "Wien 9., Alsergrund"
},
"federalProvince": {
"key": "9",
"name": "Wien"
}
}
]Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
<country>/Localities | path | Required | Country code path: de, at, ch or li. de/Localities |
postalCode | string | Optional | Postal code to look up. 10117 |
name | string | Optional | Locality name search. Berlin |
<country>/Streets | path | Optional | Street directory search. de/Streets |
page / pageSize | integer | Optional | Pagination controls. 1 |
Response fields
postalCodestring- The postal code.
namestring- Locality name.
municipalityobject- Municipality with official key, name and type.
districtobject- District (Kreis) with key and name.
federalStateobject- Federal state (Bundesland) with key and name.
(AT) municipality.codestring- Austrian municipality code, where applicable.
What you can build with the OpenPLZ API
- Autofill German, Austrian or Swiss address forms from a postal code
- Validate postal codes across the DACH region with one API
- Map addresses to official administrative regions
- Build street-level address validation
Common errors and how to fix them
Empty array
The postal code does not exist in that country.
Fix: The country is a path segment — querying a German code under /at/ returns nothing.
Multiple localities per code
One postal code can cover several localities.
Fix: Expect an array; take the municipality and state from the first entry, which are consistent.
Wrong country path
de, at, ch and li are separate.
Fix: Choose the path segment matching the code's country.
OpenPLZ API — frequently asked questions
Is OpenPLZ free?
Yes, completely free and open source with no API key, built on official open data.
Which countries does it cover?
Germany, Austria, Switzerland and Liechtenstein — the whole German-speaking PLZ area — in one consistent schema.
Does it include street-level data?
Yes, the /Streets endpoints provide a street directory alongside locality lookup, which supports full address validation.
Why does one postal code return several results?
A postal code can span multiple localities. The municipality, district and federal state are consistent across them, so take those from the first entry.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
OpenPLZ is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.