Data / Developers
API and MCP
Use Heimdall Research datasets from code or from an AI assistant. Downloads need no account. The REST API and the MCP server use one API key.
Get a free key
- Create a free account.
- Your key is shown once, at sign-up. If you did not copy it, create a new one on Keys and MCP in the customer app.
- Paste the setup line for your assistant. The reference below has the line for each one.
Create a free account Plans and limits
A free key is 60 requests a minute, with a burst of 20 requests in 5 seconds, and 1,000 a day. Downloads of open files do not use that allowance.
Arctic Open-Water Window
Version 1.1 on Zenodo, Kaggle and Hugging Face, 15 gates. A gate is a fixed polygon on a passage.
Extras, with a free key: GET /v1/arctic/gates/{gate}/imagery and GET /v1/datasets/arctic-open-water-window/extras. MCP tool: get_arctic_imagery. The download holds the tables.
Example questions
- When did the Bering Strait gate open last season?
- List the full-size file for gate bering-strait in week 29 of 2024.
- How many open-water days did the Vilkitsky Strait gate have in 2023?
Not for navigation. Use at your own risk. Provided as is, without warranty of any kind. Data disclaimers.
Western Terminal Lakes
Version 1.1 on Zenodo, Kaggle and Hugging Face, 19 series on 18 lakes, monthly. Weekly lake areas are planned.
Extras, with a free key: GET /v1/lakes/{lake}/imagery and GET /v1/datasets/western-terminal-lakes/extras. MCP tool: get_lake_imagery. The download holds the monthly tables.
Example questions
- What was Walker Lake's open-water area in August 2024?
- Give me the full Sentinel-2 composite for Great Salt Lake south in summer 2024.
- Which summer preview images are in the Western Terminal Lakes download?
Not for water-rights, legal or engineering decisions. Data disclaimers.
Storm Blackout and Restoration
Version 1.2 on Zenodo, Kaggle and Hugging Face, 672 storms.
Extras, with a free key: GET /v1/storms/{event_id}/track, /forecasts, /media, GET /v1/tracks (track search), and GET /v1/datasets/storm-blackout/extras. MCP tools: get_storm_track, get_storm_forecasts, get_storm_media, find_storm_track, find_storms_near, get_power_outage. The download holds the tables.
Example questions
- Show me Hurricane Milton's track.
- Show the forecast lines for Hurricane Irma.
- How many customers lost power in Lee County, Florida during Milton?
Estimates from public records and satellite night light. Not for real-time emergency response or for any decision about one address or property. Data disclaimers.
Ways to use the data
| Method | For | Details |
|---|---|---|
| Downloads | Analysts, researchers and data scientists | CSV and Parquet files. Arctic, Lakes and Storms are on Zenodo (with a DOI), Kaggle and Hugging Face. No key needed. |
| REST API | Developers | https://api.heimdallresearch.com/v1/, authenticated with Authorization: Bearer <key>. Responses carry the dataset version and DOI once a dataset is released. |
| MCP server | AI assistants | https://api.heimdallresearch.com/mcp/ for MCP clients that can send a header. Same key, same limits as the API. See the table below for each assistant. |
Connect an AI assistant
One address for every assistant: https://api.heimdallresearch.com/mcp/. An assistant that can send a header uses your key in the Authorization header, as Bearer followed by the key. Your key is shown once, at sign-up. Create a new one on Keys and MCP in the customer app.
- Server address
https://api.heimdallresearch.com/mcp/- Header
Authorization: Bearer YOUR_API_KEY
Click an address to select all of it, then copy. Get a free API key if you don't have one.
| Assistant | How |
|---|---|
| Claude Code | The key is stored in Claude Code's settings file (~/.claude.json). |
| Codex | Codex reads HEIMDALL_API_KEY when it starts. To keep the key after the terminal closes, add the export line to your shell profile, for example ~/.zshrc. |
| Cursor | Paste the printed block into ~/.cursor/mcp.json. If the file already has mcpServers, add the heimdall entry inside it. The key is stored in that file. |
| VS Code | Run the command MCP: Open User Configuration and paste the printed block into the user mcp.json. If the file already has servers, add the heimdall entry inside it. Use the user file. A project's .vscode/mcp.json is committed with the project, which would publish the key. |
| Windsurf | Paste the printed block into ~/.config/devin/mcp_config.json. Older Windsurf builds use ~/.codeium/windsurf/mcp_config.json. If the file already has mcpServers, add the heimdall entry inside it. The key is stored in that file. |
| Claude (web and desktop app) | Not available yet. Claude Code connects with your Heimdall API key. |
| ChatGPT | Not available yet. Use your Heimdall API key. |
Assistants connect with an API key today. Connecting Claude or ChatGPT by signing in is not available yet.
Your key works in any tool that lets you set a request header.
Assistant setup follows each product's documentation: Claude Code, Codex, Cursor, VS Code, Windsurf, Claude custom connectors, ChatGPT connector authentication.
Code
Example calls
Each example asks for the Bering Strait open-water seasons in Arctic Open-Water Window 1.1. Put your key in the HEIMDALL_API_KEY environment variable first.
-
curl
curl https://api.heimdallresearch.com/v1/arctic/gates/bering-strait/seasons \ -H "Authorization: Bearer $HEIMDALL_API_KEY" -
Python
import os import requests r = requests.get( "https://api.heimdallresearch.com/v1/arctic/gates/bering-strait/seasons", headers={"Authorization": f"Bearer {os.environ['HEIMDALL_API_KEY']}"}, timeout=30, ) r.raise_for_status() seasons = r.json() -
JavaScript (Node.js 18 or later)
const r = await fetch( "https://api.heimdallresearch.com/v1/arctic/gates/bering-strait/seasons", { headers: { Authorization: `Bearer ${process.env.HEIMDALL_API_KEY}` } }, ); if (!r.ok) throw new Error(`HTTP ${r.status}`); const seasons = await r.json(); -
R (httr2 package)
library(httr2) seasons <- request("https://api.heimdallresearch.com/v1/arctic/gates/bering-strait/seasons") |> req_auth_bearer_token(Sys.getenv("HEIMDALL_API_KEY")) |> req_perform() |> resp_body_json()
Extras
The download has the tables, the citation, the data dictionary and the notebook. The extras for each dataset are listed at the end of this section. Weekly lake areas are planned. Storm reports for storms already in the published tables, and the extras listed for those tables, are free with a free account. Licensed products are by quote.
| Dataset | REST | MCP |
|---|---|---|
| Arctic | GET /v1/arctic/gates/{gate}/imagery | get_arctic_imagery |
| Lakes | GET /v1/lakes/{lake}/imagery | get_lake_imagery |
| Storms | GET /v1/storms/{event_id}/media, /track, /forecasts, GET /v1/tracks | get_storm_media, get_storm_track, get_storm_forecasts, find_storm_track, find_storms_near |
| Any dataset | The REST routes above, plus GET /v1/storms, GET /v1/lakes, GET /v1/arctic/gates | ask, get_storm, get_lake_series, get_arctic_gate, get_power_outage, get_download_link, get_arctic_imagery, get_lake_imagery, get_storm_track, get_storm_forecasts, get_storm_media, find_storm_track, find_storms_near |
Example prompts
| Dataset | Prompt |
|---|---|
| Arctic | When did the Bering Strait gate open last season? |
| Arctic | List the full-size file for gate bering-strait in week 29 of 2024. |
| Arctic | How many open-water days did the Vilkitsky Strait gate have in 2023? |
| Lakes | What was Walker Lake's open-water area in August 2024? |
| Lakes | Give me the full Sentinel-2 composite for Great Salt Lake south in summer 2024. |
| Lakes | Which summer preview images are in the Western Terminal Lakes download? |
| Storms | Show me Hurricane Milton's track. |
| Storms | Show the forecast lines for Hurricane Irma. |
| Storms | Show the satellite loop for Hurricane Helene. |
Not in this download, free through the API: full-size radar images of the 15 gates, 2015 to 2026, for the weeks that have a usable one. Get a free key.
Not in this download, free through the API: full-size summer satellite images of all 18 lakes and reservoirs, 2019 to 2026. Get a free key.
Not in this download, free through the API: lights-out videos for most storms, storm-path videos for hurricanes and tropical storms, forecast maps and satellite loops. Get a free key.
Keys and limits
- Free key
- 60 requests a minute, with a burst of 20 requests in 5 seconds, and 1,000 a day, for every free dataset.
- Early access
- Paid products are free to every account through December 31, 2026 (midnight US Eastern). From January 1, 2027, paid plans apply only to accounts that choose one, and the free API key and free tier continue. Storm reports for storms already in the published tables, and the extras listed for those tables, are free with a free account. Licensed products are by quote. Open dataset downloads stay free forever.
- Paid plans
- Free: 60 requests a minute, with a burst of 20 requests in 5 seconds, and 1,000 a day. Pro: 10,000 requests a day. Team: 100,000 requests a day. See plans and prices.
- Licensed data
- The same API and MCP server deliver licensed products, with a key scoped to your organization and product. Limits are set in your license.
- When you hit a limit
- The API answers 429 with a
Retry-Afterheader. Every response reports your remaining calls. - Keys
- Shown once, stored only as a hash, limited to the datasets you choose, and revocable at any time.
- Rules of use
- What you may and may not do with the data, in plain words: the Data Use Policy. The Terms apply if the two differ.
Errors
Every error returns JSON with an error object. It holds a code, a plain message and a docs_url. For example:
{
"error": {
"code": "unauthorized",
"message": "No API key was sent with this request. Get a free key at https://app.heimdallresearch.com/sign-up",
"docs_url": "https://heimdallresearch.com/developers/#errors"
}
}
The common codes:
| Status | Code | What to do |
|---|---|---|
| 401 | unauthorized | Send your key in the Authorization: Bearer header. Get a free key. |
| 401 | key_revoked | This API key was revoked and no longer works. Create a new key at app.heimdallresearch.com/keys. |
| 403 | forbidden | The key or role can't do this. Ask an owner or admin in your organization. |
| 403 | plan_required | This data or report is on a paid plan. See plans and prices. |
| 403 | not_on_sale | This storm's report isn't on sale yet. |
| 404 | not_found | Check the dataset, gate, lake or storm ID against GET /v1/datasets. |
| 409 | no_organization | Create or join an organization in the portal first. |
| 422 | invalid_request | A parameter is missing or out of range; the message names it. |
| 429 | rate_limited | Over the per-minute or daily limit. Wait for the time in the Retry-After header, or upgrade for higher limits. |
| 5xx | (varies) | Our fault. Retry with backoff; if it persists, tell us. |
Availability
- Status
- Open. Free keys, the REST API and the MCP server are live.
- Datasets
- Arctic Open-Water Window 1.1, Western Terminal Lakes 1.1 and Storm Blackout and Restoration 1.2, each on Zenodo, Kaggle and Hugging Face. Weekly lakes are planned.
- API reference
- Endpoints, parameters and response fields