Aggregates and demos
Health, run options, featured demos, demo artifacts, and the parcel preview require no credential.
Screen the five-borough parcel market, explain exact tax lots, and request reproducible aerial-change evidence through one REST API. Receipts expose access scope, source lineage, and output state so clients do not have to infer them.
API_BASE=https://api.citylens.dev
# Resolve a currently published demo instead of hard-coding a run id.
SAMPLE_RUN=$(curl -fsS "$API_BASE/v1/demo/featured" \
| jq -r '.Featured[0].run_id')
# Inspect the run receipt and its available artifacts.
curl -fsS "$API_BASE/v1/demo/runs/$SAMPLE_RUN" \
| jq '{run_id, status, artifacts: [.artifacts[].name]}'
# Read pipeline QA and timing from the summary artifact.
curl -fsSL "$API_BASE/v1/demo/artifacts/$SAMPLE_RUN/run_summary.json" \
| jq '{ok, qa: {change_counts: .qa.change_counts, lidar_used: .qa.lidar_used}, performance}'
# Download one real, precomputed output through the stable API proxy.
curl -fsSL "$API_BASE/v1/demo/artifacts/$SAMPLE_RUN/change.geojson" \
-o change.geojsonhttps://api.citylens.dev, or call the documented proxy path directly as above.Health, run options, featured demos, demo artifacts, and the parcel preview require no credential.
CityLens signs UI requests with a short-lived bearer JWT. A visible identity is not treated as proof of API access.
Mint a clk_live_ key in Account → API keys. It inherits the account plan and can be revoked without changing the login password.
curl -fsS https://api.citylens.dev/v1/me \
-H "Authorization: Bearer clk_live_…" \
| jq '{user, quota}'curl -fsS "https://api.citylens.dev/v1/parcel-intel/map?top_per_borough=1000" \
-H "Authorization: Bearer clk_live_…" \
| jq '{access_scope, returned_count, available_count, inventory_complete}'{
"access_scope": "authenticated_full",
"returned_count": 5000,
"available_count": 5000,
"inventory_complete": true
}access_scope, returned_count, available_count, and inventory_complete to agree. An anonymous 125-row response is valid public_preview, not a truncated full inventory./v1/parcel-intel/indexpublicAggregate generation, selection-policy, source-freshness, and borough receipts.
/v1/parcel-intel/maptieredCompact mappable rows: public preview or complete authenticated inventory.
/v1/parcel-intel/parcel/{bbl}tieredOne ranked parcel plus its decision audit. Public access is limited to preview leads.
/v1/parcel-intel/screening/{bbl}bearerExplains published, below-cutoff, screened-out, or not-evaluated status for an exact BBL.
/v1/parcel-intel/resolve-addressbearerMaps an official NYC street address to zero, one, or multiple candidate BBLs without guessing.
/v1/parcel-intel/official-parcel/{bbl}bearerCurrent, source-specific PLUTO and ACRIS facts. This dossier does not alter rank.
Workflow, evidence-review, saved-view, and product-event routes remain pilot application contracts. Contact CityLens before building an external integration against them.
/v1/run-optionspubliccurl -fsS https://api.citylens.dev/v1/run-options | jq{
"imagery_years": [2024],
"baseline_years": [2017],
"segmentation_backends": ["sam2"],
"outputs": ["change", "mesh", "previews"],
"defaults": {
"imagery_year": 2024,
"baseline_year": 2017,
"segmentation_backend": "sam2",
"outputs": ["previews", "change", "mesh"],
"aoi_radius_m": 250
}
}/v1/runsrequires bearercurl -fsS https://api.citylens.dev/v1/runs \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{
"address": "100 E 21st St Brooklyn, NY 11226",
"outputs": ["previews", "change", "mesh"]
}'{
"run_id": "…",
"status": "queued",
"stage": "queued",
"progress": 0,
"artifacts": []
}aoi_radius_m, sam2_cfg, or local input paths./v1/runs?limit&cursorbearerOwned runs, newest first, with an opaque next cursor.
/v1/runs/{run_id}bearerOwned run state and artifact metadata. Other users' ids return 404.
/v1/demo/featuredpublicThe current allowlisted precomputed demonstrations.
/v1/demo/artifacts/{run_id}/{name}publicStreams an allowlisted demo artifact through the API.
run_summary.json artifact under qa and performance.| HTTP / state | Stable code | Client action |
|---|---|---|
| 400 | INVALID_RUN_OPTION | Refresh /v1/run-options and correct the request. |
| 401 | — | Replace or refresh the bearer credential. |
| 404 | — | Treat an unknown or unowned run id as unavailable. |
| 429 | MONTHLY_QUOTA_EXCEEDED | Read quota from /v1/me and wait for the next UTC month or change plan. |
| 429 | CONCURRENT_LIMIT_EXCEEDED | Wait for the active run to reach a terminal state. |
| run.error | LIDAR_NO_COVERAGE / WORKER_FAILED | Show the run's message and stage; do not render empty viewers. |
Generation ids, source dates, input hashes, and official links identify the evidence used.
Mask overlap, mesh coverage, change counts, and stage timings describe technical output—not acquisition accuracy.
A rank orders the published screen. It is not seller intent, transaction probability, or a parcel-level confidence score.
Bring the intended workflow, request volume, and evidence requirements—not just an endpoint list.