Documentation for the findAddress.io postcode lookup API.
REST • JSON • GET / POST

Documentation

Initial setup

If you're already here, then we assume you have already signed up to one of our postcode lookup plans. If not, head over to plans and signup. This is a quick process — login into PayPal after choosing your plan, accept the billing agreement (you won't be charged for 14 days if signing up to our trial), and you'll be directed to your account where you can get your API key.

Authentication

Update (16-02-2026): Authorised sites / referrer checks are now deprecated and no longer required in any circumstance. Existing integrations using referrer headers will continue to work, but you can safely remove them.

You only need an API key to use the API. You can pass your API key in one of two ways:

  • Query string: apiKey (recommended for simple tests / quick implementations)
  • Header: x-api-key (recommended for server-side usage)

Making a call

The API supports both GET and POST. You will need your API key, a postcode, and a house value.

GET (query string)

Use the endpoint below with apiKey, house, and postcode as query parameters:

https://findaddress.io/API/?apiKey=YOUR_API_KEY&house=10&postcode=SW1A2AA

We recommend removing spaces from the postcode (e.g. SW1A2AA). If you include spaces, URL-encode them (e.g. SW1A%202AA) or replace with +.

POST (form or JSON body)

Send the same keys via POST to:

https://findaddress.io/API/

Supported keys:

  • apiKey (string)
  • house (string)
  • postcode (string)
Important: The API reads parameters using $_REQUEST. For POST requests, the most compatible format is application/x-www-form-urlencoded (form encoded). JSON bodies are supported if you have enabled JSON parsing server-side.

Header authentication (still supported)

If you prefer, you can continue to pass your API key via the standard header:

x-api-key: YOUR_API_KEY

When using header auth, you can still pass house and postcode via query string or POST body.

Example cURL (GET + query string)

curl -X GET "https://findaddress.io/API/?apiKey=YOUR_API_KEY&house=10&postcode=SW1A2AA"

Example cURL (GET + header)

curl -X GET "https://findaddress.io/API/?house=10&postcode=SW1A2AA" \
  -H "x-api-key: YOUR_API_KEY"

Example cURL (POST + form encoded)

curl -X POST "https://findaddress.io/API/" \
  -H "content-type: application/x-www-form-urlencoded" \
  --data "apiKey=YOUR_API_KEY&house=10&postcode=SW1A2AA"

Example cURL (POST + JSON body)

curl -X POST "https://findaddress.io/API/" \
  -H "content-type: application/json" \
  -d '{"apiKey":"YOUR_API_KEY","house":"10","postcode":"SW1A2AA"}'

Call responses

All responses are returned as JSON and include your remaining daily calls and remaining monthly credits, plus a result and status code.

Successful response

{
"result": "Success",
"callsRemaining": 2928,
"creditsRemaining": 74928,
"latitude": "51.503540",
"longitude": "-0.127695",
"expandedAddress": {
"house": "10",
"street": "Downing street",
"locality": "",
"town": "London",
"district": "Greater london",
"county": "London",
"pCode": "SW1A 2AA"
},
"csvAddress": "10,Downing street,,London,Greater london,London,SW1A 2AA",
"statusCode": "200"
}

Partial Match

Partial matches are returned when we have no direct match in our primary dataset, but our redundancies provide an approximate match (for example, new developments or incomplete street data). Missing fields will be returned as blank.

{
"result": "Partial match",
"callsRemaining": 2928,
"creditsRemaining": 74928,
"latitude": "",
"longitude": "",
"expandedAddress": {
"house": "10",
"street": "",
"locality": "",
"town": "London",
"district": "Greater london",
"county": "London",
"pCode": "SW1A"
},
"csvAddress": "10,Downing street,,London,Greater london,London,SW1A",
"statusCode": "200"
}

Invalid postcode

This response is returned when the postcode is not valid. We validate against multiple sources (including defunct postcodes) and maintain redundancies for coverage. Ensure your postcode is correct and URL-safe (remove spaces or URL-encode them).

{
"result": "Failure",
"callsRemaining": "2913",
"creditsRemaining": "74913",
"errorMsg": "Postal Code Not Valid",
"statusCode": "400"
}

Unauthorised access

This response is returned when your API key is missing/invalid or you do not have an active subscription.

{
"result": "Failure",
"errorMsg": "Unauthorised access",
"statusCode": "401"
}

Exceeded limit responses

These responses are returned if you have exceeded your daily or monthly limits.

{
"result": "Failure",
"errorMsg": "You have exceeded your daily limit",
"statusCode": "429"
}
{
"result": "Failure",
"errorMsg": "You have exceeded your monthly limit",
"statusCode": "429"
}

Subscription lapsed

If your subscription is not renewed, access continues until your current billing period end date. After that you will receive:

{
"result": "Failure",
"errorMsg": "Your subscription ended on 15-02-2026",
"statusCode": "401"
}

Database error

If you receive this response, something has gone wrong at our end. Please contact us so we can investigate.

{
"result": "Failure",
"errorMsg": "Database Error #errNo. - Please contact support @
findaddress.io",
"statusCode": "500"
}

Code examples

Below are real-world UK address lookup API examples using PHP, JavaScript, Python, Laravel and cURL. Each example demonstrates how to validate a postcode and retrieve a complete UK address using findAddress.io.

PHP cURL GET UK Address Lookup API Example

$curl = curl_init();

$url = "https://findaddress.io/API/?apiKey=" . urlencode($apiKey) .
       "&house=" . urlencode($house) .
       "&postcode=" . urlencode(str_replace(' ', '', $postcode));

curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

PHP cURL GET Address API with API Key Header Example

$curl = curl_init();

$url = "https://findaddress.io/API/?house=" . urlencode($house) .
       "&postcode=" . urlencode(str_replace(' ', '', $postcode));

curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "content-type: application/json",
    "x-api-key: " . $apiKey
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

PHP cURL POST Form Encoded UK Address Lookup API Example

<?php

$apiKey   = "YOUR_API_KEY";
$house    = "10";
$postcode = "SW1A2AA";

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => "https://findaddress.io/API/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query([
        "apiKey"   => $apiKey,
        "house"    => $house,
        "postcode" => $postcode
    ]),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/x-www-form-urlencoded"
    ],
    CURLOPT_TIMEOUT => 30
]);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

PHP cURL POST JSON Address Lookup API Example

<?php

$data = [
    "apiKey"   => "YOUR_API_KEY",
    "house"    => "10",
    "postcode" => "SW1A2AA"
];

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => "https://findaddress.io/API/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json"
    ],
    CURLOPT_TIMEOUT => 30
]);

$response = curl_exec($ch);
echo $response;

curl_close($ch);
?>

JavaScript Fetch GET Address Lookup API Example

const apiKey = "YOUR_API_KEY";
const house = "10";
const postcode = "SW1A2AA";

fetch(`https://findaddress.io/API/?apiKey=${encodeURIComponent(apiKey)}&house=${encodeURIComponent(house)}&postcode=${encodeURIComponent(postcode)}`, {
  method: "GET"
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));

JavaScript Fetch POST Address Lookup API Example (Form Encoded)

const body = new URLSearchParams();
body.append("apiKey", "YOUR_API_KEY");
body.append("house", "10");
body.append("postcode", "SW1A2AA");

fetch("https://findaddress.io/API/", {
  method: "POST",
  headers: { "content-type": "application/x-www-form-urlencoded;charset=UTF-8" },
  body: body.toString()
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));

jQuery Address Lookup API Example (UK Postcode)

$.ajax({
  url: "https://findaddress.io/API/",
  method: "POST",
  data: {
    apiKey: "YOUR_API_KEY",
    house: "10",
    postcode: "SW1A2AA"
  }
}).done(function(resp){
  console.log(resp);
});

Axios UK Address Lookup API Example

const axios = require("axios");

axios.get("https://findaddress.io/API/", {
  params: {
    apiKey: "YOUR_API_KEY",
    house: "10",
    postcode: "SW1A2AA"
  }
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

Python Requests Address Lookup API Example

import requests

url = "https://findaddress.io/API/"
params = {"apiKey": "YOUR_API_KEY", "house": "10", "postcode": "SW1A2AA"}

response = requests.get(url, params=params)
print(response.json())

Laravel HTTP Client Address Lookup API Example (Form Encoded)

use Illuminate\Support\Facades\Http;

$response = Http::asForm()->post('https://findaddress.io/API/', [
    'apiKey' => 'YOUR_API_KEY',
    'house' => '10',
    'postcode' => 'SW1A2AA',
]);

return $response->json();

cURL Shell UK Address Lookup API Example

curl -X GET "https://findaddress.io/API/?apiKey=YOUR_API_KEY&house=10&postcode=SW1A2AA"