Tamil Nadu Revenue Directory API
Yes. The LandLens revenue directory API lists Tamil Nadu's revenue geography one level at a time, with the code for each entry: the districts, then a district's taluks, then a taluk's villages (or towns), and for a town its wards and each ward's blocks. A search filter narrows a long list by part of a name. The codes are the ones every land record call takes. It costs nothing.
https://verified.realestate/api/v1/tools/revenue_directory- Price
- Free
- Source
- Revenue department village directory
- Coverage
- Every district, taluk, village, town, ward and block
- Answers in
- Usually under a tenth of a second
Example
curl -X POST https://verified.realestate/api/v1/tools/revenue_directory \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district_code":"03","taluk_code":"14","search":"kav"}'
{
"ok": true,
"status": "ok",
"data": {
"found": true,
"register": "rural",
"level": "village",
"asked": {
"district_code": "03",
"taluk_code": "14",
"search": "kav"
},
"place": {
"district_name": "Kancheepuram",
"taluk_name": "Kundrathur"
},
"count": 2,
"total_at_level": 90,
"options": [
{
"code": "196",
"name": "Kavanoor"
},
{
"code": "075",
"name": "Kavanur"
}
],
"note": "Each entry gives the code to pass to the record tools and the name as the register writes it."
},
"credits_charged": 0
}
A real answer from the API (22 Oct 2026).
What it returns
Each call returns one level: the entries under what you sent. found is false (status not_found) when the code you sent does not exist or the filter matches nothing.
| Field | What it holds |
|---|---|
level | Which level the list is: district, taluk, village, town, ward or block. |
options[] | Each entry's code and name, as the register writes it. Up to 400 per call. |
place | The names of the district, taluk and town you are inside, for display. |
count, total_at_level | How many entries matched, and with a search filter how many the level holds in all. |
truncated | Set when more than 400 entries matched. Narrow with search. |
register | rural (villages) or urban (towns, wards, blocks). |
message | On a miss: what does not exist and what to send instead. |
Ways to call it
Walk down one level per call. Each answer gives the codes for the next.
Villages of a taluk
Send a district and a taluk. Add search to filter a long list.
{"district_code": "03","taluk_code": "14","search": "kav"}
Wards and blocks of a town
Use the urban register. A town code gives its wards; a ward code gives its blocks.
{"register": "urban","district_code": "02","taluk_code": "08","village_code": "…","ward_code": "…"}
Inputs
The JSON body of the POST is the arguments. Nothing is required. Send nothing for the districts, then add one code per level.
| Argument | Type | What to send |
|---|---|---|
register |
string: rural, urban | "rural" for revenue villages (the default), "urban" for towns, wards and blocks. |
district_code |
string | Revenue district code, e.g. "02". Omit for the list of districts. |
taluk_code |
string | Revenue taluk code, e.g. "01". Omit for the list of taluks in the district. |
village_code |
string | Urban only: the town code, to list its wards. |
ward_code |
string | Urban only: the ward code, to list its blocks. |
search |
string | Return only entries whose name contains this text. Use it when a taluk holds hundreds of villages. |
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/revenue_directory \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district_code":"03","taluk_code":"14","search":"kav"}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/revenue_directory",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"district_code": "03",
"taluk_code": "14",
"search": "kav"
},
timeout=20,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/revenue_directory", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"district_code": "03",
"taluk_code": "14",
"search": "kav"
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
List the villages of Kundrathur taluk in Kancheepuram district whose names start with Kav.
Your AI browses the directory and gives you the names with their codes. It is free.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
ok | The level was listed. |
not_found | A code you sent does not exist at that level, the search matched nothing, or wards and blocks were asked for on the village side. message says which. |
free_limit_reached | The account has used its free calls for the hour or the day. retry_after says how many seconds to wait; paid calls keep working. |
Where the data comes from
The revenue department's directory in two halves: the village side (revenue villages of the A-register) and the town side (towns, wards and blocks of the town survey land register), in the department's own spelling.
All of Tamil Nadu. The village side holds 38 districts, 303 taluks and 17,237 village entries. The town side holds 219 towns with 993 wards and 29,425 blocks.
Read from our copy of the directory, refreshed when the government creates, splits or renames a village, town or district.
Each level is read straight from the directory. Nothing is guessed: an unknown code is answered with what does exist at that level.
Who uses it
Developers
Build the district, taluk and village dropdowns of a land record form from one source, with the codes behind each name.
Town survey work
Find the ward and block of a town before a town survey record or sketch call, which needs both.
AI assistants
Show a user the villages of their taluk when the name they typed matches more than one.
Limits and good practice
- The village side ends at the village. Wards and blocks exist only for town survey land.
- A taluk numbers its villages and its towns separately and the codes overlap. Always carry the register with the code.
- Names are in the register's English spelling, which can differ from local usage (Shozhinganallur for Sholinganallur).
Pricing
The revenue directory costs nothing. Free calls have their own allowance per hour and per day. Credits come from the same LandLens wallet as the chat and the minis. How billing works.
Free calls have an hourly and daily allowance. For more than that, or a platform built on these registers, we set up limits and a plan to match.
Questions
Is there an API that lists every village in a Tamil Nadu taluk?
Yes, this one. Send the district and taluk codes and you get every revenue village with its code. Add search to filter by part of a name.
How do I find the ward and block codes of a town?
Use register urban: a district and taluk list the towns, a town code lists its wards, and a ward code lists its blocks.
What is the difference between this and the village code lookup?
This lists a level. resolve_revenue_codes takes one name and returns its codes directly.
What does it cost?
It costs nothing, within the account's free call allowance.
Updated 22 Oct 2026 · OpenAPI description