API Endpoints
This page lists the most relevant application endpoints used by UI workflows.
Map APIs
| Endpoint |
Method |
Auth |
Purpose |
/parcels/api/geojson/ |
GET |
login |
Map data (grid summaries or parcel features, supports ref_ts) |
/parcels/api/extent/ |
GET |
login |
Bounding extent of visible parcels (supports ref_ts) |
/parcels/api/geojson/<uuid:pk>/ |
GET |
login |
Single parcel version-row GeoJSON detail |
/parcels/api/select/ |
POST |
login |
Shape + predicate based selection |
/parcels/api/inline-update/<uuid:pk>/ |
POST |
staff |
Inline map edit that creates a new parcel version |
/api/rasters/ |
GET |
login |
Active/ready DEM and landcover overlay catalog for map settings |
/api/rasters/sample/ |
GET |
login |
Raster point sample at lat/lng for selected slug values (samples[] response) |
/raster-tiles/<path> |
GET |
login |
Raster tile endpoint backed by persistent RASTER_TILES_ROOT |
Parcel Snapping APIs
| Endpoint |
Method |
Minimum role |
Purpose |
/parcels/api/map-settings/snapping/ |
GET |
authenticated user |
Lazily create and return the current user's complete versioned settings |
/parcels/api/map-settings/snapping/ |
PUT |
authenticated user |
Atomically replace the current user's complete settings; user IDs and unknown fields are rejected |
/parcels/api/snapping/candidate/ |
POST |
active-dataset Editor |
Canonicalize one selected target vertex or edge position against current official geometry |
/parcels/api/snapping/trace/ |
POST |
active-dataset Editor |
Return both authoritative exterior-ring directions between compatible anchors |
Candidate and trace requests accept transient EPSG:4326 JSON points/references, not geometry files. PostGIS transforms them to the frozen projected parcel CRS for extraction, distance, fraction, path, and length work. Responses contain display coordinates only.
Stable errors are snapping_validation_error (400), snapping_permission_denied (403), scoped snapping_target_not_found (404), and snapping_target_stale (409). Inaccessible targets do not return parcel labels or geometry.
Parcel Overlap Advisory API
| Endpoint |
Method |
Scope |
Purpose |
/parcels/api/overlap-check/ |
POST |
authenticated subject access plus Editor |
Transform WGS84 proposal polygons to storage CRS and return versioned, read-only conflict evidence |
The server derives the dataset, stable parcel identity, and declared sources from
fresh_create, parcel, or draft subject context. It rejects client dataset or
source substitution. Responses include safe target labels, square-metre areas,
WGS84 intersection geometry, complete counts, and at most 500 issue objects.
List/Search/Selection APIs
| Endpoint |
Method |
Auth |
Purpose |
/parcels/search/ajax/ |
GET |
login |
Autocomplete search |
/parcels/api/filtered-ids/ |
GET |
login |
IDs of full filtered result set |
/parcels/batch/ |
POST |
login |
Batch export/delete/group edit (effective_at supported for write actions) |
Dataset Selector APIs
| Endpoint |
Method |
Auth |
Purpose |
/auth/profile/set-active-dataset/ |
POST |
login |
Validate + set user active dataset, then redirect to safe next/referrer |
/auth/api/datasets/accessible/ |
GET |
login |
List active datasets accessible to current user with effective role |
/api/datasets/accessible/ |
GET |
login |
Root alias of accessible-datasets API for UI integrations |
Upload and Analytics APIs
| Endpoint |
Method |
Auth |
Purpose |
/parcels/upload/ |
GET/POST |
login |
Upload/analyze vector data |
/parcels/upload/<uuid:pk>/preview/ |
GET/POST |
login |
Preview + apply upload decision |
/parcels/api/statistics/ |
POST |
internal/staff |
Statistics data for ECharts dashboard |
Export/Download Endpoints
| Endpoint |
Method |
Auth |
Purpose |
/parcels/download/ |
GET |
login |
Download visible parcels in GIS formats |
/parcels/export/?format=csv|geojson |
GET |
internal/staff |
Legacy export helpers |
Parcel Topology Change Requests
All topology endpoints require login and dataset-scoped visibility. Inaccessible
request and parcel identifiers return 404 without disclosing existence.
| Endpoint |
Method |
Minimum role |
Purpose |
/parcels/api/change-requests/ |
GET |
Viewer |
List visible split and merge requests |
/parcels/api/change-requests/ |
POST |
Editor |
Create a grouped request using operation_type, source_ids, and merge primary_source_id |
/parcels/api/change-requests/<request_id>/ |
GET |
Viewer |
Return canonical sources, saved split line, outputs, projected areas, validation, events, lineage, and permitted actions |
/parcels/api/change-requests/<request_id>/split-line/ |
PUT |
Editor |
Transform one display line to the storage CRS and atomically generate exactly two PostGIS split outputs |
/parcels/api/change-requests/<request_id>/outputs/ |
PATCH |
Editor |
Update output identifiers and eligible business attributes; geometry keys are rejected |
/parcels/api/change-requests/<request_id>/output-import/ |
POST |
Editor |
Import multipart .gpkg or .zip output geometry with a declared projected CRS and known linear units |
/parcels/api/change-requests/<uuid>/actions/validate/ |
POST |
Editor |
Run authoritative PostGIS validation |
/parcels/api/change-requests/<uuid>/actions/submit/ |
POST |
Editor |
Validate and submit the complete grouped request |
/parcels/api/change-requests/<uuid>/actions/review-accept/ |
POST |
Reviewer |
Accept a submitted request for approval |
/parcels/api/change-requests/<uuid>/actions/final-approve/ |
POST |
Approver |
Atomically retire sources, create results, transaction, and lineage |
/parcels/api/change-requests/<uuid>/actions/reject/ |
POST |
Reviewer/Approver |
Reject with a required reason |
/parcels/api/change-requests/<uuid>/actions/cancel/ |
POST |
State-dependent |
Cancel an uncommitted request |
/parcels/api/change-requests/<uuid>/events/ |
GET |
Viewer |
Return scoped workflow-event history |
Topology errors use a stable object with error, message, fields, and
conflicting_source_ids. Final approval additionally returns transaction_id,
effective_at, retired source IDs, resulting version IDs, and lineage edge IDs.
Permissions Notes
- All listed APIs require authentication unless explicitly public.
- Non-staff visibility generally resolves to: own parcels + public parcels.
- Active dataset filters are applied at the queryset layer for parcel APIs.
- Dataset selector options are server-derived; client-side filtering is convenience only.
- Read APIs default to active rows (
valid_to IS NULL, record_status = active) unless explicit historical query params are used.
ref_ts historical reads apply validity-window filters and exclude void rows.
URL Semantics for Detail Routes
/parcels/<uuid:pk>/ resolves a specific immutable version row.
/parcels/id/<parcel_id>/ resolves the current active row for that parcel ID.