· Breaking
Response keys and CSV headers
On 23 July 2026 the web API changes JSON keys and CSV column headers. Values and shapes stay the same; only key and header names do.
Old key names will not remain available. From that date, previous JSON keys and CSV headers are dropped with no backwards-compatibility window. Clients that still expect the old names will break.
JSON keys move to standardised consistent lowercase snake_case keys across the API responses. CSV headers keep readable names but drop symbols and emoji (for instance ⌁ Power → Power).
1. Top-level / envelope JSON keys
| Before | After | Where |
|---|---|---|
Metadata |
metadata |
Most calculation endpoints |
Input query parameters |
input_query_parameters |
Inside metadata |
QR |
quick_response_code |
Power / performance / optimisation |
Results |
results |
Solar position overview |
Statistics |
statistics |
Power / performance |
Statistics for Surface N |
statistics_for_surface_n |
Multi-surface endpoints |
Performance for Surface N |
performance_for_surface_n |
Multi-surface endpoints |
Latitude / Longitude / Elevation |
latitude / longitude / elevation |
Topography JSON |
Horizon Profile |
horizon_profile |
Horizon profile |
horizon height |
horizon_height |
Nested under horizon profile |
Optimal Surface Position |
optimal_surface_position |
Surface optimisation |
Surface orientation / Surface tilt |
surface_orientation / surface_tilt |
Surface optimisation |
Irradiance sources |
irradiance_sources |
Coverage · available sources |
Features |
features |
Features endpoint |
Conventions |
conventions |
Conventions endpoint |
And more…
2. Nested payload fields (JSON)
Calculation responses no longer use display-name aliases with symbols (for example "Power ⌁", "Latitude ϕ", "Fingerprint 🆔"). Nested fields use the schema field names in snake_case. Representative renames:
| Before (examples) | After |
|---|---|
Latitude ϕ / Longitude ϑ / Elevation 🏔 |
latitude / longitude / elevation |
Surface Orientation ↻ / Surface Tilt ∡ |
surface_orientation / surface_tilt |
Start time / End time / Frequency |
start_time / end_time / frequency |
Fingerprint / Fingerprint 🆔 |
fingerprint |
Power ⌁ / ⌁ Power |
photovoltaic_power |
Power ⌁ without Loss |
photovoltaic_power_without_system_loss / power_without_system_loss |
Energy 🔌 / 🔌 Energy |
energy |
Temperature ℃ / 🌡 Temperature |
temperature |
Wind Speed ㎧ / 🌬 Wind Speed |
wind_speed |
Efficiency % / % Efficiency |
efficiency |
System Efficiency % |
system_efficiency |
Spectral effect ± / Spectral effect ± % |
spectral_effect / spectral_effect_percentage |
Reflectivity Effect ⬒ % |
reflectivity_effect_percentage |
Global ∡ / Direct ∡ / Diffuse ∡ / Reflected ∡ |
global_inclined_irradiance, direct_inclined_irradiance, … |
Global ∡ ☉ (before reflectivity) and similar |
…_inclined_irradiance_before_reflectivity |
Global ⭍ / Direct ⭍ / … (effective) |
effective_global_irradiance, effective_direct_irradiance, … |
Direct Irradiance ⭳ / Diffuse ⭳ |
direct_horizontal_irradiance / diffuse_horizontal_irradiance |
Incidence ⭸ / Altitude ⦩ / Azimuth + symbol |
incidence / altitude / azimuth |
Shading 🮞 / In-shade 🮞 / Sun-Horizon ⛰ |
shading_algorithm / in_shade / sun_horizon_position |
Peak Power / Technology / Mount type |
peak_power / technology / mount_type |
The same rule applies across verbose levels: if a JSON key used to be an inconsistent label or carried a symbol, expect the snake_case field name from the OpenAPI schema instead.
3. Statistics object (JSON)
| Before | After |
|---|---|
Yearly Average Energy |
yearly_average_energy |
Monthly Energy Summary |
monthly_energy_summary |
Yearly Average Global ∡ ☉ (and similar) |
yearly_average_global_inclined_irradiance_before_reflectivity |
Monthly Global ∡ ☉ Summary |
monthly_global_inclined_irradiance_before_reflectivity_summary |
Start / End / Count |
start / end / count |
Minimum / Mean / Maximum / Sum |
minimum / mean / maximum / sum |
25th Percentile |
percentile_25th |
Median / Mode / Variance |
median / mode / variance |
Standard deviation / std_dev |
standard_deviation |
Time of Minimum / Index of Minimum |
time_of_minimum / index_of_minimum |
Time of Maximum / Index of Maximum |
time_of_maximum / index_of_maximum |
| Hourly / grouped means labels | means |
4. CSV column headers (symbols removed)
CSV exports still use human-readable headers, but leading symbols and emoji are removed. Do not match on glyphs such as ⌁, 🔌, 🆔, ϕ, ∡, ☉, ⬇/⭳, %, 🮞, or 🌡.
| Before (with symbol) | After (plain name) |
|---|---|
⌁ Power |
Power |
⌁ Power without Loss |
Power without Loss |
⌁ Power model |
Power model |
🔌 Energy |
Energy |
🆔 Fingerprint |
Fingerprint |
ϕ Latitude / ϑ Longitude / 🏔 Elevation |
Latitude / Longitude / Elevation |
⦩ Altitude / ⭮ Azimuth / ⭸ Incidence |
Altitude / Azimuth / Incidence |
% Efficiency / % System Efficiency |
Efficiency / System Efficiency |
🌡 Temperature / 🌬 Wind Speed |
Temperature / Wind Speed |
⭳ Direct Horizontal Irradiance (and similar irradiance columns) |
Direct Horizontal Irradiance, … |
∡ Global Inclined Irradiance / ∡ ☉ … Before Reflectivity |
Global Inclined Irradiance / … Before Reflectivity |
⭍ Effective Global Irradiance (and other effective columns) |
Effective Global Irradiance, … |
± Spectral Effect / ± % Spectral Effect Percentage |
Spectral Effect / Spectral Effect Percentage |
🮞 Shading |
Shading |
This affects power, performance, solar-position, surface-optimisation, and related CSV downloads. OpenAPI CSV examples follow the new headers.
For a column-by-column reference (positions, verbosity levels, old and new parameter names, and descriptions), see the explanatory notes to the PVGIS CSV output parameters.
What does not change
- URL paths and query parameter names
- HTTP status codes and error shapes
- Numeric values, physical units, and series content
What you should do
- Update JSON clients to use
snake_casekeys. - Update CSV parsers to match headers without symbols.
Effective date: 23 July 2026 (23/07/2026). Questions: JRC-PVGIS@ec.europa.eu.