Document Records API: every record from one deed
Yes. The LandLens document records API takes a link to a Tamil Nadu sale deed, patta, FMB sketch or geotagged site photo (or a map point, or the revenue codes with survey numbers) and fetches every record for that land in one approved run: one encumbrance certificate search over the full available period for every survey the document names, and the patta (or town survey extract) and FMB sketch of each survey, up to six. The first call is a free quote; the approved run costs from 3 credits (one survey, from codes) and more with a document to read or more surveys, and each part is charged only when it delivers.
https://verified.realestate/api/v1/tools/document_records- Price
- 3 credits on approval
- Source
- Registration and revenue registers, read live
- Coverage
- Every revenue village in Tamil Nadu
- Answers in
- Quote at once; the run usually takes two to three minutes
Example
curl -X POST https://verified.realestate/api/v1/tools/document_records \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district_code":"03","taluk_code":"14","village_code":"196","register":"rural","surveys":["65/4B"]}'
{
"ok": true,
"status": "proposal",
"data": {
"proposal": true,
"action": "document_records",
"label": "Fetch every record for this land",
"params": {
"district_code": "03",
"taluk_code": "14",
"village_code": "196",
"register": "rural",
"surveys": ["65/4B"]
},
"cost": 3,
"source": "Registration department encumbrance search, revenue patta and FMB registers",
"note": "Up to 3 credits: 1 for one encumbrance search over every survey, and 2 per survey for its patta and FMB (up to 6 surveys). Each part is charged only when it delivers. Certified copies are ordered separately, 10 credits each."
},
"credits_charged": 0,
"next": {
"tool": "approve_action",
"arguments": {
"action": "document_records",
"params": { "district_code": "03", "taluk_code": "14", "village_code": "196", "register": "rural", "surveys": ["65/4B"] }
}
}
}
A real quote from the API, with the balance and request id left out. Approving it starts the run; job_status returns the records.
What it returns
The first call returns a quote, with status proposal. Send its next block to approve_action within 30 minutes and the run starts in the background: you get a job_id, and job_status returns the result below in data.payload once it is delivered.
| Field | What it holds |
|---|---|
document | What was read from the document, when one was given: doc_type, doc_number, doc_year, registration_date, sro_name, district, taluk, village, owners, extent, surveys and any anomalies noticed. Null for a pin or codes. |
land | The land the run settled on: district, taluk and village codes and names, register (rural or urban), ward and block for town survey land, and the survey list. |
records[] | One entry per survey: survey, land_record (the patta answer, as fetch_land_record returns it), land_record_ok, fmb (the sketch answer, as fmb_sketch returns it) and fmb_ok. |
ec | The one encumbrance search over every survey, in the same shape ec_transactions returns: the registered entries, their count, the written summary and the report link. |
credits_used | What the run actually cost. Parts that delivered nothing are returned to the wallet. |
notes | Plain lines on anything left out, for example surveys beyond the sixth, or a balance that did not cover every part. |
message | Why nothing came back, when no record was delivered. |
Ways to call it
Pick the way in by what you hold. Each returns the same kind of quote.
A document
A public link to the deed, patta, FMB sketch or a geotagged site photo. The document is read first, and reading it is part of the quote.
{"file_url": "https://example.com/sale-deed.pdf"}
A map point
A lat and lng on the land. The survey under the point is used.
{"lat": 12.901,"lng": 80.2279}
Codes and surveys
The revenue district, taluk and village codes with the survey numbers. The cheapest quote, since nothing is read.
{"district_code": "03","taluk_code": "14","village_code": "196","surveys": ["65/4B"]}
Inputs
The JSON body of the POST is the arguments. Send one of the three: file_url, lat and lng, or the three codes with surveys. With none of them the call answers not_found and charges nothing.
| Argument | Type | What to send |
|---|---|---|
file_url |
string | Public http(s) link to the document: PDF or image (jpg, png, tiff, webp, heic), up to 25 MB. |
lat |
number | Latitude of a point on the land, when there is no document. |
lng |
number | Longitude of a point on the land, when there is no document. |
district_code |
string | Revenue district code, with taluk_code and village_code, when the land is already known. |
taluk_code |
string | Revenue taluk code |
village_code |
string | Revenue village or town code |
surveys |
array | Survey numbers with their sub-division, e.g. ["112/3A", "113"]. Read from the document when one is given. |
register |
string: rural, urban | Rural village or town survey, when known. |
ward_code |
string | Town survey ward, for an urban parcel. |
block_code |
string | Town survey block, for an urban parcel. |
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/document_records \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district_code":"03","taluk_code":"14","village_code":"196","register":"rural","surveys":["65/4B"]}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/document_records",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"district_code": "03",
"taluk_code": "14",
"village_code": "196",
"register": "rural",
"surveys": [
"65/4B"
]
},
timeout=30,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/document_records", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"district_code": "03",
"taluk_code": "14",
"village_code": "196",
"register": "rural",
"surveys": [
"65/4B"
]
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
Here is the link to my sale deed. Fetch the EC, patta and FMB for every survey it mentions and tell me if anything does not match.
Your AI sends the link, shows you the quote, and runs it only after you say yes.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
proposal | The quote. Nothing is charged. Approve it by sending next.arguments to approve_action within 30 minutes, unchanged. |
queued | What approve_action answers (HTTP 202), with a job_id. Ask job_status every 30 to 60 seconds; its data.status reads running until the run ends in done or failed. |
done | In job_status data.status: data.payload holds the document, land, records and ec, and credits_charged says what the run cost. |
failed | In job_status data.status: the run could not be completed, with the reason in error. Credits held for parts that did not deliver are returned. |
not_found | Nothing to run on: no file_url, no lat and lng, and no codes with surveys. Nothing is charged. |
insufficient_credits | HTTP 402 at approval, with the credits needed, your balance and where to top up. |
Where the data comes from
Three registers in one run: the encumbrance index of the Tamil Nadu Registration Department, the revenue department's patta register (chitta and A-register, or the town survey extract for city land), and the state cadastral boundary layer (FMB sketches).
Every revenue village and town survey ward in Tamil Nadu. A run fetches patta and FMB for up to 6 surveys and carries up to 20 surveys in its one encumbrance search. A longer schedule is named in notes rather than fetched.
Live. The encumbrance search and the patta are read from the department registers at the moment the run is approved.
When a document link is given it is read first for its village, survey numbers, document number and registering office. The land is then fixed to revenue codes (from the document, the map point or the codes you sent), the patta and FMB of each survey are fetched, and one encumbrance search runs over every survey together.
Who uses it
Advocates writing title opinions
Start from the deed the client sent and have the encumbrance, patta and sketch for every survey in it before the first reading.
Lenders
Check that the deed on a loan file, the patta holder and the registered history all describe the same land, in one call per file.
Property platforms
Let a seller upload a deed and show the buyer the records behind it.
Limits and good practice
- Tamil Nadu only.
- Patta and FMB are fetched for the first 6 surveys; the encumbrance search carries up to 20. Anything beyond is named in notes.
- A document link must be public (http or https), a PDF or an image, up to 25 MB. A scan that cannot be read fails with nothing charged.
- A village name in the document that fits more than one place stops the run with candidates. Run it again with the codes or a pin.
- Certified copies of the entries are a separate order (certified_copy); this run gives the details needed to place it.
Pricing
The quote is free. The approved run costs from 3 credits for one survey sent as codes; the quote adds reading the document, one encumbrance search, and the patta and FMB of each further survey. Each part is charged only when it delivers, so the quote is a ceiling, not the bill. 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 that takes a sale deed and returns the EC and patta?
Yes, this one. Send a public link to the deed as file_url; the run reads it for the village and survey numbers, then fetches the encumbrance search and the patta and FMB of each survey.
Do I need a document?
No. A map point (lat, lng) or the revenue codes with survey numbers work too, and cost less because nothing is read.
What does it cost?
The quote is free and says the most the run can cost. Each part is charged only when it returns a record, so a survey whose sketch is not on the map costs nothing for the sketch.
How long does it take?
The quote is instant. The approved run usually completes in two to three minutes, most of it the encumbrance search. Poll job_status for the result.
Can it order certified copies too?
Not in the same run. Each encumbrance entry comes with the details a certified copy is ordered against; place the order with certified_copy.
Updated 22 Oct 2026 · OpenAPI description