Odisha search
Record of Rights (Odisha Bhulekh Khatiyan) LIVE
The khatiyan for a village by khatiyan number, plot number or holder name, from Bhulekh.
What you get
Holders with father’s name, caste and residence, status, rent and dues, and every plot in the khatiyan with its kisam and area, plus a printed copy of each khatiyan. A plot on several khatiyans returns each of them (up to 10).
Request parameters
These are the keys of params in the request body. A value shown as from lookup is a code you get by searching for the item by name first, not text you type.
khatiyan_no, plot_no, tenant_name: Give one of: khatiyan number, plot number or holder name.
| Name | Type | Required | Example | Comes from |
|---|---|---|---|---|
district_code | string | Required | from lookup “district” | odisha_district lookup, option meta “value” |
tehsil_code | string | Required | from lookup “tehsil” | odisha_tehsil lookup, option meta “value” |
ri_code | string | Required | from lookup “ri” | odisha_ri lookup, option meta “value” |
village_code | string | Required | from lookup “village” | odisha_village lookup, option meta “value” |
khatiyan_no | string | One of | 112/336 | field "khatiyan_no" |
plot_no | string | One of | 500 | field "plot_no" |
tenant_name | string | One of | <tenant_name> | field "tenant_name" |
Field details
| Field | Type | Notes |
|---|---|---|
districtDistrict | lookup | |
tehsilTehsil | lookup | |
riRI Circle | lookup | |
villageVillage (Mouza) | lookup | Only the districts BhuNaksha has mapped so far: Kalahandi, Sundargarh, Nuapada. |
khatiyan_noKhatiyan Number | text | Max 30 characters. |
plot_noPlot Number | text | Max 30 characters. |
tenant_nameHolder Name | text | Part of the name as Bhulekh writes it, in Odia. Max 80 characters. |
Resolve names to codes
Search for each item by name, take the code from the match and pass it in params. A lookup needs a query of at least 2 characters and returns at most 10 matches (details).
| Field | Lookup | Needs first | Example call |
|---|---|---|---|
district | odisha_district | - | GET /api/v1/search/lookups?state=odisha&dim=odisha_district&q=<name> |
tehsil | odisha_tehsil | district | GET /api/v1/search/lookups?state=odisha&dim=odisha_tehsil&q=<name>&district=<code> |
ri | odisha_ri | district, tehsil | GET /api/v1/search/lookups?state=odisha&dim=odisha_ri&q=<name>&district=<code>&tehsil=<code> |
village | odisha_village | district, tehsil, ri | GET /api/v1/search/lookups?state=odisha&dim=odisha_village&q=<name>&district=<code>&tehsil=<code>&ri=<code> |
Example request
Replace each <...> with the value from its lookup match, and the sample values with your own.
curl -X POST "https://legiscore.in/api/v1/search" \
-H "Authorization: Bearer lsk_your_api_key" \
-H "Idempotency-Key: los-case-8841" \
-H "Content-Type: application/json" \
-d '{
"state": "odisha",
"search_type": "ror",
"params": {
"district_code": "<district.value>",
"tehsil_code": "<tehsil.value>",
"ri_code": "<ri.value>",
"village_code": "<village.value>",
"khatiyan_no": "112/336",
"plot_no": "500",
"tenant_name": "<tenant_name>"
},
"label": "Record of Rights (Odisha Bhulekh Khatiyan) - case 8841"
}'import requests
resp = requests.post(
"https://legiscore.in/api/v1/search",
headers={"Authorization": "Bearer lsk_your_api_key", "Idempotency-Key": "los-case-8841"},
json={
"state": "odisha",
"search_type": "ror",
"params": {
"district_code": "<district.value>",
"tehsil_code": "<tehsil.value>",
"ri_code": "<ri.value>",
"village_code": "<village.value>",
"khatiyan_no": "112/336",
"plot_no": "500",
"tenant_name": "<tenant_name>"
},
"label": "Record of Rights (Odisha Bhulekh Khatiyan) - case 8841"
},
)
resp.raise_for_status()
print(resp.json())const resp = await fetch("https://legiscore.in/api/v1/search", {
method: "POST",
headers: { Authorization: "Bearer lsk_your_api_key", "Idempotency-Key": "los-case-8841", "Content-Type": "application/json" },
body: JSON.stringify({
"state": "odisha",
"search_type": "ror",
"params": {
"district_code": "<district.value>",
"tehsil_code": "<tehsil.value>",
"ri_code": "<ri.value>",
"village_code": "<village.value>",
"khatiyan_no": "112/336",
"plot_no": "500",
"tenant_name": "<tenant_name>"
},
"label": "Record of Rights (Odisha Bhulekh Khatiyan) - case 8841"
}),
});
if (!resp.ok) throw new Error(await resp.text());
console.log(await resp.json());Sample responses
202 Accepted, at submit
{
"data": {
"searches": [
{
"id": "SRCH-2026-A1B2C3D4",
"state": "odisha",
"search_type": "ror",
"label": "Record of Rights (Odisha Bhulekh Khatiyan) - case 8841",
"status": "queued",
"progress": 0,
"note": null,
"found": null,
"records": null,
"record_count": null,
"documents": [],
"error": null,
"refunded": false,
"replayed": false,
"batch_id": null,
"recovery_of": null,
"source": "api",
"created_at": "2026-10-05T10:00:00Z",
"completed_at": null
}
],
"rejected": [],
"replayed": {
"free": 0,
"billed": 0,
"idempotent": 0
},
"batch_id": null
}
}200 OK, GET /api/v1/search/{id} once finished
{
"data": {
"id": "SRCH-2026-A1B2C3D4",
"state": "odisha",
"search_type": "ror",
"label": "Record of Rights (Odisha Bhulekh Khatiyan) - case 8841",
"status": "succeeded",
"progress": 100,
"note": null,
"found": true,
"records": [
{
"...": "one object per row the source returned; shape varies by search"
}
],
"record_count": 1,
"documents": [
{
"filename": "result.pdf",
"content_type": "application/pdf",
"bytes": 184233,
"withheld": false
}
],
"error": null,
"refunded": false,
"replayed": false,
"batch_id": null,
"recovery_of": null,
"source": "api",
"created_at": "2026-10-05T10:00:00Z",
"completed_at": "2026-10-05T10:03:12Z"
}
}records holds one object per row the source returned. Its shape is specific to this search. Documents are fetched with GET /api/v1/search/{id}/documents/{filename}.