Adangal API: crop and cultivation register for Tamil Nadu
Yes. The LandLens Adangal API reads the e-Adangal crop register of the Tamil Nadu revenue department for a village survey number: the crops recorded on it, the season, single or double cultivation, the irrigation source, the land class (wet or dry) and the extent declared, in English and Tamil. Send the revenue codes and the survey number. It costs 1 credit per entry found, and nothing when the register holds no cultivation entry for that survey.
https://verified.realestate/api/v1/tools/adangal_record- Price
- 1 credit per answer
- Source
- Revenue crop register (e-Adangal)
- Coverage
- Village survey land only
- Answers in
- Usually under 10 seconds
Example
curl -X POST https://verified.realestate/api/v1/tools/adangal_record \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"register":"rural","district_code":"01","taluk_code":"02","village_code":"019","survey_number":"33","sub_division":"5"}'
{
"ok": true,
"status": "ok",
"data": {
"found": true,
"recorded": true,
"source": "live",
"as_of": null,
"record": {
"recorded": true,
"crop_count": 2,
"crops": [
{
"crop_name": "Agri - Eucalyptus / யூக்கலிப்டஸ்",
"irrigation_source": "Tank / குளம்",
"cultivation_type": "Single/ஒற்றை",
"season": "Summer/கோடை",
"sowing_date": "-",
"land_class_en": "Wet",
"land_class_ta": "நஞ்சை",
"extent": 5,
"patta_no": "2294",
"survey_no": "33",
"subdivision": "5",
"inter_crop": "-",
"district_name": "Tiruvallur",
"taluk_name": "Gummidipoondi",
"village_name": "Chinnapuliyur"
}
],
"survey_no": "33",
"subdivision": "5",
"seasons": ["Summer/கோடை"],
"crop_names": ["Agri - Eucalyptus / யூக்கலிப்டஸ்"]
}
},
"credits_charged": 1
}
A real answer from the API (22 Oct 2026, Chinnapuliyur village, Gummidipoondi taluk), trimmed: the second crop row and some fields of the first are left out.
What it returns
One call, one survey. recorded is false (status not_found) when the register holds no cultivation entry, which is not the same as the land lying fallow.
| Field | What it holds |
|---|---|
found, recorded | true when the register holds a cultivation entry for the survey. |
source, as_of | live, or stored with the date our copy was read. |
record.crops | One row per entry: crop_name, season, cultivation_type, irrigation_source, sowing_date, inter_crop, land_class_en and land_class_ta, extent, patta_no, and the village, taluk and district names in both scripts. |
record.crop_count, crop_names, seasons | A summary of the entries. |
survey_not_held | true when the survey number is not in that village's revenue register at all, so there is no parcel to read. |
message | On not_found: what the empty answer means, in words you can show. |
Inputs
The JSON body of the POST is the arguments. The three revenue codes and the survey number are required. resolve_parcel returns them for a map point.
| Argument | Type | What to send |
|---|---|---|
district_coderequired |
string | |
taluk_coderequired |
string | |
village_coderequired |
string | |
survey_numberrequired |
string | The survey number without the sub-division, e.g. 33. |
sub_division |
string | The sub-division, e.g. 5. Leave empty when there is none. |
patta_number |
string | Optional. When the survey index is blank, the register is checked by patta number too. |
register |
string: rural, urban | Send "urban" for town survey land: the answer then says no adangal applies, instead of reading the village that shares the town's code. |
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/adangal_record \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"register":"rural","district_code":"01","taluk_code":"02","village_code":"019","survey_number":"33","sub_division":"5"}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/adangal_record",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"register": "rural",
"district_code": "01",
"taluk_code": "02",
"village_code": "019",
"survey_number": "33",
"sub_division": "5"
},
timeout=120,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/adangal_record", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"register": "rural",
"district_code": "01",
"taluk_code": "02",
"village_code": "019",
"survey_number": "33",
"sub_division": "5"
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
What crops are recorded in the adangal for survey 33/5 in Chinnapuliyur village, Gummidipoondi taluk?
Your AI finds the revenue codes, says the price, and reads the crop register for you.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
ok | The register holds a cultivation entry. Charged 1 credit. |
not_found | No cultivation entry is recorded, the survey is not in the village's register, the parcel is town survey land, or the register did not answer and we hold no stored copy (error says so; retry is free). Nothing is charged. |
invalid_args | A revenue code or the survey number is missing. |
Where the data comes from
The e-Adangal register of the Tamil Nadu revenue department: the village account in which the crop, season and cultivation declared for each survey field are written down.
Revenue village land across Tamil Nadu, wherever the register holds entries. Large parts of the state have no entries in it at all. Town survey land has no adangal.
Live. Each call reads the register at that moment. When it does not answer, the API answers from our stored copy where we hold one, sets source to stored, and gives the date it was read in as_of.
Read by survey number and sub-division. When the survey index is blank and you sent the patta number, the register is checked by patta number too before the answer says nothing is recorded.
Who uses it
Agricultural land buyers
See what has been declared as grown on a field, and whether it is recorded as wet or dry land.
Law firms
Check the cultivation history before advising on a land conversion or an agricultural land sale.
Lenders
Confirm the crop and season declared on land offered for an agricultural loan.
Limits and good practice
- The register records what was declared for the season, not a survey of the field.
- A blank answer means no cultivation is recorded in the register. Large parts of the state have no entries, so it is not evidence that the land is uncultivated.
- The register names a season but not a year.
- Village survey land only. Town survey land has no adangal.
- When source is stored, the answer is our copy from the as_of date, not a live read.
Pricing
Each entry found costs 1 credit; nothing when the register holds no cultivation entry for the survey. 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 adangal records?
Yes, this one. It reads the e-Adangal crop register for a survey number and returns the crops, season, irrigation and land class as data, over plain HTTPS or as an MCP tool.
How much does an adangal extract cost through the API?
Each entry found costs 1 credit. When the register holds nothing for the survey, nothing is charged.
Does an empty adangal mean the land is not cultivated?
No. It means no cultivation is recorded in the register. Large parts of the state have no entries at all.
Does it work for town survey land?
No. The crop register covers revenue village land only. Send register "urban" and the API says so instead of reading the village that shares the town's code.
Does it give the year of the crop?
No. The register states the season (Summer, for example) but not the year.
Updated 22 Oct 2026 · OpenAPI description