get/health
curl 'https://api.orr.sh/health'- 200The service is up
This reference renders from the OpenAPI document the server emits about itself, checked in and gated in CI, so it cannot describe a route the deployed API does not serve. Even the curl commands are generated, example values included. Base URL: https://api.orr.sh. Version 0.1.0. Every data endpoint works without a key (60 requests/minute per IP); create an account for an API key and plan-rate limits.
Service liveness
curl 'https://api.orr.sh/health'International Standard Atmosphere state
ISA state for a geometric altitude, computed with the standard-atmosphere crate.
curl 'https://api.orr.sh/v1/atmosphere?altitude_m=1000'| Parameter | Type | Required | Description |
|---|---|---|---|
| altitude_m | number (double) | yes | Geometric altitude, metres, -500 to 86000 |
Weather intelligence (the V1 beachhead)
Point forecast, one time series per requested variable.
curl 'https://api.orr.sh/v1/weather/forecast?lat=35&lon=-100&vars=temperature_2m,wind_speed_10m'| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | number (double) | yes | Latitude, WGS84 degrees, -90 to 90 |
| lon | number (double) | yes | Longitude, WGS84 degrees, -180 to 180 |
| vars | string | yes | Comma-separated canonical variable ids, e.g. temperature_2m,wind_speed_10m |
| model | string | no | Model override: auto (default), nbm, hrrr, gfs, or ecmwf |
| horizon_hours | integer (int32) | no | Hours ahead of issue time to cover |
Recent observed/analyzed values near a point.
curl 'https://api.orr.sh/v1/weather/observations?lat=35&lon=-100&var=temperature_2m&since=2026-07-01T00:00:00Z'| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | number (double) | yes | Latitude, WGS84 degrees, -90 to 90 |
| lon | number (double) | yes | Longitude, WGS84 degrees, -180 to 180 |
| var | string | yes | Canonical variable id, e.g. temperature_2m |
| since | string | yes | Return values at or after this RFC 3339 instant |
Wind at a height above ground, for wind-energy work.
curl 'https://api.orr.sh/v1/weather/wind?lat=35&lon=-100&height_m=120'| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | number (double) | yes | Latitude, WGS84 degrees, -90 to 90 |
| lon | number (double) | yes | Longitude, WGS84 degrees, -180 to 180 |
| height_m | number (double) | yes | Height above ground to report wind at, metres, 10 to 300 (modern turbine hubs sit at 80-160 m) |
Power-system data, keyed by ISO zone
System load (demand) for a zone.
curl 'https://api.orr.sh/v1/energy/load?zone=ERCOT'| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | yes | Balancing authority / ISO zone, e.g. CAISO, ERCOT, MISO, PJM |
| since | string | no | Return values at or after this RFC 3339 instant (default: now) |
Locational marginal prices for a zone (optionally one node/hub).
curl 'https://api.orr.sh/v1/energy/prices?zone=ERCOT'| Parameter | Type | Required | Description |
|---|---|---|---|
| zone | string | yes | Balancing authority / ISO zone, e.g. CAISO, ERCOT, MISO, PJM |
| node | string | no | Node or hub within the zone |
| since | string | no | Return values at or after this RFC 3339 instant (default: now) |
Self-serve accounts and API keys. Data endpoints work without a key at 60 requests/minute per IP; a free key raises that to 300.
Create an account and its first API key.
curl -X POST 'https://api.orr.sh/v1/accounts' \
-H 'content-type: application/json' \
-d '{"email":"trader@example.com","password":"correct-horse-battery"}'Verify credentials and see the account and its keys.
curl -X POST 'https://api.orr.sh/v1/auth/login' \
-H 'content-type: application/json' \
-d '{"email":"trader@example.com","password":"correct-horse-battery"}'Mint an additional API key.
curl -X POST 'https://api.orr.sh/v1/keys' \
-H 'content-type: application/json' \
-d '{"email":"trader@example.com","password":"correct-horse-battery"}'Revoke an API key by id.
curl -X POST 'https://api.orr.sh/v1/keys/revoke' \
-H 'content-type: application/json' \
-d '{"email":"trader@example.com","key_id":"ok_1a2b3c4d5e6f","password":"correct-horse-battery"}'The identity behind the presented API key.
curl 'https://api.orr.sh/v1/me' \
-H "Authorization: Bearer $ORRERY_API_KEY"Early-access list (double opt-in)
Finish a double opt-in: match the token, flip to confirmed, render the page.
curl 'https://api.orr.sh/v1/confirm?e=you@example.com&t=one-time-token-from-the-email'| Parameter | Type | Required | Description |
|---|---|---|---|
| e | string | yes | Subscriber email address |
| t | string | yes | One-time confirmation token from the email |
Capture a signup: validate, store the row, best-effort send the confirm email.
curl -X POST 'https://api.orr.sh/v1/subscribe' \
-H 'content-type: application/json' \
-d '{"email":"you@example.com"}'