API Reference · v1

Landefy REST API

Programmatic access to parcel verification, litigation records, and watchlist monitoring. Available on Business and Enterprise tiers. Early access opening Q1 2027.

Overview

The Landefy API is a REST interface for verifying Ghanaian land parcels. All endpoints accept and return JSON. All requests require authentication via bearer token.

Records are sourced from the Lands Commission, court registries, the Office of the Administrator of Stool Lands, and the Survey Department. Each record in the response includes a source field and an updated timestamp.

The API is currently in private preview. Business tier customers can request access now.

Authentication

Pass your API key in the Authorization header as a bearer token on every request.

Authorization: Bearer lf_live_xxxxxxxxxxxxxxxxxxxxxxxx

Keys are scoped to a single environment — lf_live_ for production, lf_test_ for sandbox. Never expose a live key in client-side code or commit it to a repository.

Base URL

https://api.landefy.com

All endpoints are relative to this base. Requests must use HTTPS. HTTP requests are rejected with a 301 redirect.

Parcels

Retrieve a single parcel record by ID. The response includes custodian, litigation status, history, and coordinates.

GET/v1/parcels/:id
curl https://api.landefy.com/v1/parcels/1234-2025 \
  -H "Authorization: Bearer lf_live_xxx"

Response:

{
  "parcel_id": "1234/2025",
  "region": "Greater Accra",
  "district": "Accra Metropolitan",
  "custodian": {
    "name": "Mensah Family Trust",
    "type": "family",
    "source": "Lands Commission",
    "updated": "2026-08-14"
  },
  "litigation": {
    "status": "active",
    "case_count": 1
  },
  "area": {
    "acres": 1.25,
    "hectares": 0.51
  },
  "source": "Lands Commission",
  "updated": "2026-08-14"
}

Litigation

Returns active and historic litigation attached to a parcel. Status values are clear, review, or active.

GET/v1/parcels/:id/litigation
{
  "status": "active",
  "cases": [
    {
      "case_number": "LD-2291/2024",
      "court": "High Court, Accra",
      "parties": "Amoako v. Mensah Family",
      "filed": "2024-03-12",
      "next_hearing": "2026-11-08",
      "source": "High Court registry",
      "updated": "2026-09-22"
    }
  ]
}

History

Returns recorded transfers, mortgages, charges, and other interests in reverse chronological order.

GET/v1/parcels/:id/history
{
  "entries": [
    {
      "date": "2019-04-22",
      "type": "transfer",
      "to": "Mensah Family Trust",
      "source": "Lands Commission"
    },
    {
      "date": "2015-09-01",
      "type": "mortgage",
      "holder": "GCB Bank",
      "source": "Lands Commission"
    }
  ]
}

Batch verification

Verify up to 1,000 parcels in a single request. Returns a job ID. Poll the job status endpoint or subscribe to the batch.completed webhook.

POST/v1/parcels/batch
curl -X POST https://api.landefy.com/v1/parcels/batch \
  -H "Authorization: Bearer lf_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "parcels": ["1234/2025", "5678/2025", "9012/2025"]
  }'

Watchlist

Add parcels to the watchlist and receive webhook notifications when litigation, ownership, or encumbrances change.

POST/v1/watchlist
{
  "parcel_id": "1234/2025",
  "webhook_url": "https://your-system.example/webhooks/landefy"
}

Webhooks

Landefy sends signed POST requests to your endpoint when a watched parcel changes. Verify the X-Landefy-Signature header (HMAC-SHA256 with your webhook secret) before processing.

Available events:

parcel.litigation.filed

New case filed against a watched parcel

parcel.litigation.resolved

Case resolved, withdrawn, or judgment issued

parcel.ownership.changed

Registered custodian has changed

parcel.encumbrance.added

Mortgage, caveat, or charge registered

parcel.encumbrance.lifted

Encumbrance removed from the title

batch.completed

Batch verification job finished

Example payload:

{
  "event": "parcel.litigation.filed",
  "created": "2026-09-22T14:34:12Z",
  "data": {
    "parcel_id": "1234/2025",
    "case_number": "LD-2291/2024",
    "court": "High Court, Accra"
  }
}

Errors

Errors return a JSON body with an HTTP status code, a machine-readable code, and a human-readable message.

{
  "error": {
    "code": "not_found",
    "message": "Parcel 1234/2025 is not in the registry."
  }
}

Status

Code

Description

400
bad_request

Malformed request body or parameters

401
unauthorized

Missing or invalid API key

403
forbidden

API key lacks permission for this resource

404
not_found

Parcel or resource not found in the registry

422
unprocessable

Request is valid but cannot be processed

429
rate_limit_exceeded

Too many requests — see Retry-After header

500
server_error

Unexpected error on our side

503
upstream_unavailable

Upstream data source temporarily unavailable

Rate limits

Rate limits are per API key and reset every 60 seconds. Exceeding the limit returns 429 with a Retry-After header.

Tier

Sustained

Burst

Monthly

Business

60 req/min
120
50,000

Enterprise

Custom
Custom
Unlimited

Early access

The API is in private preview. Business tier customers get priority access to the sandbox environment when it opens in Q1 2027.

Send your integration use case to api@landefy.com. We reply within one business day.