API Documentation
Calchis API v1 provides programmatic access to US catastrophe intelligence. All event output is OGC-compliant GeoJSON. All coordinates WGS84. All timestamps UTC ISO 8601. Hazard score endpoints support ?format=oasis for OASIS LMF integration.
Get started in 5 minutes
Create a free account
Sign up at calchis.com/pricing to get started. Live event feeds and consequence rings need no key. Hazard scores need a free API key or a signed-in session, and the free tier allows 100 score lookups a day.
Get your API token
Sign in with your email (magic link) to receive a JWT access token. Pass it as a Bearer token in the Authorization header for protected endpoints. Any account, free included, can create API keys for server-to-server calls to the hazard score endpoints, the bulk export and the ILS read endpoints.
Make your first request
Fetch all active US disaster events as GeoJSON. No authentication required.
curl -s "https://calchis.com/api/v1/events/live" \
-H "Accept: application/json" | jq .Code Examples
Get hazard score for a location
GET /api/v1/risk/score — Returns multi-peril hazard scores with full score component breakdown, every relevant peril on every plan. Daily quota: 100 requests free, 10,000 Analyst, 100,000 Team or Agency, uncapped Institutional or Enterprise.
curl -s "https://calchis.com/api/v1/risk/score?lat=29.76&lng=-95.37&perils=hurricane" \
-H "Authorization: Bearer YOUR_TOKEN" | jq .Export in OASIS LMF format
GET /api/v1/risk/score?format=oasis — Same endpoint, OASIS Loss Modeling Framework output. Compatible with Moody's RMS and Verisk integration pipelines. Available wherever the score is.
curl -s "https://calchis.com/api/v1/risk/score?lat=29.76&lng=-95.37&perils=hurricane&format=oasis" \
-H "Authorization: Bearer YOUR_TOKEN" -o hazard_score.jsonCreate an ILS parametric trigger
POST /api/v1/triggers — Monitor cat bond positions against live event data. Threshold types: wind speed (kt), storm surge (ft), magnitude, gauge stage (ft) and wildfire containment failure (%). Industry-loss thresholds are not offered: Calchis carries no PCS or PERILS index. Triggers per plan: Explorer (free) 3, Analyst 10, Team 500, Agency 100, Institutional or Enterprise unlimited.
curl -X POST "https://calchis.com/api/v1/triggers" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Gulf Hurricane CAT3+ Monitor",
"peril": "hurricane",
"lat": 29.76,
"lng": -95.37,
"radius_km": 200,
"threshold_type": "wind_speed",
"threshold_value": 96,
"threshold_unit": "kt",
"alert_at_pct": 80,
"notes": "Alert when a storm reaches 80% of CAT3 threshold within 200km of Houston"
}'Base URL
https://calchis.com/api/v1Authentication
Public endpoints (no auth required)
Live events and consequence rings are available without authentication, rate limited to 60 requests/minute by IP. Hazard scores are not public: they need an API key or a session, with a daily quota by plan (free: 100 a day).
Bearer token (every plan)
After signing in, include your session’s access token in every request to protected endpoints. Creating or changing triggers and positions, and the cat bond catalog, take this token only.
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...API keys (every plan)
Server-to-server API keys are available on every plan, the free one included (100 calls a day). A key reads what its owner can read: hazard scores, your triggers and their history, backtests and forecasts, the ILS dashboard, positions and alerts, and portfolio EP curves, loss and export. Keys are read-only: creating or changing triggers and positions needs a signed-in session, and the cat bond catalog is not available by key. Generate keys from your API key settings. Pass them as Bearer tokens.
Authorization: Bearer YOUR_API_KEYRate Limits
All API routes use sliding-window rate limiting. Rate limit headers X-RateLimit-Remaining and X-RateLimit-Reset are included on every response. Exceeding the limit returns 429 with a Retry-After header.
Response Format
Event feeds return OGC-compliant GeoJSON FeatureCollections. Each feature includes a Point geometry (WGS84 coordinates as [lng, lat]) and a properties object with event metadata, severity, status, and source provenance.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-118.2437, 34.0522]
},
"properties": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "M5.2 Earthquake — Los Angeles, CA",
"event_type": "earthquake",
"severity": 5.2,
"severity_label": "M5.2 MODERATE",
"status": "active",
"started_at": "2026-03-20T14:23:00Z",
"source": "usgs",
"source_url": "https://earthquake.usgs.gov/earthquakes/eventpage/ci12345678",
"confidence_score": 1.0,
"slug": "m52-earthquake-los-angeles-ca-2026-03-20"
}
}
]
}Events
Live US multi-peril disaster event feeds
/api/v1/events/liveAll active + monitoring events as GeoJSON FeatureCollectionpublic/api/v1/events/{id}Single event detail with full metadatapublic/api/v1/events/{id}/ringsModeled consequence ring polygons as GeoJSONpublic/api/v1/events/{id}/footprintsObserved (NWS/USGS/NHC) and modeled footprints, labeled by kindpublic/api/v1/events/nearbyEvents within radius of a lat/lng pointpublicAnalysis
Deterministic event analysis, predictions, and timelines
/api/v1/events/{id}/predictionIndicative severity forecast (simplified from published models)analyst/api/v1/events/{id}/timelineEvent status arc (containment, wind, gauge readings)agency/api/v1/events/{id}/exposurePopulation and structure exposure within consequence zonesanalyst/api/v1/events/{id}/briefingPDF leadership briefing exportanalyst/api/v1/events/{id}/ics209Incident Status Summary (partial ICS-209) auto-generation from live event dataagencyScenarios
What-if scenario planning for tabletop exercises and preparedness
/api/v1/scenarios/runRun a hypothetical disaster scenario with impact estimatesanalystInfrastructure
HIFLD critical infrastructure (hospitals, fire stations, schools, EMS)
/api/v1/infrastructureQuery infrastructure within radius as GeoJSONpublicScoring
Multi-peril hazard scores with full methodology transparency
/api/v1/risk/scorePoint-in-time hazard score by lat/lng. Supports ?format=oasis. Free key: 100 req/day.public/api/v1/events/{id}/scoreHazard scores at the event's geographic locationpublicPortfolio
Portfolio management and exposure analysis
/api/v1/portfolioList portfolios with nested locationsagency/api/v1/portfolioCreate a portfolioagency/api/v1/portfolio/exposurePortfolio exposure against active consequence ringsagency/api/v1/portfolio/ep-curveExceedance probability curve for a portfolio or one locationanalystTriggers
ILS parametric trigger monitoring for cat bond positions
/api/v1/triggersList active ILS triggersagency/api/v1/triggersCreate a parametric triggeragency/api/v1/triggers/{id}/historyTrigger evaluation history with threshold proximityagencyLocations
Saved locations with alerting and exposure checking
/api/v1/locationsList saved locationspublic/api/v1/locationsSave a new locationpublic/api/v1/locations/exposureCheck saved locations against active event ringspublic/api/v1/locations/alertsUnread alert notificationspublicMCP server for agents
Calchis is also a Model Context Protocol tool server, so your own agent can call it: JSON-RPC 2.0 over the Streamable HTTP transport at POST /api/v1/mcp. Calchis calls no model — yours is the only one in the loop. Every message needs an API key; each tool call counts once against the same daily quota as the REST API, and a call refused for its arguments or its plan is not counted.
score_locationlat/lng or a US address → hazard scores with every component (as /risk/score)
event_footprintsevent id → observed and modeled footprints, labeled by kind
portfolio_ep_curveone of your portfolios → modeled EP curve (Analyst plan or higher)
verify_determinationdetermination record → verification result
list_active_eventsactive events, optional bbox and event-type filter
{
"mcpServers": {
"calchis": {
"type": "http",
"url": "https://calchis.com/api/v1/mcp",
"headers": { "Authorization": "Bearer cs_live_YOUR_KEY" }
}
}
}Errors are JSON-RPC errors, never an HTTP 500: -32602 unknown tool or bad arguments, -32001 missing or invalid key (HTTP 401), -32002 daily quota spent (with reset_at), -32003 plan does not include the tool (with upgrade_to), -32004 not found. Scores are hazard scores, not risk scores; footprints are labeled observed or modeled on every feature. Full contract in docs/openapi.yaml under /mcp.
Output Formats
JSON (default)
All responses default to JSON. Event feeds use OGC-compliant GeoJSON FeatureCollection format.
OASIS LMF
Add ?format=oasis to scoring endpoints for OASIS Loss Modeling Framework output. Compatible with Moody's RMS and Verisk platforms.
OASIS LMF v2.5.0 Compatible · Portfolio export on Team, Agency and higher
OpenAPI Specification
Full OpenAPI 3.0.3 specification with request/response schemas, authentication, and parameter documentation. Available for import into Postman, Swagger UI, or automated client generation.
Download it at calchis.com/docs/openapi.yaml. It is generated from the same file the test suite checks against every route.
Method documents
The document behind each record, served as written from the repository at /docs/<name>.md. Each states what the record holds, how it is computed, and what it does not say.
- Integration quickstart: loading and verifying the record
integration-quickstart.md - Hurricane loss hindcasts: the reading (at the crossing, and on the forecast before it)
hindcast.md - The as-issued archive
as-issued-archive.md - Bulk export
archive-export.md - Exposure at issuance: NWS warnings
warning-exposure.md - Exposure at issuance: SPC outlooks and fire perimeters
footprint-exposure.md - Reference determinations
reference-determinations.md - Determination standard, version 1
determination-standard-v1.md - Determination standard, version 2
determination-standard-v2.md - Digest anchoring (the independent timestamp)
digest-anchoring.md - The revision record
revision-record.md - Event-to-outcome record
event-outcomes.md - Warning performance ledger
warning-ledger.md - Source availability record
source-availability.md - Historical NHC advisories (ATCF a-deck)
historical-advisories.md - Consequence ring calibration
consequence-ring-calibration.md - Hazard score calibration
hazard-score-calibration.md - Methodology
methodology.md - Model changelog
model-changelog.md - Data lineage
data-lineage.md - Data rights register
data-rights-audit.md - Enterprise API guide
enterprise-api-guide.md - Subprocessors
subprocessors.md
The record
What Calchis keeps rather than computes: every federal product as received, and the records derived from it with provenance on every row. These are the endpoints a data team integrates first; the integration quickstart walks the manifest, a day of the export, verifying a body against the archive and the public ledger, and citing a month of the revision record. All are public and read without a key, except the bulk export, which takes any account’s key and counts one call per page. Each record’s method is a document at /docs/<name>.md (listed below under the OpenAPI section); the datasets and their record= names are on /data.
| Endpoint | Returns | Method |
|---|---|---|
GET /api/v1/archive/summary | The as-issued archive's counts by source: bodies, polls, first and last receipt. | as-issued-archive.md |
GET /api/v1/archive/products/{sha256} | One archived product by the hash of its body: source, issued and received times, source URL, the body. | as-issued-archive.md |
GET /api/v1/archive/continuity?month= | The interval between consecutive reads of each feed, the longest gap, and a status per source — the archive's own continuity, measured. | as-issued-archive.md |
GET /api/v1/archive/export?record=&day= (key) | Bulk NDJSON of any record, one UTC day per page by primary-key cursor; /archive/export/manifest names the records with counts and spans. | archive-export.md |
GET /api/v1/verification/warning-exposure?month= | The 2020 housing under every NWS warning polygon at issuance, with the issue-to-receipt and receipt-to-compute lags. | warning-exposure.md |
GET /api/v1/verification/footprint-exposure?month=&kind= | The same figure for every SPC Day 1 outlook category polygon and every NIFC fire perimeter version. | footprint-exposure.md |
GET /api/v1/verification/tornado-warnings?month= | The warning performance ledger: every surveyed tornado track against the warning in effect at touchdown. | warning-ledger.md |
GET /api/v1/verification/revisions?month= | What the USGS feed said first against what it settled on, by magnitude band and threshold; /revisions/extract serves the frozen monthly CSV with its sealed id. | revision-record.md |
GET /api/v1/verification/reference-determinations?month= | Every reference determination read on the public catalog at receipt; /{cdt2-id} returns one with its evidence and inclusion proof; /history replays each structure's terms over the record. | reference-determinations.md |
GET /api/v1/events/{id}/outcome | The event joined to its FEMA declarations, the dollars under them, and what agencies measured afterward. | event-outcomes.md |
GET /api/v1/determinations/log | The daily Merkle digests; /determinations/{id}/proof returns an inclusion proof; /determinations/anchors?period= the independent timestamp of each root. | digest-anchoring.md |
GET /api/v1/status/availability?month= | Every feed outage as the platform saw it, paired from the failed/recovered transitions, with availability per source. | source-availability.md |
GET /api/v1/storms?season= · /storms/{atcf_id}/advisories | NHC's operational advisory record since 1998 as issued (positions, radii, official forecasts by lead time), marked backfilled; 404 loaded:false until the load has reached a season. | historical-advisories.md |
Walk a day of the bulk export: request ?record=warning-exposures&day=2026-11-05, read rows until the response carries no X-Next-After header, and pass that header back as &after= until it does. Every row is the table’s own columns; nothing is renamed on the way out.
Data Standards
| Coordinate System | WGS84 (EPSG:4326) |
| Timestamps | UTC ISO 8601 |
| Event Output | OGC-compliant GeoJSON |
| Field Naming | ACORD-compatible on insurance outputs |
| Score Format | 0.00–10.00 with score_components JSONB |
| Source Provenance | source + source_url + ingested_at on every record |
API access is subject to rate limits and subscription tier. For situational awareness and decision support only — not a primary alerting or dispatch system. Verify against official sources before operational use.