# HM Land Registry > The non-ministerial government department that registers the ownership of land and property in England and Wales, guaranteeing title to more than 26 million registered estates. HM Land Registry runs three distinct API estates that should never be conflated: a genuinely open, anonymous linked-data platform; a self-serve keyed bulk-data service whose datasets are licensed and often chargeable; and the Business Gateway, the mutual-TLS B2B channel through which conveyancers lodge applications to change the register. Generated by API Evangelist from the HM Land Registry APIs.json index on 2026-07-26. Source of truth: https://raw.githubusercontent.com/api-evangelist/hm-land-registry/refs/heads/main/apis.yml ## Before you call anything - The open linked-data estate needs no key, no account and no licence. Everything under `https://landregistry.data.gov.uk/` is anonymous and free under the Open Government Licence v3.0, with a required Crown copyright attribution statement. Verified live 2026-07-26. - The Use land and property data service issues an API key automatically when you create an account, sent as the `Authorization` header. Every download endpoint additionally requires that you have signed the licence for that specific dataset. Some datasets are chargeable: the Registered Leases commercial licence is £5,000 a year plus VAT, and the National Polygon Service — which holds the title boundary polygons and the title-number-to-UPRN lookup — is £20,000 a year plus VAT. - The Business Gateway is not self-serve and cannot be tried. `businessgateway.landregistry.gov.uk` and `bgtest.landregistry.gov.uk` refuse a TLS handshake without an HMLR-issued client certificate. Access requires signing a development licence (email channelpartners@landregistry.gov.uk) and holding a business e-services account. - HM Land Registry publishes no client SDK in any language, no CLI and no MCP server. The `@hmlr` npm scope is real and first-party but contains only front-end and design-system packages. - There is no RESO Web API certification, no RESO Data Dictionary and no OData `$metadata` document anywhere in the estate. RESO is a North American construct with no UK adoption. HMLR's machine-readable contracts are OpenAPI, XSD and W3C linked data. ## Open data APIs (anonymous, no key) - [SPARQL 1.1 query endpoint](https://landregistry.data.gov.uk/landregistry/query): live query surface over Price Paid Data and the UK House Price Index, returning `application/sparql-results+json`. - [Qonsole query console](http://landregistry.data.gov.uk/qonsole): in-browser SPARQL playground. The effective sandbox for anyone prototyping against HMLR data. - [Price Paid Data Linked Data API](https://landregistry.data.gov.uk/data/ppi): every property sale in England and Wales sold for value and lodged for registration since 1995. Content negotiation by extension (`.json`, `.csv`, `.ttl`, `.rdf`), paging with `_page` and `_pageSize`. - [UK House Price Index Linked Data API](https://landregistry.data.gov.uk/data/ukhpi): the official house price statistic, broken out by property type, buyer type, funding type and new-build status. - [Price Paid bulk CSV downloads](https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads): yearly and complete files, including `pp-complete.csv`. ## Keyed bulk-data API - [Use land and property data API](https://use-land-property-data.service.gov.uk/api-information): four operations on `https://use-land-property-data.service.gov.uk/api/v1` — `listDatasets`, `getDataset`, `getDatasetHistory` and `getDatasetFileDownloadUrl`, which mints a signed S3 URL valid for 10 seconds. Datasets include CCOD (UK companies that own property), OCOD (overseas companies that own property), the National Polygon Service, Restrictive Covenants and Registered Leases. - [API technical documentation](https://use-land-property-data.service.gov.uk/api-documentation) - [Register for an API key](https://use-land-property-data.service.gov.uk/registration) ## Business Gateway REST APIs (client certificate required) - [Submit an application to change the Land Register](https://landregistry.github.io/bg-dev-pack-redesign/apis/submit-an-application-to-change-the-land-register): ten operations on `/v1`. Lodge applications, mint document upload URLs, attach documents and messages, read application information, and poll and acknowledge notifications. The submit operation requires an `Idempotency-Key` header. - [Official Search of Whole (with Priority) with Data](https://landregistry.github.io/bgtechdoc/services/official_search_of_whole_rest/): `POST /v1/official-searches-of-whole`. Protects the agreement between buyer, seller and lender for the priority period. - [Official Copy Document Availability](https://landregistry.github.io/bgtechdoc/services/official_copy_document_availability_v2/): what official copies can actually be ordered for a title, before ordering them. v1 and v2 both published. - [Registered Proprietor Names](https://landregistry.github.io/bgtechdoc/services/registered_proprietor_names/): the authoritative answer to who owns a title. - [Estimate Completion Date](https://landregistry.github.io/bgtechdoc/services/estimated_completion_date/): HMLR's estimate of when a lodged application will complete. - [Find an API](https://landregistry.github.io/bg-dev-pack-redesign/find-a-service-api): the full index. Six services are REST; sixteen remain SOAP, described by 37 published XSDs. ## Machine-readable contracts in this index - openapi/hm-land-registry-submit-application-to-change-the-register-v1.0-openapi.json — OpenAPI 3.1.0, spec version 1.0.5, ten operations - openapi/hm-land-registry-submit-application-to-change-the-register-v0.3-openapi.json — OpenAPI 3.0.1, superseded, still published - openapi/hm-land-registry-official-search-of-whole-with-data-openapi.yml — OpenAPI 3.1.0 - openapi/hm-land-registry-official-copy-document-availability-v2-openapi.json — OpenAPI 3.0.0 - openapi/hm-land-registry-official-copy-document-availability-v1-openapi.json — OpenAPI 3.0.0 - openapi/hm-land-registry-official-copy-document-availability-v2-customer-test-openapi.json — customer-test variant - openapi/hm-land-registry-official-copy-document-availability-v1-customer-test-openapi.json — customer-test variant - openapi/hm-land-registry-registered-proprietor-names-openapi.json — OpenAPI 3.0.0 - openapi/hm-land-registry-estimate-completion-date-openapi.yml — OpenAPI 3.0.0 - openapi/hm-land-registry-land-register-api-openapi.yml — OpenAPI 3.0.1, internal API, no public server - openapi/hm-land-registry-use-land-property-data-openapi.yml — generated by API Evangelist from HMLR's published API technical documentation; every path probed live - asyncapi/hm-land-registry-business-gateway-notifications-asyncapi.yml — AsyncAPI 3.0.0 of the eleven-event notification surface, generated from HMLR's published event catalogue and JSON Schemas - json-schema/ — the eleven notification payload schemas, harvested verbatim - vocabulary/ — the ppi, common and ukhpi RDF ontologies, harvested verbatim ## Conventions you must follow - **Idempotency.** `submit_an_application_to_change_the_register_v1` requires an `Idempotency-Key` header. Mint a new key for every unique request; only reuse a key when retrying a failed request with *unchanged* data. If you change the payload to fix a validation error, that is a new request and needs a new key. If the original succeeded but the response timed out, the retry is treated as a duplicate: the payload is ignored and the original `application_request_id` is returned. Retryable: 408, 429, 500–599 and network timeouts. Not retryable: 401 and 403. `Idempotency-Key` is the REST successor to the SOAP `MessageID`. - **Validation is asynchronous.** Only schema violations come back as a synchronous 400. Everything else arrives later as an `application.validation-failed` notification; fetch the detail with `get_application_information_v1`. - **Notifications are pull, not push.** There are no webhooks. Poll `GET /v1/notifications`, then acknowledge each `notification_id` you have processed. Delivery is at least once — duplicates share `event_datetime` and `notification_type` but carry different `notification_id`s, and each duplicate must be acknowledged separately. Maximum 100 per call, oldest first. Everything is deleted after a month whether acknowledged or not. - **Documents move by pre-signed URL.** `send_a_document_v1` mints an upload URL; you PUT the file to it with matching `X-Amz-Checksum-Sha256` and `Content-Length`. `download_a_document_v1` returns a 302 to a short-lived URL. - **Inner objects use client-supplied keys.** In an application body you name your own parties, documents and addresses (`"Borrower1"`, `"Deed"`) and reference those names from transactions. Only `application_request_id`, `document_id`, `notification_id` and `hmlr_reference` are server-minted. - **Error formats are not uniform.** The two notification operations use RFC 9457 `application/problem+json`; the rest of the Business Gateway uses a bespoke `errors` envelope; Use land and property data returns `{"error": …, "success": false}`. - Full detail: conventions/hm-land-registry-conventions.yml, errors/hm-land-registry-problem-types.yml, authentication/hm-land-registry-authentication.yml ## Testing - HMLR's own documentation is inconsistent here and both statements are reproduced in sandbox/hm-land-registry-sandbox.yml. The Business Gateway developer guide says a test environment exists at `https://bgtest.landregistry.gov.uk/bg2test`. The newer developer pack testing guide says HMLR "does not currently provide a test environment" and supplies published test stubs instead, adding that a sandbox is planned with no confirmed date. - Published test stubs cover four submit scenarios plus notifications, application information, attach-a-document, attach-a-message, download-a-document and send-a-document. Against the stubs, `Authorization` and `Idempotency-Key` accept any value and key uniqueness is not enforced. - [A guide to testing](https://landregistry.github.io/bg-dev-pack-redesign/a-guide-to-testing) ## What HM Land Registry does not publish - No status page, no uptime dashboard, no SLA and no incident feed. Support is a phone service desk on 0300 006 0400. - No deprecation policy, no Sunset or Deprecation headers, no published sunset dates. Older contract versions simply stay listed. - No developer changelog or release-notes feed. Contract change is signalled only by the version selector. - No rate limits, quotas or `RateLimit` headers, although `download_a_document_v1` does declare a 429. - No OAuth or OpenID Connect anywhere; no `/.well-known/oauth-authorization-server` or `/.well-known/openid-configuration` on any host. - No `/.well-known/api-catalog`, no DCAT catalogue, no `llms.txt` of its own, and no Postman collection or workspace. - No SOC 2, ISO 27001, PCI DSS or FedRAMP certification and no trust centre — the normal posture for a UK non-ministerial government department rather than a commercial vendor. ## Support, policy and licensing - [Developer pack](https://landregistry.github.io/bg-dev-pack-redesign/) - [How to access Business Gateway](https://landregistry.github.io/bg-dev-pack-redesign/how-to-access-business-gateway) - [Contact the developer pack team](https://landregistry.github.io/bg-dev-pack-redesign/contact-us) - [Business Gateway community](https://www.gov.uk/guidance/join-the-business-gateway-community) - [Glossary](https://landregistry.github.io/bg-dev-pack-redesign/glossary) - [Report a vulnerability on an HM Land Registry service or system](https://www.gov.uk/guidance/report-a-vulnerability-on-an-hm-land-registry-service-or-system) - [Registration Services fees](https://www.gov.uk/guidance/hm-land-registry-registration-services-fees) - [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/) - [GitHub organisation](https://github.com/LandRegistry) - [HM Land Registry blog](https://hmlandregistry.blog.gov.uk/)