Postcodes.io API

Beginner's Pick Geocoding / No Auth Required Beginner HTTPS CORS
Free to Use
79 B
Measured Score 0 50 100 Speed 28/30 Consistency 8/20 Security 20/20 Browser access 15/15 Transparency 8/15 TESTED 2026-08-10

Overview

Postcodes.io is a free, open-source UK postcode lookup API that returns geolocation data, administrative region info, and coordinates. You can look up a single postcode or bulk-query multiple postcodes at once with no API key required. It is widely used for validating and enriching UK address data.

Beginner Tip

Send POST requests to /postcodes with a JSON body containing an array of up to 100 postcodes for efficient bulk lookups. For quick tests, a simple GET request works too.

Measurement Record

What actually happened when we called this API from our own infrastructure. Every value below was recorded by the request, not copied from the provider's documentation.

Request
GET https://api.postcodes.io/postcodes/SW1A1AA
Result
HTTP 200 · application/json · 1,943 bytes · compressed
Response time
37 ms (median of 3) · fastest 27 ms
Transport
TLSv1.3 · TLS_AES_256_GCM_SHA384 · certificate issued by Google Trust Services
Browser CORS
Allowed — Access-Control-Allow-Origin: *
Served by
cloudflare
Recorded
2026-08-10

Fields Returned

Top-level fields present in the response we captured, with the type and value we actually received.

Field Type Value received
postcode string SW1A 1AA
quality integer 1
eastings integer 529090
northings integer 179645
country string England
nhs_ha string London
longitude number -0.141563
latitude number 51.50101
european_electoral_region string London
primary_care_trust string Westminster
region string London
lsoa string Westminster 018C
msoa string Westminster 018
incode string 1AA

Captured Response

Captured from a real request to https://api.postcodes.io/postcodes/SW1A1AA on 2026-08-10. Long arrays and nested objects are truncated to keep the shape readable.

JSON Response · Captured
{
  "status": 200,
  "result": {
    "postcode": "SW1A 1AA",
    "quality": 1,
    "eastings": 529090,
    "northings": 179645,
    "country": "England",
    "nhs_ha": "London",
    "longitude": -0.141563,
    "latitude": 51.50101,
    "european_electoral_region": "London",
    "primary_care_trust": "Westminster",
    "region": "London",
    "lsoa": "Westminster 018C",
    "msoa": "Westminster 018",
    "incode": "1AA",
    "…": "(32 more fields)"
  }
}

Field Reference

postcode The validated and formatted UK postcode.
latitude Latitude of the postcode centroid in decimal degrees.
longitude Longitude of the postcode centroid in decimal degrees.
region Administrative region of England the postcode belongs to.
country Country within the UK (England, Scotland, Wales, or Northern Ireland).

Implementation Example

Calls a real endpoint of this API. Replace any placeholder credentials with your own key.

Request
const url = "https://api.postcodes.io/postcodes/SW1A1AA";
const response = await fetch(url);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();
console.log(data);

What Can You Build?

Note: These code examples are AI-generated and unverified. Always refer to the official API documentation for accurate usage.

How This API Fails

We deliberately sent this API a broken request and recorded exactly what came back on 2026-08-10. Knowing the shape of an error before you hit it makes error handling much easier to write.

HTTP 404 Requesting a path that does not exist application/json
{
  "status": 404,
  "error": "Resource not found"
}

Common Errors & Troubleshooting

Generated guidance based on this API's documentation, not observed by us. Treat it as a starting point and check against the provider's own error reference.

404 Invalid postcode The postcode does not exist or is in an invalid format.
UK postcodes follow a format like SW1A 1AA. Remove extra spaces and ensure the format is correct before querying.
CORS error from browser Browser security policies may block the request depending on your setup.
The API supports CORS, so this is usually a local dev environment issue. Try using a proxy in development.
Null result for terminated postcode Some old UK postcodes have been retired and return null.
Use the /terminated_postcodes endpoint to check if the postcode was decommissioned and get its last known coordinates.

Measured Score Breakdown

Live HTTP request to the API endpoint

Speed 28/30
Consistency 8/20
Security 20/20
Browser access 15/15
Transparency 8/15
Endpoint Response Time 37ms

Fully tested on Aug 10, 2026

Technical Specifications

Auth No Auth
HTTPS REQUIRED
CORS YES
Category Geocoding
Difficulty Beginner
Endpoint last called: 2026-08-10

Similar APIs

View All →