PRISM·lidarcloud — REST API

Process LiDAR programmatically: upload a point cloud, poll until done, download the survey-grade product zip. All docs · Open the app

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 accessCreate 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

CLI

pip install prism-lidarcloud
export PRISM_API_KEY=prism_live_xxxxxxxxxxxx

# 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":"","status":"queued","status_url":"...","download_url":"..."}

# 2) poll
curl -sS https://app.lidarcloud.app/api/v1/jobs/ -H "Authorization: Bearer $KEY"

# 3) download when status == "done"
curl -sS -L https://app.lidarcloud.app/api/v1/jobs//download \
     -H "Authorization: Bearer $KEY" -o products.zip

3 · Endpoints

POST/api/v1/jobs

Submit a point cloud for processing. multipart/form-data:

fielddefaultnotes
filerequired — .las/.laz
align3depnone · 3dep (USGS reference) · upload (send a reference file) · existing (ref_site)
referencesecond cloud for paired change detection (with align=upload)
change1run change detection vs the reference
classify1semantic point classification (8 ASPRS classes)
dem_resautoauto · 25cm · 50cm · 100cm
vdatumellipsoidalellipsoidal · navd88 (GEOID18)
colorizeautovisual true-colour drape for no-RGB clouds (public imagery): auto (on when the cloud has no RGB) · on · off. Visual layer only — never affects the DEM/classification; shipped as a separate *_colorized.las
report1include the accuracy report (Word)
cad1include the CAD bundle (DXF + LandXML)

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 statusqueued · 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}.

4 · Errors

codemeaning
401missing/invalid/revoked API key
403account suspended, or key-management attempted via the API
404job not found / not visible to this account
413file exceeds the single-machine point limit
429rate limit — back off and retry

Keys carry your account's quota, visibility and billing. Never embed a key in client-side code or a public repo. Questions? lidarcloud.app