{"openapi":"3.1.0","info":{"title":"PlotFinder — Jurisdiction API","description":"The full chain of administrative authority over any coordinate, parcel or place in South Africa: province, district and local municipality, ward, registration division and Deeds Office of jurisdiction — who rates it, who services it, where to file.","version":"0.1.0"},"paths":{"/api/v1/jurisdiction/at":{"get":{"tags":["jurisdiction"],"summary":"The full chain of administrative authority at a point","description":"Who rates and taxes this property, who services it, which ward covers it, where to file: province, district municipality, local municipality, ward, registration division, Deeds Office of jurisdiction and township, resolved from one coordinate. Each link carries its code, name and vintage.","operationId":"at_point_api_v1_jurisdiction_at_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude, -90..90","title":"Lat"},"description":"Latitude, -90..90"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude, -180..180","title":"Lon"},"description":"Longitude, -180..180"},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resolve as at this date (YYYY-MM-DD)","title":"As At"},"description":"Resolve as at this date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/parcel/{lpi}":{"get":{"tags":["jurisdiction"],"summary":"The chain for a land parcel, by LPI","description":"The same chain as /at, resolved from the parcel's label point — with an explicit note when the parcel's boundary straddles an administrative boundary, and which boundaries it crosses.","operationId":"parcel_chain_api_v1_jurisdiction_parcel__lpi__get","parameters":[{"name":"lpi","in":"path","required":true,"schema":{"type":"string","title":"Lpi"}},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resolve as at this date (YYYY-MM-DD)","title":"As At"},"description":"Resolve as at this date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/batch":{"post":{"tags":["jurisdiction"],"summary":"The chain for up to 5,000 coordinates in one call","description":"Bulk-tag a customer database with municipality and ward: POST {\"points\": [{\"latitude\": …, \"longitude\": …}, …]} and results come back in input order — null where a point lies outside South Africa's demarcated area.","operationId":"batch_api_v1_jurisdiction_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/jurisdiction/boundaries/{boundary_type}":{"get":{"tags":["jurisdiction"],"summary":"List boundaries of a type","operationId":"list_boundaries_api_v1_jurisdiction_boundaries__boundary_type__get","parameters":[{"name":"boundary_type","in":"path","required":true,"schema":{"type":"string","title":"Boundary Type"}},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Family code, e.g. GP","title":"Province"},"description":"Family code, e.g. GP"},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Parent municipality code, e.g. CPT","title":"Municipality"},"description":"Parent municipality code, e.g. CPT"},{"name":"parent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Parent code at any level","title":"Parent"},"description":"Parent code at any level"},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As At"}},{"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/jurisdiction/boundaries/{boundary_type}/{code}":{"get":{"tags":["jurisdiction"],"summary":"One boundary, with attributes","operationId":"boundary_detail_api_v1_jurisdiction_boundaries__boundary_type___code__get","parameters":[{"name":"boundary_type","in":"path","required":true,"schema":{"type":"string","title":"Boundary Type"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As At"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/boundaries/{boundary_type}/{code}/geometry":{"get":{"tags":["jurisdiction"],"summary":"A boundary's polygon","operationId":"boundary_geometry_api_v1_jurisdiction_boundaries__boundary_type___code__geometry_get","parameters":[{"name":"boundary_type","in":"path","required":true,"schema":{"type":"string","title":"Boundary Type"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"geojson","title":"Format"}},{"name":"simplify","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":10000,"minimum":1},{"type":"null"}],"description":"metres","title":"Simplify"},"description":"metres"},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As At"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/boundaries/{boundary_type}/{code}/children":{"get":{"tags":["jurisdiction"],"summary":"The boundaries one level down","description":"Wards in a municipality, municipalities in a district, districts in a province.","operationId":"boundary_children_api_v1_jurisdiction_boundaries__boundary_type___code__children_get","parameters":[{"name":"boundary_type","in":"path","required":true,"schema":{"type":"string","title":"Boundary Type"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As At"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/search":{"get":{"tags":["jurisdiction"],"summary":"Fuzzy name search across all boundary types","description":"Trigram-matched: \"Overstrand\", \"Ward 42 Ekurhuleni\", \"Bloemfontein\".","operationId":"search_api_v1_jurisdiction_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120,"title":"Q"}},{"name":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma list; default all","title":"Types"},"description":"comma list; default all"},{"name":"as_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As At"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/coverage":{"get":{"tags":["jurisdiction"],"summary":"Layer vintages, counts and known gaps","operationId":"coverage_api_v1_jurisdiction_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/jurisdiction/heatmap":{"get":{"tags":["jurisdiction"],"summary":"Coverage-map data: administrative boundaries for a viewport","description":"Drives coverage maps, including the PlotFinder admin panel's Jurisdiction layer. Always geometry (the whole set is small): province, district and municipal outlines at any span, wards and townships scale-gated the way every family map layer behaves.","operationId":"heatmap_api_v1_jurisdiction_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":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma list; default the municipal chain","title":"Types"},"description":"comma list; default the municipal chain"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jurisdiction/tiles/{z}/{x}/{y}.mvt":{"get":{"tags":["jurisdiction"],"summary":"Administrative overlay vector tiles","operationId":"tile_api_v1_jurisdiction_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"}},{"name":"layers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layers"}}],"responses":{"200":{"description":"Successful Response"},"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":[]}]}