Corrently
DATA · DATA & ANALYTICS
Green-power index, wholesale prices, and tariffs for any German postcode.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
corrently_get_public_historyREADA year of daily historic weather for a location -- temperature, humidity, wind, precipitation and snow -- with yearly climate aggregates (heating-degree days, ice days, tropical nights, vegetation days) and a `meta` block naming each measure's dimension and how it aggregates. Reached by GET /public/history. About 84 KB per call. `zip` is IGNORED here -- this route geocodes by coordinate only -- and without `lat`/`lon` the API geolocates the CALLER by IP, which in production is the gateway's egress location. Always pass coordinates.
corrently_get_public_predictionREADA multi-day weather forecast for a location, with the resolved address, timezone and offset, a prose `description`, the daily `days` series and the `stations` behind it. Reached by GET /public/prediction. About 100 KB per call. `zip` is IGNORED; pass `lat` and `lon`, or the API geolocates the caller by IP.
corrently_get_v2_0_co2_calculateREADConverts kilowatt-hours to grams of CO2 at Corrently's published intensity, returning `CO2perUnit`, `co2`, and the amount and unit it read. Reached by GET /v2.0/co2/calculate. The three amount parameters select the MIX, and they are what the intensity depends on: measured 2026-09-19, `kwh=1000` and `kwhGreen=1000` both answer `CO2perUnit: 35`, while `kwhDEMIX=1000` answers `CO2perUnit: 485`. Send exactly one.
corrently_get_v2_0_co2_comparableREADRestates a quantity of CO2 in 22 comparable everyday units -- gallons of gasoline, gallons of diesel and the rest -- each with a name, a value, its unit and a sentence describing it. Reached by GET /v2.0/co2/comparable. Call it WITH `co2`: measured 2026-09-19, every `value` is `null` without it and filled in with it, so the parameter is what turns the unit table into an answer.
corrently_get_v2_0_co2_marketdataREADBid and ask prices for carbon certificate products -- `vcs`, `ver`, `gsc` and `rec` -- with the currency, unit and update timestamp. Reached by GET /v2.0/co2/marketdata. Takes no parameters: `currency` was measured IGNORED on 2026-09-19 (the field is echoed but the prices do not move). Only `rec` carried a bid and an ask in that measurement; the other three answered null on both sides, which is a market state and not an error.
corrently_get_v2_0_co2_oraclesREADThe carbon-credit oracles Corrently recognises, each with its account address, the credit's nature and serial number, total and available supply, and the settlement and clearing periods behind it. Reached by GET /v2.0/co2/oracles. Takes no parameters: `account` was measured IGNORED on 2026-09-19.
corrently_get_v2_0_co2_power_germanyREADThe national German electricity CO2 figures for one day: `totalCo2`, `totalMwh` and the resulting `gPerkWh`. Reached by GET /v2.0/co2/power/germany.
corrently_get_v2_0_co2_sourcesREADCorrently's tree-based carbon sink inventory: the registered trees with their issue dates and addresses, plus `availLifetime`, `usedLifetime` and `actualSincePlanted`. Reached by GET /v2.0/co2/sources. About 126 KB per call. `zip` was measured IGNORED; the inventory is global.
corrently_get_v2_0_gsi_averagegsiREADThe average Gruenstromindex (GSI) for one postcode over a time window, as `average_DSI` with the window the server actually used. Reached by GET /v2.0/gsi/averagegsi. ALL THREE arguments are required in practice: measured 2026-09-19, this route answers 500 with `zip` alone, 500 with `zip` and `from`, and 200 only with `zip`, `from` and `to` together. Corrently sends an empty body with the 500, so a caller that omits one gets no explanation -- which is why the description says so. The reply echoes the window the server actually used in `start_timestamp` / `end_timestamp`, and it is not always the one asked for (a 1789600000000 `to` came back as 1789601200000).
corrently_get_v2_0_gsi_dispatchREADThe regional generation mix around one postcode with the neighbouring locations it draws from and feeds to: `premix` and `postmix` shares by source (Biomasse, Solar, Wind auf Land, Wasser, Deponiegas, Klaergas, Geothermie), `dispatch_from` / `dispatch_to` as located energy shares, an average transport distance in km, and a daily history. Reached by GET /v2.0/gsi/dispatch. The richest read this integration ships -- about 10 KB per call. Source names are GERMAN and arrive in Latin-1-flavoured mojibake for the umlauted ones (`Klaergas` reaches the caller as the bytes the provider sends); they are passed through untouched rather than guessed at.
corrently_get_v2_0_gsi_marketdataREADThe Corrently market-data list for one German postcode -- the feed behind corrently.io/books/marktdaten-strompreis, which forecasts regional electricity prices. Reached by GET /v2.0/gsi/marketdata. MEASURED 2026-09-19: the envelope is well formed and postcode-aware (the reply echoes `url: /v2.0/gsi/marketdata?zip=<zip>`) and `data` came back EMPTY for every postcode and every window tried (69256, 10115; hours, days, from/to, limit, period, start). An empty list is the answer, not an error. For a populated price series use `corrently_get_v2_0_tariff_marketdata`, which returns 13 to 14 hourly rows.
corrently_get_v2_0_pingREADCorrently's own liveness endpoint. It answers `status` and `provisioning`, and `provisioning.source` is the ONLY place this API reports whether it recognised the credential: `TokenVerification` means the token was verified, `QueryToken` means a token was sent and not recognised, `CloudFlare-IP` means none was sent. Reached by GET /v2.0/ping. Corrently answers `status: "Warning: Deprecation"` here for a perfectly good token -- measured 2026-09-19 with the operator's own JWT -- so the warning is about the endpoint's API generation and not about the credential. This route also ECHOES THE CALLER'S TOKEN back in `request.token`; the connector redacts it before the reply leaves the process (see `CorrentlyConnector._redact`).
corrently_get_v2_0_solar_estimationREADAn estimated yield for a photovoltaic installation at a location, returned as `inputs` (what the server resolved) and `outputs`. Reached by GET /v2.0/solar/estimation.
corrently_get_v2_0_solar_forecastREADAn hourly solar-power-index (`spi`) forecast for a location, each point carrying `timeStamp`, `spi` and an ISO date. Reached by GET /v2.0/solar/forecast. ⚠ DOWN AT SHIP TIME, on the provider's side. It answered 200 with a real hourly `spi` series twice on 2026-09-19 -- directly, and again through the shipped dispatch path -- and then began answering 500 with an empty body to every request, 15 consecutive ones over twenty minutes, for `?zip=` and for `?lat=&lon=` alike, while its three sibling solar routes stayed 200 in the same minutes. That makes it a partial backend outage rather than a retired route, so it ships; try it, and prefer `corrently_get_v2_0_solar_prediction` while it is failing. `lng` is a THIRD spelling the server also honours (measured REAL alongside `lon`). Only `lon` is shipped: two names for one value in an argument list is an invitation to send both and wonder which won.
corrently_get_v2_0_solar_predictionREADA detailed solar generation prediction for a location -- about 9 KB of `output` beside the `input` the server resolved. Reached by GET /v2.0/solar/prediction.
corrently_get_v2_0_tariff_emobilREADThe electric-vehicle charging tariff at one postcode: `ap` the unit price in ct/kWh, `gp` the monthly base price in EUR, and the resolved city. Reached by GET /v2.0/tariff/emobil. Alive only WITH a postcode: measured 2026-09-19 it answers 500 with no parameters and 200 with `zip`. On this host a 500 is routinely a missing required argument rather than a dead route.
corrently_get_v2_0_tariff_marketdataREADThe hourly wholesale electricity price series, as a list of `{start_timestamp, end_timestamp, marketprice, unit}` in Eur/MWh. 13 to 14 rows per call, covering the rest of the current day. Reached by GET /v2.0/tariff/marketdata. Takes NO parameters: `zip` and `country` were both measured IGNORED on 2026-09-19 (byte-identical bodies for two different values). The series is national. This is the populated price feed -- prefer it over `corrently_get_v2_0_gsi_marketdata`, whose list is empty.
corrently_get_v2_0_tariff_slph0READThe standard-load-profile H0 (household) tariff at one postcode: `ap` the unit price in ct/kWh, `gp` the monthly base price in EUR, the resolved city and the grid `locationid`. Reached by GET /v2.0/tariff/slph0.
corrently_post_v2_0_solar_predictionREADThe same prediction as `corrently_get_v2_0_solar_prediction`, with its inputs in a JSON body. Reached by POST /v2.0/solar/prediction. Measured 2026-09-19: body `{"zip": "10115"}` with no query parameter returned the Berlin prediction.
corrently_post_v2_0_tariff_emobilREADThe same e-mobility tariff read as `corrently_get_v2_0_tariff_emobil`, with the postcode in a JSON body. Reached by POST /v2.0/tariff/emobil. Measured 2026-09-19: body `{"zip": "10115"}` with no query parameter returned Berlin's tariff.
corrently_post_v2_0_tariff_slph0READThe same H0 tariff read as `corrently_get_v2_0_tariff_slph0`, with the postcode in a JSON body. Reached by POST /v2.0/tariff/slph0. A real alternative form, not a duplicate: measured 2026-09-19, `POST /v2.0/tariff/slph0` with body `{"zip": "10115"}` and NO query parameter returned Berlin's tariff, so the body is read.
Often connected alongside
Put Corrently behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.