Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/forecast-solar:forecast-solar-public-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Forecast.Solar Public API
version: v7.41.0.2515 (Fri, 04 Sep 2026 14:20:34 +0200)
description: '## Restful API for Solar production forecast data and Weather forecast data.
### Retrieve data based on a location, the declination and orientation of solar panels.
#### Homepage • Documentation
made by Knut Kohl . Consulting'
tags:
- name: Public
description: Public functions
paths:
/check/{lat}/{lon}:
get:
tags:
- Public
description: Check location
parameters:
- $ref: '#/components/parameters/Latitude'
- $ref: '#/components/parameters/Longitude'
responses:
'200':
description: OK
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
summary: Get check by lat by lon
x-summary-source: derived
operationId: getCheckByLatByLon
x-operation-id-source: derived
/estimate/{lat}/{lon}/{dec}/{az}/{kwp}:
get:
tags:
- Public
description: Get estimated watts, watt hours and watt hours per day
parameters:
- $ref: '#/components/parameters/Latitude'
- $ref: '#/components/parameters/Longitude'
- $ref: '#/components/parameters/Declination'
- $ref: '#/components/parameters/Azimuth'
- $ref: '#/components/parameters/PowerInstalled'
- $ref: '#/components/parameters/TimeFormat'
- $ref: '#/components/parameters/CSVDelimiter'
- $ref: '#/components/parameters/CSVSeparator'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFull'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFull'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFull'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFull'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
summary: Get estimate by lat by lon by dec by az by kwp
x-summary-source: derived
operationId: getEstimateByLatByLonByDecByAzByKwp
x-operation-id-source: derived
/estimate/watts/{lat}/{lon}/{dec}/{az}/{kwp}:
get:
tags:
- Public
description: Get estimated watts per day
parameters:
- $ref: '#/components/parameters/Latitude'
- $ref: '#/components/parameters/Longitude'
- $ref: '#/components/parameters/Declination'
- $ref: '#/components/parameters/Azimuth'
- $ref: '#/components/parameters/PowerInstalled'
- $ref: '#/components/parameters/TimeFormat'
- $ref: '#/components/parameters/CSVDelimiter'
- $ref: '#/components/parameters/CSVSeparator'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseWatts'
text/csv:
schema:
$ref: '#/components/schemas/ResponseWatts'
application/xml:
schema:
$ref: '#/components/schemas/ResponseWatts'
text/plain:
schema:
$ref: '#/components/schemas/ResponseWatts'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
summary: Get estimate watts by lat by lon by dec by az by kwp
x-summary-source: derived
operationId: getEstimateWattsByLatByLonByDecByAzByKwp
x-operation-id-source: derived
/estimate/watthours/{lat}/{lon}/{dec}/{az}/{kwp}:
get:
tags:
- Public
description: Get estimated watt hours data
parameters:
- $ref: '#/components/parameters/Latitude'
- $ref: '#/components/parameters/Longitude'
- $ref: '#/components/parameters/Declination'
- $ref: '#/components/parameters/Azimuth'
- $ref: '#/components/parameters/PowerInstalled'
- $ref: '#/components/parameters/TimeFormat'
- $ref: '#/components/parameters/CSVDelimiter'
- $ref: '#/components/parameters/CSVSeparator'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseWattHours'
text/csv:
schema:
$ref: '#/components/schemas/ResponseWattHours'
application/xml:
schema:
$ref: '#/components/schemas/ResponseWattHours'
text/plain:
schema:
$ref: '#/components/schemas/ResponseWattHours'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
summary: Get estimate watthours by lat by lon by dec by az by kwp
x-summary-source: derived
operationId: getEstimateWatthoursByLatByLonByDecByAzByKwp
x-operation-id-source: derived
/estimate/watthours/day/{lat}/{lon}/{dec}/{az}/{kwp}:
get:
tags:
- Public
description: Get estimated watt hours sum per day
parameters:
- $ref: '#/components/parameters/Latitude'
- $ref: '#/components/parameters/Longitude'
- $ref: '#/components/parameters/Declination'
- $ref: '#/components/parameters/Azimuth'
- $ref: '#/components/parameters/PowerInstalled'
- $ref: '#/components/parameters/TimeFormat'
- $ref: '#/components/parameters/CSVDelimiter'
- $ref: '#/components/parameters/CSVSeparator'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseWattHoursDay'
text/csv:
schema:
$ref: '#/components/schemas/ResponseWattHoursDay'
application/xml:
schema:
$ref: '#/components/schemas/ResponseWattHoursDay'
text/plain:
schema:
$ref: '#/components/schemas/ResponseWattHoursDay'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/csv:
schema:
$ref: '#/components/schemas/ResponseFailure'
application/xml:
schema:
$ref: '#/components/schemas/ResponseFailure'
text/plain:
schema:
$ref: '#/components/schemas/ResponseFailure'
summary: Get estimate watthours day by lat by lon by dec by az by kwp
x-summary-source: derived
operationId: getEstimateWatthoursDayByLatByLonByDecByAzByKwp
x-operation-id-source: derived
components:
schemas:
DatasetWatts:
description: 'Tupel of "date-time": watts'
type: object
example:
2000-01-01 08:00: 1234.567
2000-01-01 09:00: 2345.678
EstimateWatts:
description: Estimated watts power per time period
type: array
items:
$ref: '#/components/schemas/DatasetWatts'
EstimateWattHours:
description: Estimated watt hours sum over day
type: array
items:
$ref: '#/components/schemas/DatasetWattHours'
MessageOk:
type: object
properties:
code:
type: integer
example: 0
type:
type: string
example: success
text:
type: string
example: ''
EstimateWattHoursDay:
description: Estimated watt hours per day
type: array
items:
$ref: '#/components/schemas/DatasetWattHoursDay'
DatasetWattHours:
description: 'Tupel of "date-time": kilo watt hours'
type: object
example:
2000-01-01 08:00: 12.345
2000-01-01 09:00: 35.801
ResponseWatts:
description: Power forecast
properties:
result:
$ref: '#/components/schemas/EstimateWatts'
message:
$ref: '#/components/schemas/MessageOk'
DatasetWattHoursPeriod:
description: 'Tupel of "date-time": kilo watt hours'
type: object
example:
2000-01-01 08:00: 12.345
2000-01-01 09:00: 23.456
ResponseFull:
description: Power forecast, production forecast and production forecast per day
properties:
result:
$ref: '#/components/schemas/ResultFull'
message:
$ref: '#/components/schemas/MessageOk'
ResponseFailure:
description: Error response, see message object
properties:
result:
example: null
message:
type: object
properties:
code:
description: Error code
type: integer
example: 123
type:
type: string
example: error
text:
description: Error message
type: string
example: Meaningful error message
EstimateWattHoursPeriod:
description: Estimated watt hours per time period
type: array
items:
$ref: '#/components/schemas/DatasetWattHoursPeriod'
ResultFull:
description: Power forecast, production forecast and production forecast per day
properties:
watts:
$ref: '#/components/schemas/EstimateWatts'
watt_hours_period:
$ref: '#/components/schemas/EstimateWattHoursPeriod'
watt_hours:
$ref: '#/components/schemas/EstimateWattHours'
watt_hours_day:
$ref: '#/components/schemas/EstimateWattHoursDay'
DatasetWattHoursDay:
description: 'Tupel of "date": kilo watt hours'
type: object
example:
'2000-01-01': 123.5467
'2000-01-02': 234.5678
ResponseWattHoursDay:
description: Production forecast per day
properties:
result:
$ref: '#/components/schemas/EstimateWattHoursDay'
message:
$ref: '#/components/schemas/MessageOk'
ResponseWattHours:
description: Production forecast sum over day
properties:
result:
$ref: '#/components/schemas/EstimateWattHours'
message:
$ref: '#/components/schemas/MessageOk'
parameters:
Declination:
name: dec
in: path
description: Solar plane declination, 0 = horizontal, 90 = vertical
required: true
schema:
type: number
format: float
maximum: 90
minimum: 0
CSVSeparator:
name: X-Separator
in: header
description: Value separator in CSV response, default ';', for a tabulator use string 'TAB'
required: false
schema:
type: string
default: ;
Azimuth:
name: az
in: path
description: Solar plane azimuth, West = 90, South = 0, East = -90
required: true
schema:
type: number
format: float
maximum: 180
minimum: -180
PowerInstalled:
name: kwp
in: path
description: Solar plane max. peak power in kilo watt
required: true
schema:
type: number
format: float
multipleOf: 0.001
exclusiveMinimum: 0
Latitude:
name: lat
in: path
description: Latitude of location
required: true
schema:
type: number
format: float
maximum: 90
minimum: -90
Longitude:
name: lon
in: path
description: Longitude of location
required: true
schema:
type: number
format: float
maximum: 180
minimum: -180
TimeFormat:
name: time
in: query
description: Set to 'utc' to return timestamps in ISO 8601, e.g. 2004-02-12T15:19:21+00:00
required: false
schema:
type: string
CSVDelimiter:
name: X-Delimiter
in: header
description: Dataset delimiter in CSV response, default '|'
required: false
schema:
type: string
default: '|'