PVGIS: Photovoltaic Geographic Information System

API Release Notes

History of API changes, newest first.


· 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 ⌁ PowerPower).

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

What you should do

  1. Update JSON clients to use snake_case keys.
  2. Update CSV parsers to match headers without symbols.

Effective date: 23 July 2026 (23/07/2026). Questions: JRC-PVGIS@ec.europa.eu.