On this page
India Property Register API
JSON over HTTPS for the land and property register of India: every state, district, tehsil and village with LGD codes, boundaries and pincodes, the portals that hold each state's land records, and plots as they are loaded. Plus an MCP server for AI tools.
Base URL https://indiapropertyregister.com/api/v1. Machine-readable spec: openapi.json
Authentication
Every request needs an API key of your account in a header. Sign up with your email (₹50 of free credit, no approval) and make keys under API keys. MCP clients can sign in with OAuth instead (MCP server).
Authorization: Bearer YOUR_KEY
# or
X-API-Key: YOUR_KEYQuick start
- Create an account and copy your key (₹50 of free credit to start).
- Find a place:
GET /api/v1/search?q=.... - Read the village:
GET /api/v1/village/{lgd}, with?geometry=geojsonfor its boundary. - Ask where its land records are:
GET /api/v1/sources?state={lgd}.
Search places
Villages, tehsils, districts and states whose name is like the query (spelling-tolerant), best first; or, for a 6-digit pincode, the villages inside it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | Yes | A place name (3+ characters) or a pincode e.g. Rampur |
| limit | query | integer | No | Villages to return, 1 to 50 (default 20) |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/search?q=Rampur&limit=5"{ "q": "Rampur", "states": [], "districts": [ { "name": "Rampur", "state": "Uttar Pradesh", "url": "..." } ],
"tehsils": [ ... ], "villages": [ { "lgd": 125245, "name": "Rampur", "tehsil": "...", "district": "...", "state": "...", "pincode": "244901", "url": "..." } ] }Village
One village by LGD code: Census 2011 code, pincode, area, centre point, state, district, tehsil, block and gram panchayat with their LGD codes, neighbouring villages, the government portals that hold its land records, and plots on the register. Add geometry=geojson for the boundary.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| lgd | path | integer | Yes | LGD village code e.g. 125245 |
| geometry | query | string | No | geojson: include the boundary as a GeoJSON MultiPolygon |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/village/125245?geometry=geojson"{
"lgd": 125245, "name": "...", "census2011": "...", "pincode": "...", "area_hectares": 412.6,
"centre": { "lat": 28.81, "lon": 79.02 }, "state": { "lgd": 9, "name": "Uttar Pradesh" },
"district": { "lgd": 158, "name": "..." }, "tehsil": { "lgd": 780, "name": "..." },
"block": { "lgd": 0, "name": "..." }, "gram_panchayat": { "lgd": 0, "name": "..." }, "plots": 0,
"neighbours": [ { "lgd": 0, "name": "...", "tehsil": "..." } ],
"land_record_sources": [ { "id": "up_bhulekh_ror", "layer": "ror", "name": "UP Bhulekh", "url": "https://upbhulekh.gov.in/", "access": "captcha", "records": ["Khatauni"] } ],
"geometry": { "type": "MultiPolygon", "coordinates": [ ... ] }, "url": "https://indiapropertyregister.com/village/...",
"note": "Revenue records are not proof of title and this is not a certified copy. Verify with the issuing office."
}States and union territories
All 36 with LGD codes, Census 2011 codes, counts of districts, villages and plots, and whether land records are online.
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/states"{ "count": 36, "states": [ { "lgd": 9, "name": "Uttar Pradesh", "kind": "state", "districts": 75, "villages": 96061, "plots": 0, "land_records_status": "online", "url": "..." } ] }Districts of a state
Districts with LGD and Census codes, tehsil and village counts.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| lgd | path | integer | Yes | LGD state code e.g. 9 |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/state/9/districts"{ "state": { "lgd": 9, "name": "Uttar Pradesh" }, "count": 75, "districts": [ { "lgd": 158, "name": "...", "tehsils": 5, "villages": 1150, "url": "..." } ] }Tehsils of a district
Tehsils (talukas, mandals, circles, anchals) with LGD codes and village counts.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| lgd | path | integer | Yes | LGD district code |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/district/158/tehsils"{ "district": { "lgd": 158, "name": "...", "state": "Uttar Pradesh" }, "count": 5, "tehsils": [ { "lgd": 780, "name": "...", "villages": 240, "url": "..." } ] }Villages of a tehsil
Every village of a tehsil with LGD code, pincode, gram panchayat, area and plots on the register.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| lgd | path | integer | Yes | LGD sub-district code |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/tehsil/780/villages"{ "tehsil": { "lgd": 780, "name": "...", "district": "...", "state": "..." }, "count": 240, "villages": [ { "lgd": 125245, "name": "...", "pincode": "...", "gram_panchayat": "...", "area_hectares": 412.6, "plots": 0, "url": "..." } ] }Pincode
A pincode area (office, division, region, circle, district and state) and the villages inside it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| pin | path | string | Yes | 6-digit pincode e.g. 244901 |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/pincode/244901"{ "pin": "244901", "office": "...", "division": "...", "district_lgd": 158, "state_lgd": 9, "villages": [ { "lgd": 125245, "name": "...", "tehsil": "...", "district": "..." } ] }Land record sources
Government portals for land records, maps, registration, encumbrance, RERA, circle rates, property tax and more, with access details. With state, also how that state keeps its land records: record names, admin hierarchy, plot identifier terms and a glossary.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| state | query | integer | No | LGD state code e.g. 27 |
| layer | query | string | No | ror, map, registration, ec, rera, circle_rate, tax, property_card, notice, charge, court, revenue_court, acquisition, restricted, geo, programme |
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/sources?state=27"{ "state": { "lgd": 27, "name": "Maharashtra" }, "land_records": { "records": [ { "name": "7/12 (Satbara)", "what": "..." } ], "hierarchy": ["District","Taluka","Village","Survey / Gat number"], "glossary": [ ... ] },
"count": 14, "sources": [ { "id": "mh_mahabhulekh_ror", "layer": "ror", "name": "Mahabhulekh", "url": "https://bhulekh.mahabhumi.gov.in/", "access": "captcha", "on_register": false } ] }Coverage counts
How many states, districts, tehsils, villages, pincodes, towns, wards and plots the register holds.
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/stats"{ "states": 36, "districts": 785, "tehsils": 6471, "villages": 546000, "pincodes": 19312, "ulbs": 3360, "wards": 70415, "parcels": 0, "data_date": "2026-10-12" }Errors
Errors are JSON: {"error": "code", "message": "what to fix", "docs": "https://indiapropertyregister.com/api/docs"}.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_* / unknown_parameter / missing_q | A parameter is missing, malformed or not allowed on this endpoint. The message lists what is allowed. |
| 401 | api_key_required | No key, or the key is unknown, revoked or expired. |
| 402 | insufficient_balance | The wallet cannot pay for the call (₹0.16). Top up on /account/payments or with POST /account/topup. |
| 404 | not_found | No record with that identifier. |
| 422 | individual | Court searches are not run on the names of private individuals. |
| 403 | account_suspended | The account is suspended. Write to [email protected]. |
| 429 | quota_exceeded | The key reached its daily safety cap (100,000 calls by default). Resets at midnight IST. |
| 503 | cases_unavailable / parse_unavailable | An upstream service did not answer in time. Retry after a minute. |
Billing and limits
Your account has a prepaid wallet. Each successful call (HTTP 200) costs ₹0.16, including searches that find nothing; errors (400, 404, 422, 503), refused calls and the account endpoints are free. A page of a list is one call. When the wallet cannot pay, calls return 402 insufficient_balance until you top up with ₹500, ₹5,000 or ₹50,000 (plus 18% GST) on your dashboard. Every call, billed or not, is in your usage log with a CSV download. GST invoices are issued by Billion Insights Ventures Pvt. Ltd.: for one, email [email protected] or call +91 87004 99972.
Each key also has a daily safety cap (100,000 calls by default; 429 past it, resets at midnight IST). List endpoints return at most 100 records per call. For higher caps or bulk deliveries, write to [email protected].
Account and wallet (free)
The same key reads its own account. None of these calls is billed.
curl -H "Authorization: Bearer YOUR_KEY" https://indiapropertyregister.com/api/v1/accountcurl -X POST -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
-d '{"amount": 500}' https://indiapropertyregister.com/api/v1/account/topupcurl -H "Authorization: Bearer YOUR_KEY" https://indiapropertyregister.com/api/v1/account/payments/{payment_id}
curl -H "Authorization: Bearer YOUR_KEY" "https://indiapropertyregister.com/api/v1/account/usage?limit=50"For AI agents
Agents can sign a person up, connect, check the wallet and start a top-up without a browser. The protocol is in /auth.md: the agent posts the person's email to /agent/identity, we email them a code, and the agent exchanges it at /agent/identity/claim for an API key. MCP clients use OAuth 2.1 (discovery at /.well-known/oauth-authorization-server). Top-ups are also offered as UCP and ACP checkout sessions; the person always pays on a Razorpay page, never the agent. Discovery: API catalog, MCP server card, A2A agent card, agent skills. Any page is available as Markdown with Accept: text/markdown.
Enum reference
Source layers
ror record of rights, map cadastral maps, registration, ec encumbrance certificate, rera, circle_rate, tax municipal property tax, property_card, notice, charge, court, revenue_court, acquisition, restricted, geo, programme.
Access
open, captcha, login, otp, paid, api, g2g (government only), na (not online).
Codes
Places use Local Government Directory (LGD) codes: state, district, sub-district (tehsil), block, village and gram panchayat. Census 2011 codes are given where known.
MCP server
Server URL https://indiapropertyregister.com/mcp (Streamable HTTP). Clients that support OAuth (Claude, ChatGPT and others) sign in with your India Property Register account when you add the URL: no key to copy. Others take an API key as a header. Tool calls are billed like API calls.
claude mcp add --transport http indiapropertyregister https://indiapropertyregister.com/mcp --header "Authorization: Bearer YOUR_KEY"{
"mcpServers": {
"indiapropertyregister": {
"type": "http",
"url": "https://indiapropertyregister.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}Tools: search_places, get_village, list_states, list_districts, list_tehsils, list_villages, get_land_record_sources, and the free wallet tools get_wallet, top_up_wallet and get_payment.
Code examples
curl -H "Authorization: Bearer YOUR_KEY" \
"https://indiapropertyregister.com/api/v1/search?q=Rampur"import requests
H = {"Authorization": "Bearer YOUR_KEY"}
r = requests.get("https://indiapropertyregister.com/api/v1/search", params={"q": "Rampur"}, headers=H, timeout=30)
r.raise_for_status()
for v in r.json()["villages"]:
village = requests.get(f"https://indiapropertyregister.com/api/v1/village/{v['lgd']}", headers=H, timeout=30).json()
print(village["name"], village["tehsil"]["name"], village["pincode"])const H = { Authorization: "Bearer YOUR_KEY" };
const res = await fetch("https://indiapropertyregister.com/api/v1/village/125245?geometry=geojson", { headers: H });
if (!res.ok) throw new Error((await res.json()).message);
const v = await res.json();
console.log(v.name, v.district.name, v.geometry.type);Best practices
- Cache what you repeat: the place hierarchy changes rarely.
- Store LGD codes, not names: names are spelled differently by every portal.
- Show the source and date of any land record you display, and never present it as proof of title.