Building and Layout Approvals by Survey Number API
Yes. The LandLens approval search API takes a survey number (with its village) or a map point and returns every approval our consolidated register holds on that land: CMDA, DTCP, town and village panchayat layout approvals and building permits, completion certificates, and RERA registrations and orders. Results are grouped by place, because the same survey number repeats in hundreds of villages, and each record says whether it sits on this exact sub-division or only on the parent survey, and where its survey numbers were read from. About 327,000 records from five authorities are held. It costs 4 credits a search, and nothing when nothing is recorded.
https://verified.realestate/api/v1/tools/approval_search- Price
- 4 credits per answer
- Source
- CMDA, DTCP, panchayat and RERA registers, combined
- Coverage
- About 327,000 approval records, five authorities
- Answers in
- Usually under half a second; a broad survey can take a few seconds
Example
curl -X POST https://verified.realestate/api/v1/tools/approval_search \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"survey":"1460/2","place":"Chengalpattu"}'
{
"ok": true,
"status": "ok",
"data": {
"status": "found",
"place": {"text": "Chengalpattu", "applied": true, "resolved": true, "matched_name": "Chengalpattu"},
"totals": {"records": 7, "exact_records": 3, "other_village_records": 5, "places": 4},
"places": [
{
"label": "Chengalpattu",
"taluk": "Thiruporur",
"district": "Chengalpattu",
"precision": "Tied to a government village record",
"records": 2,
"exact_records": 2,
"other_village": false,
"shown": [
{
"authority": "Directorate of Town and Country Planning",
"authority_short": "DTCP",
"also_authority": "Village Panchayat",
"kind": "Layout approval",
"stance": "approval",
"number": "DGDLH7R1/2025",
"date": "2025-10-25",
"match": "exact",
"other_village": false,
"surveys": [{"survey": "1460/2", "exact": true}, {"survey": "1460/1A", "exact": false}, {"survey": "1460/1B", "exact": false}],
"read_from": "Read from the approval document",
"record_url": "https://verified.realestate/landlens/mini/approvals/ppa/249023"
}
]
}
],
"coverage": {
"authorities": [
{"authority": "Village Panchayat", "records": 170827, "from": "2023-10-19", "to": "2026-10-09"},
{"authority": "Chennai Metropolitan Development Authority", "short": "CMDA", "records": 52392, "from": "1989", "to": "2026-08-24"},
"..."
],
"records": 327150
},
"found": true
},
"credits_charged": 4
}
A real answer from the API, trimmed for length: one of four places and one record are shown, three of five authorities in coverage are cut, and the query echo, ids and note are left out.
What it returns
One call. Records are grouped under places; read match and other_village on each record before calling it an approval of this land.
| Field | What it holds |
|---|---|
status | found or empty. |
totals | records, exact_records (on this sub-division), other_village_records and places. |
places[] | Each place: label, taluk, district, how precisely its records are located (precision), and the records shown. |
places[].shown[].authority, kind, stance | Who issued it (CMDA, DTCP, a panchayat, RERA), what it is (layout approval, building permit, completion certificate, registration, order), and whether it is an approval, a refusal or a dispute. |
places[].shown[].number, date, year, valid_until, lapsed | The approval number and date, and its validity where the record gives one. |
places[].shown[].match | exact when the record names this survey and sub-division; parent when it names only the parent survey or a sibling sub-division. |
places[].shown[].other_village | true when the same survey number is in a different village of the taluk or district typed. That is another parcel. |
places[].shown[].surveys, read_from | The survey numbers on the record, which of them matched, and whether they were read from the listing, the approval document or a scanned letter. |
places[].shown[].record_url, page, document_url | The record's page in LandLens and the approval document. |
coverage | Every authority searched, with its record count and the first and latest dates held. |
note | How to read exact, parent and other_village matches, or, on an empty answer, why it is not proof that no approval exists. |
Inputs
The JSON body of the POST is the arguments. Send survey with place, or lat and lng on their own.
| Argument | Type | What to send |
|---|---|---|
survey |
string | The survey number, e.g. 506/1D2, or several separated by commas. |
place |
string | The village, taluk or district. Strongly recommended: a bare survey number repeats across the state. |
lat |
number | A map point to search from instead, resolved to its parcel first. |
lng |
number |
Code
Set LANDLENS_KEY to your key. In an AI app, connect https://verified.realestate/mcp once and ask in plain words instead. In Postman, download this API's collection, import it (File, Import) and set apiKey.
curl -X POST https://verified.realestate/api/v1/tools/approval_search \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"survey":"1460/2","place":"Chengalpattu"}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/approval_search",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"survey": "1460/2",
"place": "Chengalpattu"
},
timeout=30,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/approval_search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"survey": "1460/2",
"place": "Chengalpattu"
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
Is there any layout or building approval on survey 1460/2 in Chengalpattu village? Tell me which ones are on this exact sub-division.
Your AI searches the approvals register and tells you the price first.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
ok | One or more approvals are recorded. Charged 4 credits. |
not_found | Nothing is recorded in what we hold, or no survey or point was sent. Nothing is charged, and the coverage block still says what was searched. |
invalid_args | A phone number was written into a field. Nothing ran. |
insufficient_credits | The account has too few credits. Nothing ran. |
Where the data comes from
Our consolidated approvals register: the CMDA planning permissions and completion certificates, the DTCP, town panchayat and village panchayat permits from the state's online planning permission system, and the Tamil Nadu real estate register's registrations and orders, indexed by the survey numbers they name.
About 327,000 records: 171,000 village panchayat (from October 2023), 52,000 CMDA (from 1989), 36,000 RERA (from August 2017), 34,000 DTCP (from June 2022) and 34,000 town panchayat (from August 2023). Every answer carries this coverage block, so a caller can say what was searched.
The underlying registers are read every week (CMDA certificates nightly), and survey numbers are read out of new approval letters as they arrive. The coverage block gives each authority's first and latest record.
The survey number is matched exactly and on its parent stem. Survey numbers come from the register listing where it gives them, and otherwise are read from the approval letter or the scanned approval document. The place narrows the answer to a village, taluk or district; a map point is resolved to its parcel and locked to its district first.
Who uses it
Plot buyers
Before paying an advance, see whether the survey number the seller gave carries any layout approval, and whether it is on this sub-division or a neighbour's.
Advocates
List every permit, certificate and RERA record on the schedule property for a title opinion, with the authority and date of each.
Lenders
Check that the approval in a loan file is the one recorded on the mortgaged survey number.
Limits and good practice
- No result is not proof that no approval exists. It means nothing is recorded in the registers listed in coverage, for the years they span.
- A parent match means the permit names the parent survey or a sibling sub-division, not necessarily this plot.
- Some records are located only to a taluk or district. precision says so, and such a record cannot be tied to one exact survey.
- RERA orders and refused applications come back with their stance. They are not approvals.
- Without place, a survey number matches across the state. Always send the village.
Pricing
Each search costs 4 credits. A search that finds nothing is free. Credits come from the same LandLens wallet as the chat and the minis. How billing works.
For thousands of calls a month, a portfolio sweep or a platform built on these registers, we quote a customised bulk price, with invoicing to match.
Questions
Is there an API to check approvals by survey number in Tamil Nadu?
Yes, this one. The government portals look up a permit by its number; this looks up the land and returns every permit, certificate and RERA record that names it.
Which authorities are covered?
CMDA, DTCP, town panchayats, village panchayats and the state real estate register. Each answer's coverage block gives the record count and date span for each.
What is the difference between an exact and a parent match?
Exact means the record names this survey and sub-division. Parent means it names the parent survey or a sibling sub-division, so the approval may be on the land next door.
Why did I get results from another village?
The same survey number exists in many villages. Records flagged other_village are on a different parcel and should not be counted as this land's approval.
How much does it cost?
Each search costs 4 credits. Nothing is charged when nothing is recorded.
Updated 22 Oct 2026 · OpenAPI description