# Yield Analysis

The Yield endpoint provides mean specific yield values and detailed annual specific yield data for photovoltaic (PV) systems based on their site's location and installation characteristics. This endpoint supports `GET` requests that require `latitude`, `longitude`, as well as the `slope` and `orientation` of the PV system. By default, calculations cover the years **2015 to 2024**.

:::note
For users on the free plan, access is limited to the mean specific yield value calculated over the past 10 years. No per-year breakdown, confidence intervals, or additional detail is included.
:::

:::note
Extended data going back to **2007** is available as an add-on. Pass `include_historical_data=true` and set `historical_data_start_year` accordingly.
:::

:::note
A **rate limit of 6 requests per minute** applies to prevent abuse. Exceeding this will return a `429` response.
:::

## Base URL

The Base URL for this endpoint is:

```
https://api.pvnode.com/v1/yield/
```

## Example Request

The following examples demonstrate how to pass the required parameters and include the [API key](/docs/en/authentication)
for authentication. The example uses a `slope` of 30 degrees, an `orientation` of 180 degrees (south-facing), and
the location is set to Rosenheim, Germany with coordinates `latitude`: 47.84812, `longitude`: 12.06231.

<CodeTabs>

```python
import requests

url = 'https://api.pvnode.com/v1/yield/'
body = {
    "latitude": 47.84812,
    "longitude": 12.06231,
    "slope": 30,
    "orientation": 180
}
headers = {
    'Authorization': 'Bearer ' + YOUR_API_KEY
}
response = requests.get(url, headers=headers, params=body)
data = response.json()
```

```javascript
const axios = require('axios');

const url = 'https://api.pvnode.com/v1/yield/';
const params = {
    latitude: 47.84812,
    longitude: 12.06231,
    slope: 30,
    orientation: 180
};
const headers = {
    Authorization: 'Bearer YOUR_API_KEY'
};

axios.get(url, { headers, params })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        console.error('Error during API call:', error);
    });
```

</CodeTabs>

This covers the base configuration. The API supports many additional parameters for shading, tracker systems, module characteristics, and more — see the [API Reference](/api/v1-endpoints#yield) for the full list.

## Advanced Configuration

<div className="not-prose mt-4">
  <div className="grid sm:grid-cols-2 gap-3">
    <a href="/docs/en/guides/shading-horizon" className="group block rounded-xl border border-border bg-card p-5 hover:border-primary/50 hover:shadow-lg hover:shadow-primary/5 transition-all">
      <h3 className="font-semibold text-sm mb-1 group-hover:text-primary transition-colors">Shading &amp; Horizon</h3>
      <p className="text-xs text-muted-foreground leading-relaxed">Configure horizon profiles, row shading, and other shading scenarios.</p>
    </a>
    <a href="/docs/en/guides/tracker-configuration" className="group block rounded-xl border border-border bg-card p-5 hover:border-primary/50 hover:shadow-lg hover:shadow-primary/5 transition-all">
      <h3 className="font-semibold text-sm mb-1 group-hover:text-primary transition-colors">Tracker Configuration</h3>
      <p className="text-xs text-muted-foreground leading-relaxed">Set up single-axis and dual-axis tracker systems with custom parameters.</p>
    </a>
  </div>
</div>
