Source: https://legiscore.in/docs/states/kerala/land-tax

# Land Tax & Ownership (ReLIS) (Kerala)

Who holds a parcel and whether its land tax is paid, from the Revenue Department, by resurvey number or thandaper number.

Status: LIVE. Source status: No recent runs. Typical time: up to 5 min. state: `kerala`, search_type: `land_tax`.

Coverage note: Not found in ReLIS. ReLIS covers only land whose ownership was updated or whose tax was paid through it, so this is not proof that no land-tax or ownership record exists.

## What you get

Thandaper number and holder with address, area, the last land tax paid and any arrear or current dues, for each parcel. ReLIS covers only land updated through it, so "not found" is not proof that no record exists.

## Request parameters

Keys of `params`. A value "from lookup" is a code you get by searching for the item by name first (https://legiscore.in/docs/api/lookups).

- At least one of `survey_no`, `thandaper_no`: Give the resurvey number or the thandaper number.

| Name | Type | Required | Example | Comes from |
| --- | --- | --- | --- | --- |
| `village_code` | string | required | from lookup "village" | kerala_relis_village lookup (https://legiscore.in/docs/api/lookups#kerala-kerala_relis_village) |
| `block_no` | string | required | 1 | field "block_no" |
| `survey_no` | string | one of | 10 | field "survey_no" |
| `subdiv_no` | string | optional | Optional | field "subdiv_no" |
| `thandaper_no` | string | one of | 256 | field "thandaper_no" |

## Field details

| Field | Type | Notes |
| --- | --- | --- |
| `district` (District) | lookup |  |
| `taluk` (Taluk) | lookup |  |
| `village` (Village) | lookup | As the Revenue Department lists it. Only resurveyed villages can be searched. |
| `block_no` (Block Number) | text | The resurvey block printed on the deed or tax receipt. Max 4 characters. |
| `survey_no` (Resurvey Number) | text | Max 10 characters. |
| `subdiv_no` (Subdivision) | text | Max 10 characters. |
| `thandaper_no` (Thandaper Number) | text | Instead of the resurvey number: every parcel of the holding is returned. Max 10 characters. |

## Resolve names to codes

| Field | Lookup | Needs first |
| --- | --- | --- |
| district | kerala_relis_district | - |
| taluk | kerala_relis_taluk | district |
| village | kerala_relis_village | district, taluk |

q is required (2+ characters), at most 10 matches.

## Example request

Replace each <...> with the value from its lookup match.

**curl**

```bash
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": "kerala",
  "search_type": "land_tax",
  "params": {
    "village_code": "<village.value>",
    "block_no": "1",
    "survey_no": "10",
    "subdiv_no": "Optional",
    "thandaper_no": "256"
  },
  "label": "Land Tax & Ownership (ReLIS) - case 8841"
}'
```

**Python**

```python
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": "kerala",
      "search_type": "land_tax",
      "params": {
        "village_code": "<village.value>",
        "block_no": "1",
        "survey_no": "10",
        "subdiv_no": "Optional",
        "thandaper_no": "256"
      },
      "label": "Land Tax & Ownership (ReLIS) - case 8841"
    },
)
resp.raise_for_status()
print(resp.json())
```

**Node**

```js
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": "kerala",
    "search_type": "land_tax",
    "params": {
      "village_code": "<village.value>",
      "block_no": "1",
      "survey_no": "10",
      "subdiv_no": "Optional",
      "thandaper_no": "256"
    },
    "label": "Land Tax & Ownership (ReLIS) - case 8841"
  }),
});
if (!resp.ok) throw new Error(await resp.text());
console.log(await resp.json());
```

## Sample responses

202 Accepted, at submit:

```json
{
  "data": {
    "searches": [
      {
        "id": "SRCH-2026-A1B2C3D4",
        "state": "kerala",
        "search_type": "land_tax",
        "label": "Land Tax & Ownership (ReLIS) - 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:

```json
{
  "data": {
    "id": "SRCH-2026-A1B2C3D4",
    "state": "kerala",
    "search_type": "land_tax",
    "label": "Land Tax & Ownership (ReLIS) - 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"
  }
}
```
