AtlasAdapt API

Climate-resilience incentives, hardening costs and risk data for buildings.

AtlasAdapt models what it costs to harden a building against climate risk, what public money is available to pay for it, and what the risk is worth avoiding. This API exposes that model.

Base URL. https://api.atlasadapt.com. While that hostname is being set up, the identical gateway is also reachable at https://atlasadapt.com/apigw — same code, same data, same keys — so you can build against it today and change one constant later.

Authentication. Every request carries a key issued by AtlasAdapt:

curl -H "Authorization: Bearer aa_live_..." https://api.atlasadapt.com/v1/ping

X-API-Key: aa_live_... is accepted as an alternative. A key sent in the query string is refused with HTTP 400 — query strings are recorded in access logs, browser history and Referer headers, and none of those are revocable by us.

Start with GET /v1/ping. It needs no grant and tells you what your key opens, when it expires, and what you have spent this month — in your own timezone.

Grants. Keys are scoped in two ways. Route scopes decide which endpoints you may call. Field scopes decide how much detail comes back from the endpoints you may call. Nothing is implied: holding one grant never confers another, and every field scope is absent unless it was granted explicitly.

Field scopeAdds
incentives.eligibilityEligibility conditions, calculation formulas and the input factors a full assessment would still need
incentives.sourcesResearch citations, harvest timestamps and change detection
incentives.fundingBudget status: remaining funds, cohort rules and scheduled phase-outs
costs.provenanceHow a price was derived, its index basis, its sources and our confidence in it
estimate.traceThe step-by-step derivation behind an estimate (with the estimator endpoints)

If a field you expected is missing from a response, the grant is missing — not the data. Call

GET /v1/ping to see exactly what your key holds.

Quota. Requests are metered per calendar month in your timezone, so your month ends when your month ends. X-RateLimit-Remaining is on every successful response. Refusals — bad credentials, missing grants, our own outages — never count against you.

The funding contract

Read this before you display or add up any incentive amount.

availability.stateReturned?counts_toward_roiWhat to do
(expired)NeverEnded programmes are not in the API at all.
openYestrueNormal. Count it.
hiatusYesfalseThe budget is spent. Show it with the guidance; these are typically refunded annually. Do not count it.
waitlistYesfalsePaused, but the grantor is still taking names. Tell your user to apply now. Do not count it.

Two mistakes this prevents, and they fail in opposite directions. Hiding a paused programme loses your user a real award they may well receive next quarter. Counting one lets their payback figure assume money the grantor has said is not available.

Separately, claimable_by_owner: false marks a programme that is real money but not the building owner's to apply for — a community or pass-through scheme. applicant names who can. Never add these to an owner's available funding.

Key

Verifying a credential and reading its grants.

GET /v1/ping no grant required

Verify a key and read its grants

The only endpoint that needs no grant. Reports the key, its window, its grants and its usage — nothing about any other key, customer or data.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/ping"

GET /v1/usage usage.self

Your own usage and quota

Your consumption over time, and where you stand against your monthly limit.

Returns your key only — the filters are taken from the credential, not from the query string, so there is no parameter that could reach another customer's traffic.

Two clocks, deliberately separate: quota.timezone is your billing month; history.timezone is the clock the time series is bucketed in.

Parameters

NameInTypeNotes
range querystring today 3d 1w 2w 1m 3m 6m 1y all

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/usage"

Incentives

Public funding: what exists, who awards it, what it is worth.

GET /v1/grantors grantors.list

Bodies that award incentives

Parameters

NameInTypeNotes
territory querystring Optional. Omit for every territory your key is licensed for.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/grantors"

GET /v1/incentives incentives.list

List incentives

Expired programmes are never returned. Read the funding contract above before summing any amount.

Grant incentives.eligibility for conditions and formulas, incentives.sources for research citations, incentives.funding for budget status.

Parameters

NameInTypeNotes
territory * querystring ISO country code. Must be one your key is licensed for — see GET /v1/territories.
mode querystring residential commercial
upgrade querystring Only incentives that apply to this upgrade code.
page queryinteger
page_size queryinteger Clamped to your key's ceiling. There is no "all".

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/incentives?territory=US"

GET /v1/incentives/{id} incentives.get

Read one incentive

An expired programme returns 404 rather than a flagged record — so it cannot be cached and shown as live.

Parameters

NameInTypeNotes
id * pathstring

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/incentives/sc%3Aresidential%3Asc_safe_home"

GET /v1/coverage/aggregate coverage.aggregate

Incentive counts by area

Derived statistics only — counts and bands by area, never records or coordinates.

Parameters

NameInTypeNotes
view querystring us eu
area querystring Country or region code, or CITY:Name.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/coverage/aggregate"

Reference

Costs, climate parameters and the vocabularies behind them.

GET /v1/territories territories.list

Countries this key may query

Only the territories your key is licensed for. This list is the definitive answer to "what can I ask about?".

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/territories"

GET /v1/upgrades upgrades.catalogue

The hardening-measure vocabulary

Every upgrade code, with the territories and modes in which it is actually priced. An upgrade absent for your territory is not modelled there.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/upgrades"

GET /v1/costs costs.list

Hardening cost rules

What a measure costs and what it saves. formula is the machine-readable rule. Grant costs.provenance to see how each price was derived and how confident we are in it.

Parameters

NameInTypeNotes
territory * querystring ISO country code. Must be one your key is licensed for — see GET /v1/territories.
building_type querystring
upgrade querystring
mode querystring residential commercial
page queryinteger
page_size queryinteger Clamped to your key's ceiling. There is no "all".

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/costs?territory=US"

GET /v1/climate/params climate.params

Climate risk parameters

Business-interruption recovery curves and the escalators that age them forward.

The curve measures downtime, not damage. Nodes are percentage of normal operation over time after an event. Reading pct as "how much of the building was destroyed" produces a plausible number about something else.

Only fire, flood, heatwave and power_outage vary by building type; varies_by_building_type marks which.

Parameters

NameInTypeNotes
territory * querystring ISO country code. Must be one your key is licensed for — see GET /v1/territories.
building_type querystring
risk querystring

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/climate/params?territory=US"

Risk

Per-address and regional hazard data.

GET /v1/geo/resolve geo.resolve

Resolve an address

Address to coordinates, administrative area and flood zone. The cheap half of the risk surface — use this when you only need to know where a building is.

Three outcomes, deliberately distinct. 200 resolved. 422 the address is not resolvable, so fix the input — retrying will not help. 503 our geocoder did not answer, and the address may be perfectly good; Retry-After says when to come back. Collapsing the last two would have you correcting addresses that were never wrong.

Check granularity before using the coordinates for anything boundary-sensitive: a postcode centroid and a rooftop match are both "resolved" and are not the same thing.

Parameters

NameInTypeNotes
address * querystring
country querystring

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/geo/resolve?address=2500%20Edwards%20Dr%2C%20Fort%20Myers%2C%20FL"

GET /v1/risk/address risk.address

Per-address hazard profile

The hazards at one building, from the same lookup the AtlasAdapt product uses — so a figure you read here is the figure the product would show.

Coverage is not uniform, and the response says so.

CountryTypical hazards returned
us15 — coldwave, earthquake, flood, hail, heat, hurricane, icestorm, landslide, outage, riverine, surge, tornado, wildfire, wind, winter
fr8 — earthquake, flood, groundwater, heat, outage, subsidence, wildfire, wind
de6 — earthquake, flood, hail, heat, outage, wind
ch6 — flood, hail, heat, outage, wind, winter
uk3 — flood.fluvial, flood.pluvial, subsidence

France varies by commune, so treat that row as typical rather than fixed. Do not hard-code any of these lists: read the keys you are given.

A hazard that is absent was never modelled for that country. A hazard marked unavailable was modelled and could not be answered this time. Those are different claims and a short list is not a finding of low risk — meta.coverage states both counts.

Individual hazards also carry their own honesty: German wind is derived from a mean-wind grid rather than extreme-wind return periods, and says so in its confidence and caveat. Read those before treating any single figure as authoritative.

Answers are cached 30 days, so repeated calls for one address are cheap and stable.

Parameters

NameInTypeNotes
address * querystring
country querystring us de ch fr uk
utility querystring US only. Names the electricity utility for outage statistics.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/risk/address?address=2500%20Edwards%20Dr%2C%20Fort%20Myers%2C%20FL"

GET /v1/risk/surface risk.surface

Regional hazard surface

One value per region, for shading a map. Region codes, names and numbers only — never coordinates or sample points.

Every region carries both mean (the average across its sample points) and max (the worst single one). A map shading "could it happen here" wants max; one shading "what is it like here" wants mean.

This is not a substitute for /v1/risk/address — a region value cannot tell you about a building.

Parameters

NameInTypeNotes
country * querystring us de ch fr uk
hazard querystring Omit for every hazard in one payload.
metric querystring US only — selects among the FEMA NRI measures. Ignored elsewhere.

Example

curl -H "Authorization: Bearer $ATLASADAPT_KEY" \
  "https://api.atlasadapt.com/v1/risk/surface?country=de"

Estimators

Running the model: applicable incentives, payback and ROI.

POST /v1/estimate/incentives estimate.incentives Coming soon

Which incentives apply, and for how much

POST /v1/estimate/roi estimate.roi Coming soon

Payback, net cost and ROI

POST /v1/estimate/portfolio estimate.portfolio Coming soon

ROI across many sites

Errors

Every error has the same shape. Branch on error.code, never on the message.

{
  "ok": false,
  "error": {
    "code": "quota_exceeded",
    "message": "Monthly request limit reached for this key.",
    "scope": "account",
    "docs_url": "https://api.atlasadapt.com/docs#errors",
    "request_id": "req_84213"
  }
}
Refusals are free. 401, 403, 429 and every 5xx are never counted against your monthly allowance. You cannot lose a month you have paid for to a bad credential or to an outage of ours. 422 is the one exception, because the upstream lookup was still made.
CodeHTTPMeaning
invalid_request400A parameter is missing or malformed.
key_in_query_string400The key was sent in the URL. Use the Authorization header — query strings are logged, cached and forwarded in Referer headers, and we cannot un-leak them.
invalid_key401Missing, malformed, unknown or revoked. These four are deliberately indistinguishable: telling them apart would let anyone confirm whether a key they found is genuine.
key_not_yet_active403The key is valid but its start date has not arrived. The response tells you when, in your timezone.
key_expired403The key is valid but past its end date. Ask us to extend it — your credential does not change.
key_suspended403The key has been suspended. Contact us.
scope_denied403Your key does not grant this endpoint or territory. The response names the missing grant.
origin_denied403Browser request from an origin this key does not permit.
ip_denied403Request from an address outside this key's allowlist.
not_found404No such resource — or, for an incentive, a programme that has ended.
method_not_allowed405That path exists under a different method.
unprocessable422Understood but unfulfillable — for example an address we cannot locate. This one does count against your quota, because the upstream lookup was still made.
rate_limited429Too many requests in one minute. Retry-After tells you how long to wait.
quota_exceeded429The monthly allowance for this key, or for this endpoint, is spent. The response names which, and when it resets in your timezone.
server_error500Our fault. Not counted against your quota. Quote the request_id.
upstream_unavailable503A third-party data source is down. Not counted against your quota.