Skip to main content
GET
Look up a postcode / ZIP code within a country and get back every matching record. Use this to confirm that a user-supplied postcode appears in the dataset.
Free on every plan, including Community. Exact lookup counts against your normal daily/monthly quota like any other request. Paginated listing and search use Get Postcodes by Country and require a Supporter+ plan — exact lookup has no such gate.
This is informational postcode data, not an address verification or mail-deliverability service. A match confirms the code exists in the dataset — it does not confirm a delivery point, standardize an address, or guarantee mail will arrive.

Path parameters

string
required
ISO 3166-1 alpha-2 country code, case-insensitive (e.g., US, GB, IN). Numeric country IDs and ISO3 codes are not accepted on this endpoint.
string
required
The postcode to look up (e.g., 110001, GY1 1AA, 11104). 1-20 characters after trimming outer whitespace. Matching is case-insensitive and tolerant of repeated internal spaces — gy1 1aa matches GY1 1AA — but the code returned in the response preserves its original spacing and casing.

Authentication

string
required
Your API key.

Why the response is an array

A postcode is not always unique to one place. The same code can legitimately cover more than one locality, so this endpoint returns every matching record instead of picking one — an empty result is a 404, never an empty success.
array
Every postcode record matching the code, in ascending id order.
string
Unique identifier for the postcode record, returned as a numeric string (not a JSON number) for 64-bit safety.
string
The postcode as stored, with original spacing and casing preserved.
string
ISO2 country code.
string | null
State/province code, when the postcode is linked to one.
string | null
Human-readable place name associated with the postcode.
string | null
A source-provided classification of the postcode, not a fixed enum — see Postcode types for the values currently in the dataset. Filtering on an unrecognized value just matches zero rows rather than erroring.
string
Country ID, as a numeric string. Requires Supporter+.
string | null
State ID, as a numeric string. Requires Supporter+.
string | null
City ID, as a numeric string, when the postcode is linked to a specific city. Requires Supporter+.
number | null
Latitude of the postcode area. Requires Supporter+.
number | null
Longitude of the postcode area. Requires Supporter+.
string | null
Originating data source, for attribution and license tracking. Requires Professional+.
string | null
Wikidata Q-ID for cross-referencing. Requires Professional+.
string
The country code you queried, uppercased.
string
The normalized code used for matching (trimmed, uppercased, with repeated spaces collapsed).
integer
Number of records in data.
Fields above Basic are stripped for lower plans, not just hidden — a Community or Starter key never receives country_id, state_id, city_id, latitude, or longitude in the response body. See Tier-based field availability below. id and every foreign-key field are returned as numeric strings rather than JSON numbers — parse them as strings in your client.
200 - Duplicate exact match (Supporter+)

Tier-based field availability

See Pricing for plan details.

Caching and conditional requests

Every response sets ETag, Cache-Control, and X-Cache (HIT/MISS), cached for 24 hours. Send the last ETag back as If-None-Match to get a bodyless 304 when nothing changed instead of re-downloading the result:

Errors

string
Distinguishes the three 404 cases below. Check this instead of parsing message.
404 - Unknown country
404 - No coverage for this country
404 - Code has no match
400 - Invalid code
code is also rejected as empty, or for containing a /, \, or control character. See Errors & Rate Limits for the 401/429 shapes and usage headers common to every endpoint.

Get Postcodes by Country

Page through or search a country’s postcodes. Requires Supporter+.

Postcodes Reference

Coverage stats, postcode types, and self-hosted query examples.