REST API reference
The full REST reference.
Process LiDAR programmatically: upload a point cloud, poll until done, download the survey-grade
product zip — the same endpoints behind the terminal example above. Prefer
the browser? See the user manual.
Base URL https://app.lidarcloud.app. All endpoints are versioned
under /api/v1 and authenticate with a Bearer API key. API jobs use the same engine,
quota and billing as the web app and appear in your usage console tagged API.
1 · Authentication #
Create a key in the app: sign in → click your email → API access →
Create API key. The key (prism_live_…) is shown once — store it like
a password. Send it as a Bearer token on every request:
Authorization: Bearer prism_live_xxxxxxxxxxxxxxxx
Revoke a key any time from the same panel; revocation takes effect immediately.
2 · Quickstart #
The client is published on PyPI:
pypi.org/project/prism-lidarcloud
— zero dependencies (pure Python standard library).
CLI
# install the client
pip install prism-lidarcloud
export PRISM_API_KEY=prism_live_xxxxxxxxxxxx # PowerShell: $env:PRISM_API_KEY="prism_live_..."
# upload, wait, download in one step
prism run scan.las --align 3dep --out products.zip
Python
from prism_lidarcloud import Client
c = Client() # reads PRISM_API_KEY
out = c.run("scan.las", out="products.zip", align="3dep", change=True)
print("saved", out)
curl
KEY=prism_live_xxxxxxxxxxxx
# 1) submit
curl -sS -X POST https://app.lidarcloud.app/api/v1/jobs \
-H "Authorization: Bearer $KEY" \
-F file=@scan.las -F align=3dep
# -> {"job_id":"<id>","status":"queued","status_url":"...","download_url":"..."}
# 2) poll
curl -sS https://app.lidarcloud.app/api/v1/jobs/<id> -H "Authorization: Bearer $KEY"
# 3) download when status == "done"
curl -sS -L https://app.lidarcloud.app/api/v1/jobs/<id>/download \
-H "Authorization: Bearer $KEY" -o products.zip
3 · Endpoints #
POST/api/v1/jobs
Submit a point cloud for processing. multipart/form-data:
Returns 202 with {job_id, status, status_url, download_url, quota_jobs}.
A job consumes your account quota exactly like a web upload.
GET/api/v1/jobs/{job_id}
Poll a job. Returns {job_id, status, stage, pct, error, download_url} where
status ∈ queued · running · done · error.
download_url is non-null once done.
GET/api/v1/jobs/{job_id}/download
Stream the finished product zip (404 until the job is done). Optional ?clouds=0
omits the classified point clouds. The zip holds the bare-earth DEM, DSM, CHM,
DEM-uncertainty rasters (GeoTIFF), the AOI boundary, the classified cloud, and — unless
disabled — the accuracy report (Word) + CAD bundle (DXF + LandXML). When colorization runs, a
separate *_colorized.las + a colorize.json provenance sidecar are included
(the canonical cloud stays RGB-free). Paired/3DEP runs add alignment + change products.
GET/api/v1/jobs
List your account’s jobs: {jobs:[{job_id, name, status, source, …}], count}.
5 · Browser endpoints (session-authenticated) #
These power the web app’s interactive views. They authenticate with your
signed-in session cookie and dataset ownership — not with an API key — so
they are not part of the stable /api/v1 programmatic surface. Documented here for
completeness.
GET/api/dep3cloud?site={id}
Render the PRISM-3DEP DEM (the bare-earth raster our engine builds from the raw
USGS 3DEP point cloud) as a 2D hillshade map overlay. With ?probe=1 it does
not render — it returns {exists, cloud}, where cloud (when present)
carries the supplementary 3D point-cloud metadata
{count, origin, zspan, classes, hasrgb, url} and url points at
/api/dep3cloud_bin. The GUI uses the probe to decide whether to reveal the “Show
3DEP cloud” (3D) toggle and the “3DEP DEM (2D)” map button. 404 when
the dataset has no PRISM-3DEP product (option off / fell back to the screening-grade DEM).
GET/api/dep3cloud_bin?site={id}
Stream the decimated raw USGS 3DEP point cloud (cloud_3dep.bin) in the same packed
[xyz f32][rgb u8][class u8] format the user cloud uses, co-registered into the user
cloud’s local frame, so the 3D viewer can overlay it (amber) for an “ours vs 3DEP”
comparison. 404 when the dataset has no 3DEP cloud.
Keys carry your account’s
quota, visibility and billing. Never embed a key in client-side code or a public repo. Questions?
hello@lidarcloud.app