GET
/
api
/
v1
/
admin
/
landlords
Admin landlords list
curl --request GET \
  --url https://api.example.com/api/v1/admin/landlords
import requests

url = "https://api.example.com/api/v1/admin/landlords"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://api.example.com/api/v1/admin/landlords', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/admin/landlords",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

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

curl_close($curl);

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

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.example.com/api/v1/admin/landlords"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/admin/landlords")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.example.com/api/v1/admin/landlords")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body

Overview

Lists the curated landlords reference list used by the onboarding landlord autocomplete. Unlike the onboarding endpoint, this admin view includes inactive rows and supports pagination. Available to any admin role — read-only. The list is first populated by the pnpm seed:landlords script (a vendored data file mirroring the Regulator of Social Housing register — ~1,580 councils + private registered providers) and then curated here.

Authentication

Bearer <accessToken> with scope: 'admin' required (requireAdmin).
Read-only — all admin roles (SUPER, MODERATOR, FINANCE) may list. Create and update are role-gated to SUPER and MODERATOR.

Query parameters

NameTypeRequiredNotesExample
qstringnoCase-insensitive substring match on the name (1..100 chars).camden
typeenumnoCOUNCIL or HOUSING_ASSOCIATION.COUNCIL
activebooleannoFilter by active flag. Omit for all.false
limitintegernoPage size, 1..100. Default 25.50
skipintegernoOffset for pagination. Default 0.50

Response — 200 OK

FieldTypeNotes
itemsarrayLandlord rows (below), name-sorted.
totalintegerTotal matching the filter (across all pages).

Landlord row

FieldTypeNotes
idstringLandlord ObjectId.
namestringCanonical name.
typeenumCOUNCIL | HOUSING_ASSOCIATION.
activebooleanInactive rows are hidden from the onboarding autocomplete.
createdAtstringISO timestamp.
updatedAtstringISO timestamp.
{
  "items": [
    {
      "id": "665f0a1b2c3d4e5f60718293",
      "name": "London Borough of Camden",
      "type": "COUNCIL",
      "active": true,
      "createdAt": "2026-06-05T10:00:00.000Z",
      "updatedAt": "2026-06-05T10:00:00.000Z"
    }
  ],
  "total": 1
}

Error responses

StatusCodeMeaning
400VALIDATION_FAILEDBad type, active, limit, or skip.
401UNAUTHENTICATEDMissing, malformed, expired, or non-admin-scope token.

See also

curl

curl "https://api.swappr.co.uk/api/v1/admin/landlords?q=camden&active=true&limit=50" \
  -H "Authorization: Bearer $ADMIN_ACCESS_TOKEN"