Tuxa
v1

Tuxa API

Programmatic access to UK property rental licensing data. Check whether any UK address falls within a selective or additional licensing scheme, directly from your application.

REST APIJSON responsesCredit-based1 credit per lookup

Authentication

All API requests must include your API key in the Authorization header using the Bearer scheme. API keys begin with tuxa_.

http
Authorization: Bearer tuxa_your_api_key_here

API keys are tied to your Tuxa account and deduct from your credit balance. Keep your key secret and never expose it in client-side code.

Pricing and Credits

The Tuxa API uses a credit-based pricing model. Each successful POST /lookup request deducts one credit from your balance. Credits never expire and can be purchased at any time.

PackageCreditsPricePer lookup
Starter50£4.9910p
Standard200£14.997.5p
Professional500£29.996p
Enterprise2,000£99.995p

Base URL

All API endpoints are relative to the following base URL:

url
https://tuxa.co.uk/api/v1

Endpoints

POST/lookup

Check whether a UK property address falls within a selective or additional licensing scheme. Provide either a full address string or precise coordinates. Deducts 1 credit per successful request.

Request body

FieldTypeRequiredDescription
addressstringConditionalFull UK property address. Required if coordinates are not provided.
latitudenumberConditionalWGS84 latitude. Required together with longitude if address is not provided.
longitudenumberConditionalWGS84 longitude. Required together with latitude if address is not provided.

Example request

bash
curl -X POST https://tuxa.co.uk/api/v1/lookup \
  -H "Authorization: Bearer tuxa_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"address": "14 Coldharbour Lane, London SE5 9NR"}'

Example response

json
{
  "address": "14 Coldharbour Lane, London SE5 9NR",
  "coordinates": {
    "latitude": 51.4675,
    "longitude": -0.0922
  },
  "council": {
    "id": 42,
    "name": "London Borough of Southwark",
    "code": "southwark"
  },
  "licensing": {
    "requiresLicense": true,
    "licenseType": "selective",
    "schemes": [
      {
        "id": 87,
        "name": "Southwark Selective Licensing Scheme",
        "type": "Selective",
        "startDate": "2023-04-01",
        "endDate": "2028-03-31",
        "description": "Borough-wide selective licensing scheme requiring all privately rented properties to be licensed.",
        "moreInfoUrl": "https://www.southwark.gov.uk/housing/private-sector-housing/licensing"
      }
    ]
  },
  "meta": {
    "creditsRemaining": 49,
    "checkedAt": "2026-03-11T14:22:01.000Z"
  }
}

License type values

ValueMeaning
noneNo licensing scheme applies to this property
selectiveThe property falls within a selective licensing area
additionalThe property falls within an additional (HMO) licensing area
bothThe property falls within both selective and additional licensing areas
GET/credits

Returns the current credit balance for the authenticated API key. Does not deduct any credits.

Example request

bash
curl https://tuxa.co.uk/api/v1/credits \
  -H "Authorization: Bearer tuxa_your_api_key_here"

Example response

json
{
  "creditsRemaining": 49
}

Error Handling

The API uses standard HTTP status codes. All error responses include an error field and a human-readable message.

StatusErrorDescription
400Bad RequestMissing required fields. Provide either address or coordinates.
401UnauthorizedMissing, invalid, or revoked API key.
402Insufficient CreditsYour credit balance is zero. Purchase more credits to continue.
404Council Not FoundThe coordinates do not correspond to a known local authority in England or Wales.
422Geocoding FailedThe address could not be geocoded. Check the address and try again.
429Too Many RequestsRate limit exceeded. Maximum 60 requests per minute per API key.
500Internal Server ErrorAn unexpected error occurred. Please try again or contact support.

Error response format

json
{
  "error": "Insufficient Credits",
  "message": "You have no credits remaining. Purchase more at https://tuxa.co.uk/credits",
  "creditsRemaining": 0
}

Code Examples

JavaScript / Node.js

javascript
const response = await fetch('https://tuxa.co.uk/api/v1/lookup', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer tuxa_your_api_key_here',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    address: '14 Coldharbour Lane, London SE5 9NR',
  }),
});

const data = await response.json();

if (data.licensing.requiresLicense) {
  console.log(`License required: ${data.licensing.licenseType}`);
  data.licensing.schemes.forEach(scheme => {
    console.log(`  - ${scheme.name} (${scheme.type})`);
  });
} else {
  console.log('No licensing scheme applies to this property.');
}
console.log(`Credits remaining: ${data.meta.creditsRemaining}`);

Python

python
import requests

response = requests.post(
    'https://tuxa.co.uk/api/v1/lookup',
    headers={
        'Authorization': 'Bearer tuxa_your_api_key_here',
        'Content-Type': 'application/json',
    },
    json={
        'address': '14 Coldharbour Lane, London SE5 9NR',
    }
)

data = response.json()

if data['licensing']['requiresLicense']:
    print(f"License required: {data['licensing']['licenseType']}")
    for scheme in data['licensing']['schemes']:
        print(f"  - {scheme['name']} ({scheme['type']})")
else:
    print('No licensing scheme applies to this property.')

print(f"Credits remaining: {data['meta']['creditsRemaining']}")

PHP

php
<?php
$ch = curl_init('https://tuxa.co.uk/api/v1/lookup');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer tuxa_your_api_key_here',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'address' => '14 Coldharbour Lane, London SE5 9NR',
    ]),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

if ($response['licensing']['requiresLicense']) {
    echo "License required: " . $response['licensing']['licenseType'] . "\n";
} else {
    echo "No licensing scheme applies.\n";
}
?>

Lookup by coordinates

bash
curl -X POST https://tuxa.co.uk/api/v1/lookup \
  -H "Authorization: Bearer tuxa_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 51.4675,
    "longitude": -0.0922
  }'

Manage Your API Keys

Create and revoke API keys from your account below. Each key is shown in full only once at creation time. Store it securely.

API Keys
Keys are linked to your account credit balance. Revoking a key immediately invalidates it.