thirdtrail-life Solar API

Solar position and clear-sky irradiance (NREL SPA-equivalent, Bird model).

Operations 10

GET /v1/solar/ Solar position and clear-sky irradiance #
POST /v1/solar/bulk/ Solar values for many locations (POST) #
GET /v1/solar/dli/ Daily Light Integral #
GET /v1/solar/feed.ics Solar events as an iCalendar feed #
GET /v1/solar/path/ Sampled solar path for a day #
GET /v1/solar/range/ Solar values over a date range #
GET /v1/solar/webhooks/ Solar webhooks retrieve #
POST /v1/solar/webhooks/ Solar webhooks create #
GET /v1/solar/webhooks/{webhook_id}/ Solar webhooks retrieve 2 #
DELETE /v1/solar/webhooks/{webhook_id}/ Solar webhooks destroy #

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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/thirdtrail-life:thirdtrail-life-solar-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

thirdtrail-life-solar-api-openapi.yml Raw ↑
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