---
title: "Extract a 3D point cloud (lon/lat/elev/attribute) from a GEDI or ICESat-2 granule."
method: POST
path: "/v1/op/catalog.granule_points"
tags: ["kernel-ops"]
---

# Extract a 3D point cloud (lon/lat/elev/attribute) from a GEDI or ICESat-2 granule.

`POST /v1/op/catalog.granule_points`

## Headers

- `x-api-key` string, nullable

## Request body

- GranulePointsInput
  - `collection` string, required — Registry collection id, e.g. GEDI02_A.v002 or ATL08_007
  - `href` string, required — HTTPS .h5 granule URL from the STAC item (Earthdata-hosted)
  - `bbox` number[], required — AOI [west, south, east, north]
  - `max_points` integer — Uniform-subsample ceiling
  - `clip_polygon` object, nullable — AOI GeoJSON Polygon/MultiPolygon — points are clipped to this exact shape, not just the bbox

## Response `200`

Successful Response

- GranulePointsOutput
  - `points` array[] — [lon, lat, elevation_m, value] rows
    - number[]
  - `value_label` string
  - `value_range` number[]
  - `count` integer
  - `returned` integer
  - `subsampled` boolean

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.dev/geopera/apis/geopera-data-platform.md) · [All operations](https://skmtc.dev/geopera/apis/geopera-data-platform/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/geopera/geopera-data-platform/revisions/cb0130b2a40a/schema)
