# Bulk Download — Petrel Karst & Depressions Layer v0.1 The bundle endpoint returns a manifest of **per-file signed URLs**, valid for one hour. There is no S3 path to sync against: `aws s3 sync` will not work, and a signed URL cannot carry an `X-API-Key` header (the signature IS the auth). ## Whole layer ```bash export PETREL_API_KEY=tlk.. curl -s -H "X-API-Key: $PETREL_API_KEY" \ https://api.petreldata.io/v1/layer/karst_depressions/v0.1/bundle > bundle.json jq -r '.files[] | "\(.url)\t\(.name)"' bundle.json | \ while IFS=$'\t' read -r url name; do echo "fetching $name" curl -s -o "$name" "$url" done ``` ## Size Two global 3-arcsec bands (432000 x 216000 land-masked) plus docs and the STAC item. Depth compresses well because most land drains and reads exactly zero; solubility is uint8 and small. ## Re-download Signed URLs expire after an hour. Re-request the manifest; the underlying objects are immutable for a given vintage, so a partial download can simply be resumed with a fresh URL. ## Verify before you use it ```bash python3 - <<'PY' import rasterio with rasterio.open("karst_depression_depth_90m.tif") as s: print(s.width, s.height, s.dtypes[0], s.tags().get("SCALE")) print("coast clip:", s.tags().get("PETREL_COAST_CLIP")) PY ``` If `PETREL_COAST_CLIP` is absent the file is not a shipped Petrel product — re-download rather than use it.