# Solar PV (PVGIS) API
> Solar photovoltaic potential for any location on Earth, powered by the EU JRC PVGIS (Photovoltaic Geographical Information System). Estimate how much energy a solar PV system would produce at a given coordinate — yearly and month-by-month output in kWh, the in-plane solar irradiation and a breakdown of system losses (angle-of-incidence, spectral, temperature) — for any panel size, fixed tilt and azimuth; find the optimal panel tilt and orientation that maximises annual output; and read the long-term monthly global horizontal solar irradiation. Covers most of the world (excluding polar and open-ocean areas) from years of satellite-based solar data. Ideal for solar installers and calculators, renewable-energy planning, home-energy and roof-potential tools, and climate / sustainability apps. Open data from EU JRC PVGIS.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/pvgis-api/..."
```

## Pricing
- **Free** (Free) — 3,710 calls/Mo, 2 req/s
- **Starter** ($5/Mo) — 50,400 calls/Mo, 8 req/s
- **Pro** ($14/Mo) — 247,000 calls/Mo, 20 req/s
- **Mega** ($36/Mo) — 1,216,000 calls/Mo, 50 req/s

## Endpoints

### Solar

#### `GET /v1/optimal` — Optimal panel tilt & azimuth

**Parameters:**
- `lat` (query, required, string) — Latitude (-90..90) Example: `48.2`
- `lon` (query, required, string) — Longitude (-180..180) Example: `16.4`
- `peakpower` (query, optional, string) — System size in kWp (default 1)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pvgis-api/v1/optimal?lat=48.2&lon=16.4"
```

**Response:**
```json
{
    "data": {
        "optimal": {
            "source": "EU JRC PVGIS",
            "location": {
                "lat": 48.2,
                "lon": 16.4,
                "elevation_m": 170
            },
            "azimuth_note": "0 = facing the equator (south in the N hemisphere); -90 = east, 90 = west",
            "peakpower_kwp": 1,
            "yearly_pv_kwh": 1178.25,
            "optimal_tilt_deg": 39,
            "optimal_azimuth_deg": -1,
            "yearly_irradiation_kwh_m2": 1477.29
        }
    },
    "meta": {
        "timestamp": "2026-05-31T15:13:35.017Z",
        "request_id": "23b5a6bb-71a2-45e5-9c10-78ad9daeece5"
    },
    "status": "ok",
    "message": "Optimal angles retrieved",
    "success": true
}
```

#### `GET /v1/pv` — PV system output estimate

**Parameters:**
- `lat` (query, required, string) — Latitude (-90..90) Example: `48.2`
- `lon` (query, required, string) — Longitude (-180..180) Example: `16.4`
- `peakpower` (query, optional, string) — System size in kWp (0.05-1000, default 1)
- `loss` (query, optional, string) — System loss % (0-30, default 14)
- `angle` (query, optional, string) — Panel tilt 0-90; omit for optimal angles
- `aspect` (query, optional, string) — Panel azimuth -180..180 (0=equator-facing)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pvgis-api/v1/pv?lat=48.2&lon=16.4"
```

**Response:**
```json
{
    "data": {
        "pv": {
            "source": "EU JRC PVGIS",
            "monthly": [
                {
                    "month": 1,
                    "pv_kwh": 50.75,
                    "irradiation_kwh_m2": 57.96
                },
                {
                    "month": 2,
                    "pv_kwh": 70.12,
                    "irradiation_kwh_m2": 81.08
                },
                {
                    "month": 3,
                    "pv_kwh": 106.12,
                    "irradiation_kwh_m2": 127.51
                },
                {
                    "month": 4,
                    "pv_kwh": 132.77,
                    "irradiation_kwh_m2": 166.28
                },
                {
                    "month": 5,
                    "pv_kwh": 130,
                    "irradiation_kwh_m2": 165.56
                },
                {
                    "month": 6,
                    "pv_kwh": 130.21,
                    "irradiation_kwh_m2": 169.97
                },
                {
                    "month": 7,
                    "pv_kwh": 136.95,
                    "irradiation_kwh_m2": 181.13
                },
                {
                    "month": 8,
                    "pv_kwh": 130.92,
                    "irradiation_kwh_m2": 171.78
                },
                {
                    "month": 9,
                    "pv_kwh": 112.42,
                    "irradiation_kwh_m2": 142.33
                },
        
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/radiation` — Long-term monthly solar radiation

**Parameters:**
- `lat` (query, required, string) — Latitude (-90..90) Example: `48.2`
- `lon` (query, required, string) — Longitude (-180..180) Example: `16.4`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pvgis-api/v1/radiation?lat=48.2&lon=16.4"
```

**Response:**
```json
{
    "data": {
        "radiation": {
            "unit": "kWh/m² (monthly average global horizontal irradiation)",
            "source": "EU JRC PVGIS",
            "monthly": [
                {
                    "month": 1,
                    "horizontal_irradiation_kwh_m2": 32.33
                },
                {
                    "month": 2,
                    "horizontal_irradiation_kwh_m2": 52.2
                },
                {
                    "month": 3,
                    "horizontal_irradiation_kwh_m2": 96.96
                },
                {
                    "month": 4,
                    "horizontal_irradiation_kwh_m2": 145.39
                },
                {
                    "month": 5,
                    "horizontal_irradiation_kwh_m2": 164.01
                },
                {
                    "month": 6,
                    "horizontal_irradiation_kwh_m2": 176.96
                },
                {
                    "month": 7,
                    "horizontal_irradiation_kwh_m2": 183.84
                },
                {
                    "month": 8,
                    "horizontal_irradiation_kwh_m2": 158.09
                },
                {
                    "month": 9,
                    "horizontal_irradiation_kwh_m2": 113.47
                },
                {
                    "month": 10,
                    "horizontal_irradiation_kwh_m2": 69.39
                },
                {
               
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Source & options

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pvgis-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Solar PV potential for any coordinate. /v1/pv = estimated PV system output (yearly + monthly kWh, irradiation and losses) for a given peakpower & loss; pass angle (+aspect) for a fixed mount, or omit angle to use the optimal angles. /v1/optimal = the optimal panel tilt & azimuth and the resulting yearly output. /v1/radiation = long-term monthly global horizontal irradiation. Pass lat & lon. Data covers most of the world except polar / open-ocean areas.",
        "source": "PVGIS — EU JRC Photovoltaic Geographical Information System (re.jrc.ec.europa.eu)",
        "endpoints": [
            "/v1/pv",
            "/v1/optimal",
            "/v1/radiation",
            "/v1/meta"
        ]
    },
    "meta": {
        "timestamp": "2026-05-31T15:13:35.817Z",
        "request_id": "044ccb33-8ff5-4e66-a0da-44121d3727b0"
    },
    "status": "ok",
    "message": "Meta retrieved",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/pvgis-api
OpenAPI spec: https://www.oanor.com/api/pvgis-api/openapi.json
