thirdtrail-life Solar API
Solar position and clear-sky irradiance (NREL SPA-equivalent, Bird model).
Solar position and clear-sky irradiance (NREL SPA-equivalent, Bird model).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/thirdtrail-life:thirdtrail-life-solar-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: thirdtrail Solar API
version: 1.0.0
description: 'High-precision sun, moon, twilight, solar-irradiance and tide data for any point on Earth — with elevation as a first-class input.
All endpoints take `Authorization: Bearer `. Responses are shaped by the caller''s plan: features a plan does not include are omitted from the response rather than erroring.
Not for navigation or life-safety use — see https://thirdtrail.life/safety/'
servers:
- url: https://thirdtrail.life
description: Production
tags:
- name: Solar
description: Solar position and clear-sky irradiance (NREL SPA-equivalent, Bird model).
paths:
/v1/solar/:
get:
operationId: solar_retrieve
description: Solar azimuth, altitude and zenith plus Direct, Diffuse and Global Horizontal Irradiance under clear skies. NREL SPA-equivalent computation on JPL DE421, irradiance from the Bird Clear Sky Model.
summary: Solar position and clear-sky irradiance
parameters:
- in: query
name: auto_elevation
schema:
type: boolean
description: Look the elevation up from the coordinates. Paid plans only.
- in: query
name: elevation
schema:
type: number
format: double
description: 'Metres above sea level, -500 to 9000. The differentiating input: sunrise at 2000 m is measurably earlier than the sea-level answer most APIs return. Omit to use `auto_elevation`, or default to 0.'
- in: query
name: include
schema:
type: string
description: Comma-separated sections, e.g. `position,irradiance`.
- in: query
name: lat
schema:
type: number
format: double
description: Latitude in decimal degrees, -90 to 90.
required: true
- in: query
name: lon
schema:
type: number
format: double
description: Longitude in decimal degrees, -180 to 180.
required: true
- in: query
name: timestamp
schema:
type: string
description: Instant to evaluate, ISO 8601, e.g. `2026-06-21T12:00:00Z`.
- in: query
name: tz
schema:
type: string
description: IANA timezone for output timestamps, e.g. `Europe/Dublin`.
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/bulk/:
post:
operationId: solar_bulk_create
description: Batch form of `/v1/solar/`. Plan-gated.
summary: Solar values for many locations (POST)
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/dli/:
get:
operationId: solar_dli_retrieve
description: Integrated photosynthetically active radiation per day — the horticultural measure for growth planning.
summary: Daily Light Integral
parameters:
- in: query
name: auto_elevation
schema:
type: boolean
description: Look the elevation up from the coordinates. Paid plans only.
- in: query
name: elevation
schema:
type: number
format: double
description: 'Metres above sea level, -500 to 9000. The differentiating input: sunrise at 2000 m is measurably earlier than the sea-level answer most APIs return. Omit to use `auto_elevation`, or default to 0.'
- in: query
name: from
schema:
type: string
description: Range start, `YYYY-MM-DD`.
- in: query
name: lat
schema:
type: number
format: double
description: Latitude in decimal degrees, -90 to 90.
required: true
- in: query
name: lon
schema:
type: number
format: double
description: Longitude in decimal degrees, -180 to 180.
required: true
- in: query
name: to
schema:
type: string
description: Range end, `YYYY-MM-DD`.
- in: query
name: tz
schema:
type: string
description: IANA timezone for output timestamps, e.g. `Europe/Dublin`.
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/feed.ics:
get:
operationId: solar_feed.ics_retrieve
description: Solar events as `text/calendar`.
summary: Solar events as an iCalendar feed
parameters:
- in: query
name: auto_elevation
schema:
type: boolean
description: Look the elevation up from the coordinates. Paid plans only.
- in: query
name: elevation
schema:
type: number
format: double
description: 'Metres above sea level, -500 to 9000. The differentiating input: sunrise at 2000 m is measurably earlier than the sea-level answer most APIs return. Omit to use `auto_elevation`, or default to 0.'
- in: query
name: lat
schema:
type: number
format: double
description: Latitude in decimal degrees, -90 to 90.
required: true
- in: query
name: lon
schema:
type: number
format: double
description: Longitude in decimal degrees, -180 to 180.
required: true
- in: query
name: tz
schema:
type: string
description: IANA timezone for output timestamps, e.g. `Europe/Dublin`.
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/path/:
get:
operationId: solar_path_retrieve
description: The sun’s track across one day, sampled at `interval`. Used for shading studies and PV siting.
summary: Sampled solar path for a day
parameters:
- in: query
name: auto_elevation
schema:
type: boolean
description: Look the elevation up from the coordinates. Paid plans only.
- in: query
name: elevation
schema:
type: number
format: double
description: 'Metres above sea level, -500 to 9000. The differentiating input: sunrise at 2000 m is measurably earlier than the sea-level answer most APIs return. Omit to use `auto_elevation`, or default to 0.'
- in: query
name: interval
schema:
type: string
description: Sampling step for the path, e.g. `5m`.
- in: query
name: lat
schema:
type: number
format: double
description: Latitude in decimal degrees, -90 to 90.
required: true
- in: query
name: lon
schema:
type: number
format: double
description: Longitude in decimal degrees, -180 to 180.
required: true
- in: query
name: start_date
schema:
type: string
description: First day, `YYYY-MM-DD`. Historical dates are plan-gated.
- in: query
name: tz
schema:
type: string
description: IANA timezone for output timestamps, e.g. `Europe/Dublin`.
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/range/:
get:
operationId: solar_range_retrieve
description: Range form of `/v1/solar/`.
summary: Solar values over a date range
parameters:
- in: query
name: auto_elevation
schema:
type: boolean
description: Look the elevation up from the coordinates. Paid plans only.
- in: query
name: elevation
schema:
type: number
format: double
description: 'Metres above sea level, -500 to 9000. The differentiating input: sunrise at 2000 m is measurably earlier than the sea-level answer most APIs return. Omit to use `auto_elevation`, or default to 0.'
- in: query
name: from
schema:
type: string
description: Range start, `YYYY-MM-DD`.
- in: query
name: include
schema:
type: string
description: Comma-separated sections, e.g. `position,irradiance`.
- in: query
name: lat
schema:
type: number
format: double
description: Latitude in decimal degrees, -90 to 90.
required: true
- in: query
name: lon
schema:
type: number
format: double
description: Longitude in decimal degrees, -180 to 180.
required: true
- in: query
name: to
schema:
type: string
description: Range end, `YYYY-MM-DD`.
- in: query
name: tz
schema:
type: string
description: IANA timezone for output timestamps, e.g. `Europe/Dublin`.
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
/v1/solar/webhooks/:
get:
operationId: solar_webhooks_retrieve
description: 'List webhooks for the caller and the product implied by the route,
or POST to create a new webhook.
Subclasses set `api_product_slug` (and the URL pattern uses the
matching Webhook* view).'
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
summary: Solar webhooks retrieve
x-summary-source: derived
post:
operationId: solar_webhooks_create
description: 'List webhooks for the caller and the product implied by the route,
or POST to create a new webhook.
Subclasses set `api_product_slug` (and the URL pattern uses the
matching Webhook* view).'
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
summary: Solar webhooks create
x-summary-source: derived
/v1/solar/webhooks/{webhook_id}/:
get:
operationId: solar_webhooks_retrieve_2
description: Retrieve / delete a single webhook by id.
parameters:
- in: path
name: webhook_id
schema:
type: string
format: uuid
required: true
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'200':
description: No response body
summary: Solar webhooks retrieve 2
x-summary-source: derived
delete:
operationId: solar_webhooks_destroy
description: Retrieve / delete a single webhook by id.
parameters:
- in: path
name: webhook_id
schema:
type: string
format: uuid
required: true
tags:
- Solar
security:
- bearerAuth: []
- cookieAuth: []
responses:
'204':
description: No response body
summary: Solar webhooks destroy
x-summary-source: derived
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Your API key, as `Authorization: Bearer tt_live_…`. Keys are minted in the dashboard and shown once — store it in a secret manager. The key determines your plan, and the plan shapes what each response contains.'
cookieAuth:
type: apiKey
in: cookie
name: sessionid