BP-inference pipeline at the Cloudflare edge. Same Rust source as iOS / Cloud Run, compiled to WASM and wrapped by worker-rs. See docs/runtime-size-budget.md §10 + §11.
POST /api/v2/measure
content-type: application/octet-stream
body: research.pb.zst (or .pb / .bzev — proto auto-detected, zstd auto-detected)
→ JSON { sbp, dbp, map, is_valid, heart_rate, mode: "full" }
POST /api/v2/measure/model
content-type: application/octet-stream
body: NamedFeatureVector proto
→ JSON { sbp, dbp, map, is_valid, heart_rate, mode: "features" }
(hybrid mode — feature extraction done client-side)
GET /health → "ok"
(Routes match Cloud Run's /api/v2/measure* shape so Edge is a
destination choice, not a route choice. /predict + /predict-features
are accepted as deprecated aliases for back-compat.)
curl -X POST <origin>/api/v2/measure \
-H 'content-type: application/octet-stream' \
--data-binary @path/to/research.pb.zst