Technical-validation MVP · Portfolio climate-risk API

Geospatial risk intelligence
for enterprise decisions

From climate maps to financeable adaptation: convert location-level hazards into asset exposure, preliminary financial-loss indicators, and adaptation evidence — with methodology versioning and an audit trail.

ANALYZE →

Try: 41.02,29.01 · 36.90,30.70 · portfolio CSV upload on /demo

API POST /v1/risk/score · portfolio
5-layer Hazard → EAL proxy → adaptation
9 Registry sources (live/stub/roadmap)
Audit Hash-chained trail + methodology
API — POST /v1/risk/score REST Portfolio — CSV / GeoJSON ingest DEMO Five-layer — Hazard → EAL proxy → adaptation v0.3.1 Connectors — ORAS5 · GEE VIIRS/S5P + FALLBACK Registry — 9 catalogued sources LIVE/STUB/ROADMAP Audit — hash-chained trail REPRODUCIBLE Methodology — synthetic calibration labelled PHASE A API — POST /v1/risk/score REST Portfolio — CSV / GeoJSON ingest DEMO Five-layer — Hazard → EAL proxy → adaptation v0.3.1 Connectors — ORAS5 · GEE VIIRS/S5P + FALLBACK Registry — 9 catalogued sources LIVE/STUB/ROADMAP Audit — hash-chained trail REPRODUCIBLE Methodology — synthetic calibration labelled PHASE A

Four stages.
One auditable workflow.

What this repository ships today: labelled connectors with fallbacks, a five-layer portfolio path, deterministic scoring, and REST delivery — no GraphQL, no invented throughput SLAs, no black-box AI claims.

01 / CONNECTORS

ORAS5 + Earth Engine

Production connectors pull ORAS5 ocean reanalysis (CDS Zarr) and GEE proxies (VIIRS night lights, Sentinel-5P NO₂). When credentials are unset, deterministic fallback features keep local/CI runs coherent and labelled.

GET /v1/data-sources
02 / FIVE-LAYER PATH

Hazard → financial translation

Portfolio workflow: hazard × exposure × vulnerability → Phase A scenario-loss proxy (under an “EAL” label) → adaptation and avoided-loss evidence. Current damage curves are synthetically calibrated and labelled as such.

Methodology v0.3.1 · Phase A proxy
03 / LINEAGE

Versioned evidence

Methodology and pack versions, parameters, and a hash-chained append-only financial audit trail. Independent recomputation proves reproducibility of selected EAL numbers — not empirical loss accuracy.

audit trail · verify-eal CI
04 / DELIVERY

REST API + demo

Point score, portfolio ingest, scenario runs, Markdown/PDF reports, and OpenAPI via FastAPI /docs. No GraphQL surface and no webhook product in this repository.

REST only · OpenAPI

Illustrative layout,
not a live feed.

Analysis Target
Houston Ship Channel · 29.7356°N, 95.0835°W
SAMPLE · not live telemetry
Flood
FIXTURE
72
Storm Surge
FIXTURE
68
Heat Stress
FIXTURE
85
Seismic
FIXTURE
15
Wildfire
FIXTURE
22
100-yr flood zone: Yes FEMA Zone AE Industrial asset class +3.2°C by 2070
Composite Risk Score
74
HIGH RISK
DERIVED

Primary focus: real estate &
collateral portfolios.

P0 vertical is mortgage and commercial collateral (50–500 assets). Other industries below are interest areas — not separate shipped products with dedicated pages yet.

Insurance & Reinsurance

Explore physical climate risk as decision-support input for underwriting research — labelled five-layer loss proxies, not a replacement for CAT models or pricing systems.

Use-case page coming soon

Asset Management & ESG

Portfolio physical-risk evidence for disclosure workflows. Scenario fields are versioned and labelled; they are not calibrated NGFS/CMIP projections today.

Use-case page coming soon

Supply Chain & Logistics

Interest area for ports and corridors (e.g. Benelux validation market). No live weather-alert product or dedicated logistics module in this repository yet.

Use-case page coming soon

Energy & Infrastructure

Site selection and resilience planning for grid assets, renewables, and critical infrastructure. Risk screening reports for site diligence and resilience planning (decision-support, not statutory assurance).

Use-case page coming soon

Real Estate & Collateral

Due diligence risk screening for acquisitions, mortgage collateral, and commercial RE portfolios — the Phase A P0 path with five-layer EAL and adaptation evidence.

Try the portfolio demo →

Government & Resilience Planning

Municipal risk mapping and adaptation planning remain thin demo / research interest — not a municipal planning workspace product in Phase A.

Discuss your use case →

Discuss your use case with our team

Signal from
every relevant source.

Registry catalogs 9 production, audit and roadmap entries (3 production · 4 audit · 2 roadmap). Cards labelled Roadmap are not production connectors. Full register: docs/data-sources.md.

Satellite · Roadmap
Sentinel-2 / Landsat-9

Multi-spectral optical imagery at 10m–30m resolution for vegetation, water, and land-use context. Not a registered production connector; Landsat thermal is wired separately under audit streams.

5d / 16dRevisit
10–30mNative GSD
Global landCoverage
RoadmapStatus

ESA Sentinel-2 · USGS Landsat-9

Climate · Roadmap
CMIP6 (SSP pathways)

Published CMIP6 archive via ESGF for scenario context. Phase A demos use labelled synthetic hazard intensities; live downscaling of a curated SSP2-4.5 / SSP5-8.5 subset is roadmap.

CMIP6Release
SSP2/5Scenarios
2100Horizon
RoadmapStatus

WCRP CMIP6

Seismic · Roadmap
USGS / ISC

Earthquake catalogs and PSHA inputs for future Country Packs. Not in the nine-entry register — planned hazard context only.

RoadmapStatus
CatalogProduct
GlobalCoverage

USGS Earthquake Hazards · ISC

Flood · Roadmap
MERIT DEM (+ HydroSAT)

Elevation-based flood exposure context and HydroSAT flood-extent layers. Not a registered production connector until Country Pack wiring is complete.

StaticDEM vintage
~90mNative GSD
Global landCoverage
RoadmapStatus

MERIT DEM

Atmospheric · Roadmap
ERA5 / NOAA GFS

ERA5 reanalysis and GFS forecast context. Soil-moisture proxy via ERA5-Land is a separate roadmap registry stub; this card is not a production atmospheric connector.

HourlyERA5 steps
~31kmERA5 grid
16-dayGFS outlook
RoadmapStatus

ECMWF ERA5 · NOAA GFS

Ocean · Production
ORAS5 (CDS Zarr)

Ocean reanalysis for SST and sea-level context via Copernicus CDS analysis-ready Zarr. Falls back to labelled stubs when credentials are unset.

MonthlyProduct
Global oceanCoverage
CDSDelivery

Copernicus CDS

Night lights · Production
VIIRS Night-Time Lights (GEE)

Registered production stream for night-lights mean / baseline deviation via GEE. Active-fire (FIRMS) fusion remains roadmap and is not claimed here.

Daily/comp.Product
VNP46A2Collection
Global landCoverage

GEE VNP46A2

Atmosphere · Production
Sentinel-5P OFFL L3 NO₂ (GEE)

Registered production stream for tropospheric NO₂ column density via GEE. Falls back to labelled stubs when GEE is disabled.

OFFL L3Product
mol/m²Units
GlobalCoverage

GEE S5P NO₂

Wildfire · Roadmap
NASA VIIRS / MODIS active fire

FIRMS active-fire and burn-scar context for Country Packs. Not in the nine-entry register; night-lights production is a separate card.

RoadmapStatus
375mNative GSD
Global landCoverage

NASA FIRMS

Infrastructure · Roadmap
OSM + portfolio assets

OpenStreetMap and customer portfolio assets as exposure geometry. Not a registered production data stream; portfolio upload is the current exposure path.

RoadmapStatus
BuildingLevel
Global landCoverage

OpenStreetMap

Revisit is the provider’s observation cycle — never labelled as pipeline refresh. We do not advertise an optical pipeline-ingest cadence; connectors run on demand with labelled stub fallbacks when credentials are unset. Spec: data-claims-spec.md.

Nine states.
Every number carries one.

A measurement, a connector fallback and a synthetically calibrated parameter are not the same claim, so they never look the same. The chip sits beside the value, one per value, and its wording is the same string used in the audit trail and in exports.

VERIFIED authoritative source, version pinned
LIVE fetched from the connector in this run
FIXTURE pinned sample or fallback, not a measurement
MODELLED methodology output, version stated
DERIVED arithmetic on values shown here
SYNTHETIC synthetically calibrated, labelled as such
DEGRADED a connector was partly unreachable
STALE past its freshness policy
NOT_ELIGIBLE gates fail closed — decision-support only
Not written Flood risk: high · Score 72 / 100 · Verified by GeoRisk
Written Phase A scenario-loss proxy under an “EAL” label · methodology v0.3.1 · synthetically calibrated damage curves · recomputation proves reproducibility, not empirical loss accuracy

Every score opens
into its own audit.

One audit_id resolves to the source manifest, the hash-chained trail, the methodology and model versions, and the limitations — the same bundle a reviewer would ask for, available at the moment of the decision. Structure shown below; identifiers are per-response.

audit_id <uuid> 6 entries · hash-chained
ORAS5 ocean reanalysis Copernicus CDS · analysis-ready Zarr
monthly product LIVE
VIIRS Night-Time Lights Google Earth Engine
GEE asset LIVE
Sentinel-5P OFFL L3 NO₂ Google Earth Engine
OFFL L3 LIVE
Deterministic fallback features local / CI runs
labelled stub FIXTURE
Risk score model engine · risk-score
risk-score-v0.1 MODELLED
Phase A damage curves methodology v0.3.1
synthetic calibration SYNTHETIC
input snapshot → source responses → model run → rendered claim
append-only trail, independently recomputable via the verify-eal CI job
Limitations ship with it
Source and model readiness have not been approved for a named use case.
Outputs are decision-support context and may include deterministic fixtures.
Elevation or topographic context is not flood probability or loss evidence.
Recomputation proves reproducibility of selected EAL numbers — not empirical loss accuracy.
Release gates
0 / 5 pass · fail-closed
platform_operationalnot met
data_source_operationalnot met
model_validated_for_use_casenot met
commercially_validatednot met
runtime_live_verifiednot met
Gates are independent; no gate implies another. production_eligible is derived from them and cannot be asserted directly, so a green build or one live source call cannot flip it. Current decision: demo_only.

REST endpoints.
OpenAPI on the running API.

FastAPI REST surface with resource-oriented paths. Returns JSON with score breakdowns, methodology/version fields, and labelled source/fallback attribution — not GraphQL and not webhooks.

REQUEST · verified shape
POST https://api-production-5880.up.railway.app/v1/risk/score Content-Type: application/json { "asset_name": "Demo Asset", "latitude": 36.8969, "longitude": 30.7133, "radius_km": 10 }
RESPONSE · live shape (truncated)
{ "asset_name": "Demo Asset", "overall_score": 60, "risk_band": "medium", "risk_score": 0.5239, "components": { "flood": 95, "heat": 29 }, "audit_id": "…", "meta": { "data_version": "risk-score-v0.1" } } // Point-score path uses labelled synthetic/fallback inputs today (STUBS #3). Prefer /demo five-layer path for portfolio demos.
Read API Docs OpenAPI /docs Request API access

API reference &
integration basics.

Grounded in the running FastAPI service. Base URL, paths, and examples below were verified against the live host. No GraphQL, no webhook product, no /v2 score route, and no invented API keys.

Quick start

Base URL
https://api-production-5880.up.railway.app
API version
Path prefix /v1 · OpenAPI info version 0.1.0
Auth today
No API-key gate on the public demo host. Mutating routes are IP rate-limited. Request sandbox access for controlled use.
REQUEST · POST /v1/risk/score
curl -sS -X POST \ https://api-production-5880.up.railway.app/v1/risk/score \ -H 'Content-Type: application/json' \ -d '{"asset_name":"Demo Asset","latitude":36.8969,"longitude":30.7133,"radius_km":10}'
RESPONSE · verified fields
{ "asset_name": "Demo Asset", "latitude": 36.8969, "longitude": 30.7133, "overall_score": 60, "risk_band": "medium", "risk_score": 0.5238888888888888, "components": { "industrial": 75, "flood": 95, "heat": 29 }, "audit_id": "<uuid>", "meta": { "data_version": "risk-score-v0.1" } }

Methodology qualification: POST /v1/risk/score is a technical-validation path. Component scores can be synthetic or connector-fallback labelled (see STUBS inventory). For regulated-buyer demos use the portfolio five-layer flow on /demo with synthetic-calibration badges — not this score path alone as production risk numbers.

Available endpoints

Primary public routes on the live host. Full schema: OpenAPI Swagger UI.

Endpoint Method Purpose Status Reference
/v1/health GET Liveness + deploy git_sha Live Open
/v1/risk/score POST, GET Point asset risk score JSON Demo OpenAPI
/v1/risk/batch POST Synchronous multi-asset score batch Demo OpenAPI
/v1/data-sources GET Canonical 9-entry source registry Live Open
/v1/portfolio/upload POST CSV/GeoJSON portfolio ingest (multipart) Demo Portfolio demo
/v1/portfolio/demo-run POST Five-layer portfolio demo run Demo Portfolio demo
/v1/portfolio/demo-run/golden-antalya POST Golden Antalya fixture demo run Demo Portfolio demo
/v1/scenario/run POST Scenario Lab v1 (deterministic demo engine) Demo OpenAPI
/v1/reports/risk POST Markdown risk report Demo OpenAPI
/v1/reports/risk/pdf POST PDF risk report (WeasyPrint or text fallback) Demo OpenAPI
/v2/* score routes No GraphQL, no webhook product, and no /v2 score route in this repository Planned
Custom API hostname Not configured; use the Railway base URL above Planned

Request & response contract

Required for POST /v1/risk/score:

  • asset_name (string)
  • latitude (−90…90, decimal degrees WGS84)
  • longitude (−180…180, decimal degrees WGS84)

Common optional fields:

  • radius_km (default 10; >0 and ≤100)
  • preset_id (registered presets; default industrial_v1)
  • sector (reporting label; default industrial)
  • include_industrial_verification_ref (bool; default false on score)

Main response fields: overall_score (0–100), risk_band, risk_score ([0,1]), components, flags, audit_id, meta.data_version, optional industrial_verification.

Validation: unknown preset_id, out-of-range coordinates, or missing required fields → HTTP 422 with the standard error envelope.

Errors & operational limits

Standard envelope:

{ "error": { "code": "VALIDATION_ERROR", "message": "Field required", "details": {} } }
  • 422 — schema / coordinate / preset errors (VALIDATION_ERROR, INVALID_COORDINATES, PRESET_NOT_FOUND, …)
  • 413POST /v1/portfolio/upload body above default 2 MB (PORTFOLIO_UPLOAD_MAX_BYTES)
  • 429 — mutating methods exceed default 60 requests / 60s per client IP (RATE_LIMIT_EXCEEDED); X-RateLimit-* headers on responses
  • 404 — unknown async batch task_id (NOT_FOUND)

Health and OpenAPI docs paths are exempt from the mutating-method rate limit. Branch on error.code, not message text.

Methodology & support

Versioned methodology note in-repo: georisk-methodology-v0.3.1. Decision-support outputs — not regulatory proof or sole basis for credit decisions.

Indicative plans
contact to confirm.

Figures below are non-binding illustrative bands for conversation — not a self-serve checkout, and not evidence of closed sales. No metered billing is shipped in this repository.

Starter
$499
per month · indicative · billed annually if contracted
  • Indicative call volume (negotiated)
  • Point score + registered presets
  • Current methodology version
  • REST API + OpenAPI /docs
  • Labelled connector fallbacks
  • Email support
Request sandbox
Enterprise
Custom
volume + terms negotiated
  • API volume negotiated
  • Custom preset / pack configuration
  • Deployment model negotiated
  • Dedicated data engineering support
  • Evidence pack / report workflows
  • Negotiated uptime terms
  • Full data provenance & audit trail
  • Named account manager
Contact sales

Start quantifying
location risk today.

Start with a demo of the scoring and portfolio APIs, then request sandbox access. No fabricated self-serve free-trial funnel.