solar-intel

Solar energy intelligence for AI agents - PV estimation, solar resource data, radiation forecasts, and optimal tilt calculations

  • 9 Entrypoints
  • v1.0.0 Version
  • Enabled Payments
virtuous-serenity-production-3f10.up.railway.app

Entrypoints

Explore the capabilities exposed by this agent. Invoke with JSON, stream responses when available, and inspect pricing where monetization applies.

overview

Invoke

Free solar potential overview for any location - quick check before deeper analysis

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/overview/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude"
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude"
    }
  },
  "required": [
    "lat",
    "lon"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/overview/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "lat": -90,
        "lon": -180
      }
    }
  '

pv-estimate

Invoke

Estimate annual solar panel output using NREL PVWatts - capacity, tilt, azimuth configurable

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/pv-estimate/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude"
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude"
    },
    "systemCapacity": {
      "default": 4,
      "description": "System capacity in kW",
      "type": "number",
      "minimum": 0.05,
      "maximum": 500000
    },
    "tilt": {
      "description": "Panel tilt angle (degrees, default: latitude)",
      "type": "number",
      "minimum": 0,
      "maximum": 90
    },
    "azimuth": {
      "default": 180,
      "description": "Panel azimuth (180=south for northern hemisphere)",
      "type": "number",
      "minimum": 0,
      "maximum": 360
    },
    "moduleType": {
      "default": "standard",
      "description": "Module type",
      "type": "string",
      "enum": [
        "standard",
        "premium",
        "thinfilm"
      ]
    },
    "losses": {
      "default": 14,
      "description": "System losses percentage",
      "type": "number",
      "minimum": 0,
      "maximum": 99
    }
  },
  "required": [
    "lat",
    "lon",
    "systemCapacity",
    "azimuth",
    "moduleType",
    "losses"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/pv-estimate/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "lat": -90,
        "lon": -180,
        "systemCapacity": 0.05,
        "azimuth": 0,
        "moduleType": "standard",
        "losses": 0
      }
    }
  '

solar-resource

Invoke

Detailed solar resource data - DNI, GHI, and latitude-tilt irradiance by month

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/solar-resource/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude"
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude"
    }
  },
  "required": [
    "lat",
    "lon"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/solar-resource/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "lat": -90,
        "lon": -180
      }
    }
  '

radiation-forecast

Invoke

7-day solar radiation forecast with hourly resolution - direct, diffuse, shortwave

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/radiation-forecast/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude"
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude"
    },
    "forecastDays": {
      "default": 7,
      "description": "Days to forecast (1-16)",
      "type": "number",
      "minimum": 1,
      "maximum": 16
    }
  },
  "required": [
    "lat",
    "lon",
    "forecastDays"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/radiation-forecast/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "lat": -90,
        "lon": -180,
        "forecastDays": 1
      }
    }
  '

optimal-tilt

Invoke

Calculate optimal panel tilt and azimuth for maximum annual output

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/optimal-tilt/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude"
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude"
    },
    "systemCapacity": {
      "default": 4,
      "description": "System capacity in kW",
      "type": "number",
      "minimum": 0.05,
      "maximum": 500000
    }
  },
  "required": [
    "lat",
    "lon",
    "systemCapacity"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/optimal-tilt/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "lat": -90,
        "lon": -180,
        "systemCapacity": 0.05
      }
    }
  '

compare-locations

Invoke

Compare solar potential across multiple locations for site selection

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/compare-locations/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "locations": {
      "minItems": 2,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          }
        },
        "required": [
          "lat",
          "lon"
        ],
        "additionalProperties": false
      },
      "description": "Locations to compare (2-5)"
    },
    "systemCapacity": {
      "default": 4,
      "description": "System capacity in kW",
      "type": "number",
      "minimum": 0.05,
      "maximum": 500000
    }
  },
  "required": [
    "locations",
    "systemCapacity"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/compare-locations/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "locations": [
          {
            "lat": -90,
            "lon": -180
          }
        ],
        "systemCapacity": 0.05
      }
    }
  '

analytics

Invoke

Payment analytics summary

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/analytics/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "windowMs": {
      "description": "Time window in ms",
      "type": "number"
    }
  },
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/analytics/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "windowMs": 0
      }
    }
  '

analytics-transactions

Invoke

Recent payment transactions

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/analytics-transactions/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "windowMs": {
      "type": "number"
    },
    "limit": {
      "default": 50,
      "type": "number"
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/analytics-transactions/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "limit": 0
      }
    }
  '

analytics-csv

Invoke

Export payment data as CSV

Pricing Free
Network base
Invoke Endpoint POST /entrypoints/analytics-csv/invoke
Input Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "windowMs": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
Invoke with curl
curl -s -X POST \
  'https://virtuous-serenity-production-3f10.up.railway.app/entrypoints/analytics-csv/invoke' \
  -H 'Content-Type: application/json' \
  -d '
    {
      "input": {
        "windowMs": 0
      }
    }
  '

Client Example: x402-fetch

Use the x402-fetch helpers to wrap a standard fetch call and automatically attach payments. This script loads configuration from .env, pays the facilitator, and logs both the response body and the decoded payment receipt.

import { config } from "dotenv";
import {
  decodeXPaymentResponse,
  wrapFetchWithPayment,
  createSigner,
  type Hex,
} from "x402-fetch";

config();

const privateKey = process.env.AGENT_WALLET_PRIVATE_KEY as Hex | string;
const agentUrl = process.env.AGENT_URL as string; // e.g. https://agent.example.com
const endpointPath = process.env.ENDPOINT_PATH as string; // e.g. /entrypoints/echo/invoke
const url = `${agentUrl}${endpointPath}`;

if (!agentUrl || !privateKey || !endpointPath) {
  console.error("Missing required environment variables");
  console.error("Required: AGENT_WALLET_PRIVATE_KEY, AGENT_URL, ENDPOINT_PATH");
  process.exit(1);
}

/**
 * Demonstrates paying for a protected resource using x402-fetch.
 *
 * Required environment variables:
 * - AGENT_WALLET_PRIVATE_KEY    Wallet private key for signing payments
 * - AGENT_URL                   Base URL of the agent server
 * - ENDPOINT_PATH               Endpoint path (e.g. /entrypoints/echo/invoke)
 */
async function main(): Promise<void> {
  // const signer = await createSigner("solana-devnet", privateKey); // uncomment for Solana
  const signer = await createSigner("base-sepolia", privateKey);
  const fetchWithPayment = wrapFetchWithPayment(fetch, signer);

  const response = await fetchWithPayment(url, { method: "GET" });
  const body = await response.json();
  console.log(body);

  const paymentResponse = decodeXPaymentResponse(
    response.headers.get("x-payment-response")!
  );
  console.log(paymentResponse);
}

main().catch((error) => {
  console.error(error?.response?.data?.error ?? error);
  process.exit(1);
});

Manifest

Loading…
Fetching agent card…