LandLens Home
Land Lens

Welcome Back

Sign in to continue to dashboard

By continuing, you agree to our Terms, Privacy Policy & Refund Policy

Developer guide

LandLens API

The Tamil Nadu land, registration, planning and court registers as 116 tools you can call over HTTPS or connect to an AI app over MCP. Encumbrance, patta, FMB, guideline values, approvals, RERA, CERSAI and more, read from the source registers, priced per answer, 49 of them free.

Base URLhttps://verified.realestate/api/v1
MCP serverhttps://verified.realestate/mcp
Tools
116, 49 free
Auth
Bearer key or OAuth
Format
JSON in, JSON out
Coverage
Tamil Nadu registers

Quickstart

  1. Create a key. Sign in on LandLens with your phone number and open API keys on the dashboard. The key starts with llk_ and is shown once.
  2. Check it works. GET /me returns your balance and what the key may spend. It is free.
  3. Make a call. Every tool is POST /tools/{name} with its arguments as the JSON body. Start with a free one, such as finding the survey number at a map point.
# 1. who am I, and what is left
curl https://verified.realestate/api/v1/me -H "Authorization: Bearer $LANDLENS_KEY"

# 2. the parcel at a map point (free)
curl -X POST https://verified.realestate/api/v1/tools/resolve_parcel \
  -H "Authorization: Bearer $LANDLENS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lat": 12.9010, "lng": 80.2279}'

The second call returns the survey number, village, taluk, district, the revenue codes the other tools take, the extent and the boundary. Most work starts there: the codes it returns feed the encumbrance, guideline value and FMB calls.

Prefer Postman?

Download the collection with every tool, or one API's from its reference page. In Postman choose File, Import, pick the file, and set the collection variable apiKey to your key. Real requests and answers are saved as examples, and a quote's approval and a job's status are chained for you.

Authentication

Send the key in the Authorization header on every call: Authorization: Bearer llk_.... Keys belong to your LandLens account and spend from its wallet, personal or team.

API keys

For scripts and servers. When you create one you can limit it to named tools and give it a daily credit cap, so a loop cannot run away with the wallet. Revoke it on the dashboard and it stops on the next call.

OAuth

For AI apps. Claude, ChatGPT, Perplexity, Claude Code and Codex sign in with your LandLens phone number and never see a key. A connected app can spend at most 500 credits a day.

Never put a key in a browser page or a mobile app. Call LandLens from your server and pass the answer on.

Making a call

GET/toolsEvery tool, its price and its input schema.
POST/tools/{name}Run one tool. The JSON body is its arguments.
GET/meBalance, wallet, today's spend and this credential's cap.
GET/openapi.jsonThe OpenAPI description, for code generators and Custom GPTs.
GET/postman.jsonA Postman collection of every tool. /postman/{name}.json for one.

Retries. Send an Idempotency-Key header (any string up to 255 visible characters) on calls you may retry. The first completed answer is kept for 24 hours and a repeat returns it again without running or charging. The same key with a different body is refused with 422, and one still running answers 409.

Timeouts. Most tools answer in about a second. Live government reads (an FMB sketch, a court register) usually take 5 to 30 seconds, and an approved CERSAI search about a minute, so allow 120 seconds. Work that runs longer is a long job and comes back at once with a job to poll.

The answer

Every call, paid or free, success or not, answers with the same envelope.

{
  "ok": true,
  "status": "ok",
  "data": { ... },
  "credits_quoted": 1,
  "credits_charged": 1,
  "credits_waived": 0,
  "balance_after": 4981,
  "request_id": "01M5HE65MX75473KSZSYXZC9PM"
}
FieldWhat it holds
oktrue when the call reached an answer, including an honest "nothing recorded".
statusWhat happened, in one word. See Errors for every value.
dataThe tool's answer. Its fields are on each API's reference page and in GET /tools.
credits_quoted, credits_charged, credits_waivedWhat the call was priced at, what was taken, and what was not taken because the register held nothing.
balance_afterThe wallet after this call.
request_idQuote it when you write to us about a call.
next, pollPresent on a quote and on a long job: the exact call to make next.

Names and figures in data are as the government register publishes them. Say which register and the date the result carries, and never treat a name match as proof of identity.

Credits and billing

Calls spend LandLens credits from the same wallet as the chat and the minis. Each tool's price is in GET /tools (credits, and credits_max where the price depends on the arguments) and on its reference page.

PriceHow it is charged
FreeCosts nothing. Counted against the free-call allowance below.
N credits per answerCharged only when the register answers; not_found is free.
N credits on approvalReturns a quote first. Charged when the approved run delivers.
When it starts, refunded if it failsLong jobs: held at the start and returned automatically if no result comes back.

Free calls have their own allowance: 600 an hour and 3,000 a day for an account that has bought credits, 12 an hour and 50 a day for one that has not, counted across every key and app on the account.

Calling at volume?

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.

WhatsApp 99961 29996

Quotes and approvals

A bigger job (an encumbrance pull, a CERSAI search, a certified copy) does not run on the first call. It answers "status": "proposal" with what it will do and what it costs, and a next block. Nothing is charged.

"next": {
  "tool": "approve_action",
  "arguments": { "action": "ec_transactions", "params": { ... } }
}

To go ahead, POST next.arguments to /tools/approve_action, unchanged, within 30 minutes. An edited or expired quote is refused. If the approval fails for a reason on our side, the same quote can be approved again without a second charge.

Long jobs

Work that reads a portal for minutes answers HTTP 202 with "status": "queued" and a poll block. POST its job_id to /tools/job_status every 30 to 60 seconds; data.status reads running until it ends in done or failed. A job's credit is held when it starts and returned if it fails.

Background work also carries a status_url: on a queued job, on each record of a queue_land_records batch, on an approved Verify My Land report and on a certified copy order. It shows the same answer as job_status (for a certified copy: processing, completed with the copy's link, or failed) and opens with no key or session, so you can hand it to a browser, a client or an AI app. It lasts 30 days.

A seller background check is polled the same way through /tools/seller_check_status with its check_id, about once a minute. It takes 8 to 15 minutes.

Webhooks

Rather than poll, add callback_url to the approve_action call of any queued action (an EC pull, a CERSAI search by property or by borrower). When the job is done or failed, we POST the same body job_status returns to that address, with "event": "job.completed", the job_id, its status, the data and sent_at.

The approval answer carries a webhook_secret, once; it is never shown again, including by job_status, so store it. Each delivery is signed: X-LandLens-Signature: sha256= followed by the hex HMAC-SHA256 of the raw body, keyed with that secret. Compare it before trusting the body. X-LandLens-Event and X-LandLens-Job name the event and the job.

# Python: check a delivery
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers["X-LandLens-Signature"])

Answer with any 2xx. Anything else is retried four more times, after 30 seconds, 2 minutes, 10 minutes and 30 minutes. Only a public https address of up to 500 characters is accepted; anything else is refused at approval with invalid_args and the quote stays open. Polling and the status_url keep working whatever happens to a delivery.

A CERSAI borrower search can carry up to 100 borrowers under one approval. The approval answers with the batch's job_id and item_job_ids; job_status on the batch lists each borrower with its status and verdict as it settles, and done of total.

Files

Tools that produce a document (an FMB sketch, a patta or A-register copy) return a link to it in a field ending in _url. The link opens without a key or a session, so you can hand it to a browser or an AI app as it is. It is signed for your account and lasts 7 days; after that, call the tool again for a fresh one.

Limits

60calls a minute, per credential
3,000calls a day, per credential
30 mina quote stays open

Over the rate limit you get HTTP 429 and nothing is charged. A key's daily credit cap and a connected app's ceiling answer cap_reached once spent; free tools keep working.

The tools are for your own land and your clients' deals. Bulk harvesting of owner names is refused at the source, and a connection seen doing it is disconnected.

Errors

Read status rather than the HTTP code alone: several statuses share a code.

statusHTTPWhat it means
ok200The register answered. Read data.
not_found200The register holds nothing for this. Not charged; credits_waived says how much was quoted.
proposal200A quote for a bigger job. Nothing is charged until you approve it.
queued202Accepted and running in the background. Poll the job in poll.
invalid_args422An argument is missing or cannot be used. error says which.
insufficient_credits402Not enough credits. required_credits, available_credits and topup say how many and where.
scope_denied403This key or app may not call this tool, or the tool needs a plan the account does not hold.
cap_reached403The credential has spent its daily credit cap. Free tools keep working.
free_limit_reached403The account has used its free calls for now. retry_after is the wait in seconds; paid tools keep working.
unauthorized401No valid key or token on the request.
unknown_tool404No tool by that name. GET /tools lists them.
error502The tool could not complete. Nothing is charged; try again.

MCP and AI apps

The same tools are an MCP server at https://verified.realestate/mcp (Streamable HTTP). Add it as a custom connector in Claude, ChatGPT or Perplexity and sign in with your LandLens phone number; your AI then picks the right tool, says the price before a paid call and asks before approving a quote. Step-by-step setup for each app.

# Claude Code
claude mcp add --transport http landlens https://verified.realestate/mcp

# Codex
codex mcp add landlens --url https://verified.realestate/mcp

A coding agent can set itself up from the setup prompt.

Every tool

116 tools, 49 free. Those with a full reference page are linked; the rest are described in GET /tools. The 11 LandLens Intelligence tools come with the enterprise plan and are not listed here.

ToolWhat it answersPrice
Background job status
job_status
Poll a queued job (a record pull, a price map, a geo insight, an approved encumbrance certificate pull) by its job_id. Free
Credit balance
balance
Your LandLens credit balance, what this credential has spent today, and where to top up. Free
Seller check status
seller_check_status
Read back a seller background check that an approval started, by the check_id that approval returned. Free
Approve a proposal
approve_action
Run a proposal another tool returned (an encumbrance certificate pull, a certified copy order, a CERSAI or eCourts search, a Chennai utility fetch, a seller ... Quoted, on approval