Tamil Nadu Water Body API: lakes, eris and tanks near a plot
Yes. The LandLens water body API reads the state's mapped water body register three ways. Send a point and it lists every water body polygon within the radius (1 km by default, up to 5 km), nearest first, with the distance from the point, type, revenue location and extent where recorded, plus the nearest named waterway line. Send a water body's id and it returns the full record: type, district, taluk, village, owning department, extent and the footprint of its boundary. Send a district and it returns how many water bodies it holds and the largest. About 120,000 water bodies are mapped. It costs 1 credit a call.
https://verified.realestate/api/v1/tools/water_body- Price
- 1 credit per answer
- Source
- State water body register
- Coverage
- About 120,000 mapped water bodies, Tamil Nadu
- Answers in
- Usually under a second
Example
curl -X POST https://verified.realestate/api/v1/tools/water_body \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":12.901,"lng":80.2279,"radius_m":1000}'
{
"ok": true,
"status": "ok",
"data": {
"found": true,
"mode": "nearby",
"radius_m": 1000,
"count": 12,
"nearest_waterway": {"name": "Buckingham Kaalvaai", "type": "canal", "distance_m": 1201, "nearest_lat": 12.9001903204401, "nearest_lng": 80.23893697277},
"distance_basis": "the supplied point (the parcel centre), not the parcel boundary",
"water_bodies": [
{"id": 101830, "name": "Water Body #101830", "type": "Water Body", "distance_m": 307, "district": "Chennai", "centre_lat": 12.898548701677, "centre_lng": 80.2260463030045},
{"id": 101815, "name": "Water Body #101815", "type": "Water Body", "distance_m": 442, "district": "Chennai", "centre_lat": 12.8964445484237, "centre_lng": 80.2251186072213}
],
"extent_missing_for": 10,
"names_are_classifications": ["Pennar Cauvery"]
},
"credits_charged": 1
}
A real answer from the API for a point in Sholinganallur, Chennai, trimmed to two of the ten water bodies listed, with the reading notes left out.
What it returns
One call. mode says which of the three answers you got.
| Field | What it holds |
|---|---|
mode | nearby, detail or district. |
nearby: water_bodies[] | Up to 10 water bodies, nearest first: id, name, type, distance_m, area_sqm and area_acres where recorded, district, taluk, village and the centre point. |
nearby: count, radius_m, distance_basis | How many lie within the radius, the radius used, and what the distance is measured from. |
nearby: nearest_waterway | The nearest named canal, river or stream line, with its distance and nearest point. |
nearby: extent_missing_for, names_are_classifications | How many listed have no extent, and which names are basin labels rather than names. |
detail: name, type, district, taluk, village, owner_department | One water body's record. |
detail: area_sqm, area_acres, boundary_mapped, boundary_bbox, boundary_span_m | Its recorded extent, whether a boundary is mapped, and the boundary's bounding box and span. |
detail: type_description, managed_by, encroachment_law, report_encroachment_to | What kind of water body it is, who manages that kind, the law on encroachment and where to report it. |
district: water_bodies_in_district, share_of_state_pct, largest[] | The district's count, its share of the state, and the five largest by recorded extent. |
Inputs
The JSON body of the POST is the arguments. Send lat and lng, or water_body_id, or district. An id wins over a point, and a point over a district.
| Argument | Type | What to send |
|---|---|---|
lat |
number | Latitude in decimal degrees. Pair with lng. |
lng |
number | Longitude in decimal degrees. Pair with lat. |
radius_m |
number | How far to look, in metres. Default 1000, 100 to 5000. |
water_body_id |
integer | The id from a nearby answer, to open that record. |
district |
string | A district name without the word District, e.g. Tiruvannamalai. |
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/water_body \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":12.901,"lng":80.2279,"radius_m":1000}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/water_body",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"lat": 12.901,
"lng": 80.2279,
"radius_m": 1000
},
timeout=30,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/water_body", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"lat": 12.901,
"lng": 80.2279,
"radius_m": 1000
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
Is there a lake or eri near my plot at 12.9010, 80.2279? How far is the nearest one, and how big is it?
Your AI lists the water bodies around the point 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 | An answer came back, including a radius with no water body in it. Charged 1 credit. |
not_found | Nothing to look up was sent, the id or district is not in the register, or the register could not be read. Nothing is charged. |
insufficient_credits | The account has too few credits. Nothing ran. |
Where the data comes from
The state's register of mapped water bodies: tanks, eris, ooranis, kulams, ponds, lakes and reservoirs, each as a boundary polygon with its revenue location and owning department. Named canals, rivers and streams come from the OpenStreetMap waterway layer.
About 119,800 water body polygons across Tamil Nadu. Most carry no extent figure, and about one in eleven carries a river basin label in place of a name.
The register is held as published and reviewed about twice a year. It changes slowly; an encroached or filled water body stays on the map until the register is revised.
Distances are measured from the point you send to the nearest edge of each polygon, so a few metres means the point is at the water's edge. A name repeated across several polygons in one answer is flagged as a classification, not a place name, and an uncaptured extent is left out rather than reported as zero.
Who uses it
Plot buyers
See how close the nearest tank or eri is before buying low lying land, and which department owns it.
Advocates
Cite the water body's record, its type and owning department, when a schedule property abuts one.
Researchers
Count a district's water bodies and rank the largest by recorded extent.
Limits and good practice
- Distance here is from the point, while zone_check measures from the parcel boundary. The two numbers differ and both are right.
- Most records carry no extent, so area is often absent. It is never reported as zero.
- "Pennar Cauvery" and similar labels are river basin classifications. Describe such a row as a mapped water body, not by that name.
- Small channels and vaikkals are often missing from the polygon register.
- This is the map, not a verdict. For whether the plot sits in or within 15 m of a water body, use zone_check.
Pricing
Each call costs 1 credit. 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 for Tamil Nadu water bodies?
Yes. Send a latitude and longitude and the API returns the mapped lakes, tanks, eris and ponds around it with distances, or send an id for one record.
Can I tell whether a plot is on a lake bed?
A distance of a few metres means the point is at the edge. For the verdict use zone_check with water_body, which tests the parcel boundary, and waterbody_survey, which checks whether the survey number itself is recorded as a water body.
Why do so many water bodies have no name?
The register names few of them. Unnamed ones come back as "Water Body #id", and basin labels are flagged so they are not read as names.
How much does it cost?
Each call costs 1 credit.
Updated 22 Oct 2026 · OpenAPI description