{"openapi":"3.1.0","info":{"title":"PlotFinder — Encumbrance API","description":"What restricts this property? Servitudes, leases, mineral rights, state-land status and proclamation areas that burden or touch a South African land parcel, intersected from the Chief Surveyor-General's cadastral spatial data.","version":"0.1.0"},"paths":{"/api/v1/encumbrances/parcel/{lpi}":{"get":{"tags":["encumbrances"],"summary":"Everything that restricts a parcel","description":"All encumbrances intersecting the parcel with this LPI: class, raw and normalised type, SG number, the intersecting geometry, overlap in m² and as a share of the parcel, and the relationship (crosses | within | contains | touches).","operationId":"parcel_encumbrances_api_v1_encumbrances_parcel__lpi__get","parameters":[{"name":"lpi","in":"path","required":true,"schema":{"type":"string","title":"Lpi"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/summary/parcel/{lpi}":{"get":{"tags":["encumbrances"],"summary":"Cheap screening summary for one parcel","description":"Boolean-ish screening at volume: does anything touch this parcel, how many per class, and the largest single overlap as a percentage of the parcel. Priced below the full /parcel endpoint.","operationId":"parcel_summary_api_v1_encumbrances_summary_parcel__lpi__get","parameters":[{"name":"lpi","in":"path","required":true,"schema":{"type":"string","title":"Lpi"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/at":{"get":{"tags":["encumbrances"],"summary":"Encumbrances at a point","operationId":"at_point_api_v1_encumbrances_at_get","parameters":[{"name":"latitude","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"}},{"name":"longitude","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},{"name":"radius_m","in":"query","required":false,"schema":{"type":"number","maximum":1000,"minimum":0,"default":0,"title":"Radius M"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/within":{"get":{"tags":["encumbrances"],"summary":"Encumbrances in a bounding box","operationId":"within_api_v1_encumbrances_within_get","parameters":[{"name":"bbox","in":"query","required":true,"schema":{"type":"string","description":"minlon,minlat,maxlon,maxlat","title":"Bbox"},"description":"minlon,minlat,maxlon,maxlat"},{"name":"encumbrance_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encumbrance Class"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/intersect":{"post":{"tags":["encumbrances"],"summary":"Corridor screening","description":"POST a GeoJSON LineString or Polygon — a proposed fibre route, pipeline or road — and get every encumbrance and every affected parcel along it, with per-parcel overlap length or area. Lines up to 200 km; polygons up to 2,500 km².","operationId":"intersect_api_v1_encumbrances_intersect_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/search":{"get":{"tags":["encumbrances"],"summary":"Filter encumbrances by attribute","operationId":"search_api_v1_encumbrances_search_get","parameters":[{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province"}},{"name":"encumbrance_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encumbrance Class"}},{"name":"ease_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ease Type"}},{"name":"ease_type_normalised","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ease Type Normalised"}},{"name":"sg_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"exact, or * as wildcard","title":"Sg Number"},"description":"exact, or * as wildcard"},{"name":"record_status","in":"query","required":false,"schema":{"type":"string","default":"current","title":"Record Status"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/batch":{"post":{"tags":["encumbrances"],"summary":"Screen up to 500 parcels in one call","description":"Items are {lpi} or {latitude, longitude}; results align positionally, null where no parcel was found.","operationId":"batch_api_v1_encumbrances_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/coverage":{"get":{"tags":["encumbrances"],"summary":"What is loaded, per province and class","operationId":"coverage_api_v1_encumbrances_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/encumbrances/heatmap":{"get":{"tags":["encumbrances"],"summary":"Coverage-map data: density cells or class-keyed boundaries","description":"Drives coverage maps, including the PlotFinder admin panel's Encumbrance layer. The server picks the answer from the viewport: density cells (whole multiples of 0.01°, busiest-first, capped at 4,000 with an explicit truncation flag) when zoomed out, actual encumbrance geometries — scale-gated per class — when zoomed in or when view=boundaries.","operationId":"heatmap_api_v1_encumbrances_heatmap_get","parameters":[{"name":"north","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"North"}},{"name":"south","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"South"}},{"name":"east","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"East"}},{"name":"west","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"West"}},{"name":"view","in":"query","required":false,"schema":{"type":"string","default":"auto","title":"View"}},{"name":"classes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma list; default all","title":"Classes"},"description":"comma list; default all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/tiles/{z}/{x}/{y}.mvt":{"get":{"tags":["encumbrances"],"summary":"Vector tiles, colour-keyed by class","operationId":"tile_api_v1_encumbrances_tiles__z___x___y__mvt_get","parameters":[{"name":"z","in":"path","required":true,"schema":{"type":"integer","title":"Z"}},{"name":"x","in":"path","required":true,"schema":{"type":"integer","title":"X"}},{"name":"y","in":"path","required":true,"schema":{"type":"integer","title":"Y"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/encumbrances/{encumbrance_uid}":{"get":{"tags":["encumbrances"],"summary":"One encumbrance, with affected parcels","operationId":"detail_api_v1_encumbrances__encumbrance_uid__get","parameters":[{"name":"encumbrance_uid","in":"path","required":true,"schema":{"type":"integer","title":"Encumbrance Uid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"servers":[{"url":"https://api.starlightsoftware.co.bw"}],"security":[{"ApiKey":[]}]}