Properties
| Name | Type | Description |
|---|---|---|
| data | object | |
| meta | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/lettance-com/json-schema/lettance-com-compare-response-schema.json",
"title": "CompareResponse",
"x-generated": "2026-10-30",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/lettance-com-openapi.json#/components/schemas/CompareResponse",
"type": "object",
"properties": {
"data": {
"$ref": "#/$defs/Comparison"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"data",
"meta"
],
"$defs": {
"AreaMarket": {
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"council": {
"type": [
"string",
"null"
]
},
"councilCode": {
"type": "string",
"description": "ONS local authority code"
},
"rent": {
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "available"
},
"area": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"code",
"name"
]
},
"period": {
"type": "string",
"description": "The month the figure describes, YYYY-MM."
},
"averageMonthlyRentGbp": {
"type": "number"
},
"annualChangePct": {
"type": [
"number",
"null"
]
},
"byBedrooms": {
"type": "object",
"properties": {
"one": {
"type": [
"number",
"null"
]
},
"two": {
"type": [
"number",
"null"
]
},
"three": {
"type": [
"number",
"null"
]
},
"fourPlus": {
"type": [
"number",
"null"
]
}
},
"required": [
"one",
"two",
"three",
"fourPlus"
]
},
"england": {
"anyOf": [
{
"type": "object",
"properties": {
"averageMonthlyRentGbp": {
"type": "number"
},
"annualChangePct": {
"type": [
"number",
"null"
]
}
},
"required": [
"averageMonthlyRentGbp",
"annualChangePct"
]
},
{
"type": "null"
}
]
},
"source": {
"$ref": "#/$defs/MarketSource"
}
},
"required": [
"status",
"area",
"period",
"averageMonthlyRentGbp",
"annualChangePct",
"byBedrooms",
"england",
"source"
]
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "unavailable"
},
"reason": {
"type": "string"
},
"source": {
"$ref": "#/$defs/MarketSource"
}
},
"required": [
"status",
"reason",
"source"
]
}
]
},
"sales": {
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "available"
},
"district": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Postcode district, e.g. SE15."
},
"medianPriceGbp": {
"type": "number"
},
"sales": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"code",
"medianPriceGbp",
"sales"
]
},
"window": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"to": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
}
},
"required": [
"from",
"to"
]
},
"source": {
"$ref": "#/$defs/MarketSource"
}
},
"required": [
"status",
"district",
"window",
"source"
]
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "unavailable"
},
"reason": {
"type": "string"
},
"window": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"to": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
}
},
"required": [
"from",
"to"
]
},
"source": {
"$ref": "#/$defs/MarketSource"
}
},
"required": [
"status",
"reason",
"window",
"source"
]
}
]
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"postcode",
"council",
"councilCode",
"rent",
"sales",
"limitations"
],
"description": "ONS private rents for the local authority and HM Land Registry sale prices for the postcode district, from a dated snapshot. Area figures, not a valuation."
},
"CheckResult": {
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"ward": {
"type": [
"string",
"null"
]
},
"council": {
"type": [
"string",
"null"
]
},
"household": {
"type": "string",
"enum": [
"single",
"small_hmo",
"large_hmo"
]
},
"licence": {
"type": "object",
"properties": {
"needed": {
"type": "string",
"enum": [
"yes",
"no",
"check"
],
"description": "check means the answer depends on something a postcode cannot settle, or the council is not researched yet. It never means no."
},
"summary": {
"type": "string"
},
"schemes": {
"type": "array",
"items": {
"$ref": "#/$defs/CheckScheme"
}
}
},
"required": [
"needed",
"summary",
"schemes"
]
},
"register": {
"anyOf": [
{
"$ref": "#/$defs/RegisterWindow"
},
{
"type": "null"
}
]
},
"registerSources": {
"type": "array",
"items": {
"type": "string",
"description": "Absolute URL"
}
},
"registerCheckedAt": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"planningSource": {
"type": "string",
"description": "Absolute URL"
},
"planningAvailability": {
"type": "object",
"properties": {
"floodZone": {
"type": "string",
"enum": [
"available",
"unavailable"
]
},
"conservationAreas": {
"type": "string",
"enum": [
"available",
"unavailable"
]
},
"article4": {
"type": "string",
"enum": [
"available",
"unavailable"
]
}
},
"required": [
"floodZone",
"conservationAreas",
"article4"
]
},
"openQuestions": {
"type": "array",
"items": {
"type": "string"
}
},
"floodZone": {
"anyOf": [
{
"type": "object",
"properties": {
"level": {
"anyOf": [
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
]
},
"source": {
"type": "string"
}
},
"required": [
"level",
"source"
]
},
{
"type": "null"
}
]
},
"conservationAreas": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "null when the dataset was unavailable; empty when the lookup found none at the postcode centre."
},
"article4Directions": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"url": {
"anyOf": [
{
"type": "string",
"description": "Absolute URL"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"description",
"url"
]
}
},
{
"type": "null"
}
]
},
"councilPage": {
"anyOf": [
{
"type": "string",
"description": "Absolute URL"
},
{
"type": "null"
}
]
},
"researched": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
],
"description": "When the council's licensing was researched; null if not researched yet."
},
"verified": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
]
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"postcode",
"ward",
"council",
"household",
"licence",
"register",
"registerSources",
"registerCheckedAt",
"planningSource",
"planningAvailability",
"openQuestions",
"floodZone",
"conservationAreas",
"article4Directions",
"councilPage",
"researched",
"verified",
"limitations"
]
},
"CheckScheme": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"selective",
"additional",
"mandatory_hmo"
]
},
"status": {
"type": "string",
"enum": [
"in_force",
"approved_not_started",
"consultation",
"expired",
"quashed",
"revoked"
]
},
"covers": {
"type": "string",
"enum": [
"yes",
"check"
],
"description": "yes: the postcode's ward is inside the scheme. check: confirm the boundary or property criteria with the council."
},
"reason": {
"type": "string"
},
"start": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
]
},
"end": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
],
"description": "The last day the scheme is certainly in force."
},
"ceasesOn": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
],
"description": "The notice's \"ceases to have effect on\" date, the day after end, when recorded. On that day covers is check."
},
"endDateUncertainUntil": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
],
"description": "Last disputed day when primary sources conflict. From ceasesOn through this date covers is check, not proof that a licence is required or unnecessary."
},
"feeGbp": {
"description": "The published standard figure, which may be per room or unit rather than a total. Read feeNotes for the charging basis, supplements and conditions. No property-specific total has been calculated.",
"type": [
"number",
"null"
]
},
"feeNotes": {
"description": "The council research's fee conditions, including any charging unit, supplements or discounts. Null means these details have not been recorded.",
"type": [
"string",
"null"
]
},
"licenceLengthYears": {
"description": "The published licence term in years, where recorded. This does not turn feeGbp into a total charge for that period.",
"type": [
"number",
"null"
]
},
"appliesTo": {
"type": "string"
},
"exemptions": {
"type": [
"string",
"null"
]
},
"confidence": {
"type": "string",
"enum": [
"high",
"medium",
"low"
],
"description": "How sure the research is. Medium or low means read the linked source before relying on it."
},
"notes": {
"type": [
"string",
"null"
]
},
"apply": {
"anyOf": [
{
"type": "string",
"description": "Absolute URL"
},
{
"type": "null"
}
]
},
"sources": {
"type": "array",
"items": {
"type": "string",
"description": "Absolute URL"
}
}
},
"required": [
"name",
"type",
"status",
"covers",
"reason",
"start",
"end",
"ceasesOn",
"endDateUncertainUntil",
"feeGbp",
"feeNotes",
"licenceLengthYears",
"appliesTo",
"exemptions",
"confidence",
"notes",
"apply",
"sources"
]
},
"Comparison": {
"type": "object",
"properties": {
"household": {
"type": "string",
"enum": [
"single",
"small_hmo",
"large_hmo"
]
},
"postcodes": {
"type": "array",
"items": {
"type": "string"
}
},
"addresses": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"status": {
"type": "string",
"const": "ok"
},
"check": {
"$ref": "#/$defs/CheckResult"
},
"market": {
"$ref": "#/$defs/AreaMarket"
}
},
"required": [
"postcode",
"status",
"check",
"market"
]
},
{
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"not_found",
"outside_england",
"unavailable"
]
},
"error": {
"type": "string"
}
},
"required": [
"postcode",
"status",
"error"
]
}
]
}
},
"comparison": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"enum": [
"licence",
"register",
"floodZone",
"conservationAreas",
"article4Directions",
"averageRent",
"medianPrice"
]
},
"label": {
"type": "string"
},
"source": {
"$ref": "#/$defs/FieldSource"
},
"values": {
"type": "array",
"items": {
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"value": {
"description": "The value, or \"unknown\" when the source cannot settle it. Unknown never means no."
},
"unknown": {
"type": "string"
},
"detail": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"postcode",
"value"
]
}
}
},
"required": [
"field",
"label",
"source",
"values"
]
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"household",
"postcodes",
"addresses",
"comparison",
"limitations"
],
"description": "Two to four postcodes side by side. Each field names its source, licence and dates."
},
"FieldSource": {
"type": "object",
"properties": {
"publisher": {
"type": "string"
},
"dataset": {
"type": "string"
},
"url": {
"type": "string",
"description": "Absolute URL"
},
"licence": {
"type": [
"string",
"null"
]
},
"licenceUrl": {
"anyOf": [
{
"type": "string",
"description": "Absolute URL"
},
{
"type": "null"
}
]
},
"attribution": {
"type": [
"string",
"null"
]
},
"released": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
]
},
"obtained": {
"anyOf": [
{
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
{
"type": "null"
}
],
"description": "Null for live lookups; see note."
},
"note": {
"type": "string"
}
},
"required": [
"publisher",
"dataset",
"url",
"licence",
"licenceUrl",
"attribution",
"released",
"obtained",
"note"
]
},
"MarketSource": {
"type": "object",
"properties": {
"dataset": {
"type": "string"
},
"publisher": {
"type": "string"
},
"url": {
"type": "string",
"description": "The dataset's page."
},
"files": {
"type": "array",
"items": {
"type": "string",
"description": "Absolute URL"
},
"description": "The files the snapshot was compiled from."
},
"released": {
"type": "string",
"description": "When the publisher released the files used."
},
"obtained": {
"type": "string",
"description": "When Lettance downloaded them."
},
"measure": {
"type": "string"
},
"licence": {
"type": "string"
},
"licenceUrl": {
"type": "string",
"description": "Absolute URL"
},
"attribution": {
"type": "string",
"description": "The attribution statement to show with the figure."
}
},
"required": [
"dataset",
"publisher",
"url",
"files",
"released",
"obtained",
"measure",
"licence",
"licenceUrl",
"attribution"
],
"description": "Where an area market figure comes from. Show the attribution with the figure."
},
"Meta": {
"type": "object",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "string",
"description": "Absolute URL"
},
"description": "Distinct upstream sources this response draws on: legislation, GOV.UK guidance, council pages and data services."
},
"coverage": {
"type": "string",
"description": "How much of England the council licensing research covers today."
},
"notice": {
"type": "string",
"description": "How to use this answer. It is information, not legal advice."
},
"catalogueDate": {
"type": "string",
"description": "The catalogue edition this response was built from."
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"description": "Absolute URL"
},
"openapi": {
"type": "string",
"description": "Absolute URL"
},
"html": {
"description": "The human page for this answer.",
"type": "string"
},
"markdown": {
"description": "The same page as Markdown, for agents.",
"type": "string"
}
},
"required": [
"documentation",
"openapi"
]
}
},
"required": [
"sources",
"coverage",
"notice",
"catalogueDate",
"links"
],
"description": "Sources, coverage and links. Present on every response, including errors."
},
"RegisterWindow": {
"type": "object",
"properties": {
"region": {
"type": "string"
},
"opens": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"deadline": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"earlyRegistrationFrom": {
"type": "string",
"description": "ISO date, YYYY-MM-DD"
},
"feeGbp": {
"type": "number"
},
"status": {
"type": "string",
"const": "planned"
},
"note": {
"type": "string"
},
"rule": {
"type": "string",
"description": "Absolute URL"
}
},
"required": [
"region",
"opens",
"deadline",
"earlyRegistrationFrom",
"feeGbp",
"status",
"note",
"rule"
],
"description": "The planned landlord register (Private Rented Sector Database) window for the region. The regulations are in draft."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/lettance-com-compare-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.