Changelog.
Shipped changes to the Amanoki API and site, newest first. Amanoki is a read-only HTTP API for wholesale electricity markets — JEPX regime labels, spike probabilities, forecast distributions, and the Japanese fuel-cost adjustment. Entries here cover anything that changes what an endpoint returns or how you call it: new endpoints, changed response fields, model swaps, and the calibration work behind them.
Two standing facts, because they are the ones people go looking for and a dated entry is a poor place to keep them. JEPX prices are refreshed once a day at 12:00 JST. The forecast model currently in service is v1.5. Full method for both is on methodology.
Review polish pass 2026-04-20
- Python SDK live on PyPI:
pip install amanoki. TypedClient/AsyncClientcovering every current endpoint, RFC 7807 error subclasses. - Per-IP rate limit (60 rpm, token bucket) at the app layer. 429 body is
application/problem+json;Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Resetall set. - Errors go out as RFC 7807
application/problem+jsonwith{type, title, status, detail, instance}. ThetypeURI points at the methodology section for the relevant failure class. - Every 2xx JSON response now carries an
_metablock (api version, methodology URL, not-advice notice). - Weather cache refreshes every 60 minutes in a background task;
weather_staleness_warningon regime-forecast responses when the last fetch is older than 2 h. - Regime-forecast responses gain
confidence_caveat(majority-class over-confidence) anduntrained_classes(classes with zero training frequency). /v1/admin/usagehides presence behind 404 when the token is missing or wrong./v1/health/deepadded. Root/returns service-discovery JSON.- Static surface added:
/about,/security,/terms,/privacy,/refunds,/commerce(特定商取引法),/status,/stats, independent/pricing. - Not-advice disclaimer on landing, methodology, and
_meta.notice. - spatial-influence adds
hit_rate_ci_95;limitparameters unified viaPydantic Query(ge=1, le=N)— silent caps gone.
Regime forecast v1.5 2026-04-17
- Live
regime-forecastnow serves a multinomial logistic regression trained with a 24-bar embargo. - Features: v1 (area + UTC hour + is-weekend + current z-vol + five Open-Meteo vars) plus z-vol lags at
t-1/-2/-6/-24and regime one-hot att-1. - Winner-per-horizon chosen by test Brier on an identical held-out; v1.5 wins all three horizons.
- Test Brier: 0.017 @ 60 min · 0.032 @ 120 min · 0.075 @ 240 min (baseline ≈ 0.43).
- An ESN reservoir-computing v2 was scaffolded and scrapped on service-fit grounds (state management, embargo, serve-time weather sequence alignment); the simpler lag-augmented v1.5 was shipped instead.
Analytics endpoints + usage counters 2026-04-14
/v1/power/{m}/{a}/matrix,/durations,/history— transition matrix, state-dwell distribution, per-bar feature snapshot./v1/power/{m}/{a}/spatial-influence— empirical lag-correlation ranking other areas by how often their regime entry precedes the target's./v1/power/{m}/{a}/regime-forecast— distribution over regimes att + horizon./v1/admin/usage— in-memory route-template counters gated byAMANOKI_METRICS_TOKEN.
Weekday conditioning 2026-04-12
- Spike-probability tables now condition on (hour-of-day × is-weekend). 48 buckets instead of 24.
- Response carries
bucket_sizeso callers can discount thin cells. /v1/power/{m}/{a}/transitionsendpoint added — recent FSM transitions, newest first./v1/statustransparency summary added.
Round A polish 2026-04-10
- Python SDK built (
amanoki), sync + async clients, typed responses. /v1/healthand/v1/statusnow includecode_commit.- Sentry wired (no-op when
SENTRY_DSNunset; 5xx-only + per-fingerprint throttle to stay inside the free tier). - OpenAPI examples for every response model —
/v1/referenceshows real payloads. - Static pages: quickstart, methodology, changelog. Plus favicon, OG image, 404, sitemap, robots.
Multi-market + JEPX live 2026-04-06
- Catalog of 6 markets: JEPX, ERCOT, PJM, CAISO, AEMO, NYISO.
- URL shape:
/v1/power/{market}/{area}./v1/marketslists the catalog. - JEPX live: ~356k feature bars — one per 30-minute settlement interval per series, each carrying its already-computed volatility statistics — baked into the deployment image and replayed into memory at boot, so a restart comes back with full history. A GitHub Actions job refreshes them daily at 12:00 JST.
/v1/power/{m}/{a}/spike-probability— empirical P(max ≥ threshold | hour-of-day), three thresholds × two horizons.