Skip to content

cURL Examples

Command-line examples using cURL for testing and scripting.

Health Check

curl https://api.tessellaterenewables.com/solar/health

Solar Resource Data

curl -X POST https://api.tessellaterenewables.com/solar/resource \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 35.0,
    "longitude": -110.0
  }'

Quick Optimization

curl -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "latitude": 35.0,
      "longitude": -110.0,
      "capacity_kw": 1000
    },
    "objective": "energy"
  }'

With Pretty Output (jq)

curl -s -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "latitude": 35.0,
      "longitude": -110.0,
      "capacity_kw": 1000
    },
    "objective": "energy"
  }' | jq '.'

Extract Specific Fields

curl -s -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{
    "site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000},
    "objective": "energy"
  }' | jq '{
    tilt: .optimal_parameters.tilt,
    azimuth: .optimal_parameters.azimuth,
    annual_energy: .energy_metrics.annual_energy_mwh,
    lcoe: .financial_metrics.lcoe_cents_per_kwh
  }'

Full Optimization with Polling

#!/bin/bash

# Submit optimization job
RESPONSE=$(curl -s -X POST \
  https://api.tessellaterenewables.com/solar/optimization/run \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "latitude": 35.0,
      "longitude": -110.0,
      "capacity_kw": 1000
    },
    "objective": "npv",
    "max_iterations": 50
  }')

JOB_ID=$(echo $RESPONSE | jq -r '.job_id')
echo "Job submitted: $JOB_ID"

# Poll for results
while true; do
  RESULT=$(curl -s "https://api.tessellaterenewables.com/solar/optimization/$JOB_ID")
  STATUS=$(echo $RESULT | jq -r '.status')
  PROGRESS=$(echo $RESULT | jq -r '.progress // 0')

  echo "Status: $STATUS ($PROGRESS%)"

  if [ "$STATUS" = "completed" ]; then
    echo ""
    echo "Results:"
    echo $RESULT | jq '.optimal_parameters'
    echo ""
    echo "Energy: $(echo $RESULT | jq '.energy_metrics.annual_energy_mwh') MWh"
    echo "NPV: $(echo $RESULT | jq '.financial_metrics.npv_dollars')"
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "Error: $(echo $RESULT | jq -r '.error_message')"
    exit 1
  fi

  sleep 2
done

Multi-Objective Optimization

curl -X POST https://api.tessellaterenewables.com/solar/optimization/multi \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "latitude": 35.0,
      "longitude": -110.0,
      "capacity_kw": 1000
    },
    "objectives": ["energy", "lcoe"],
    "generations": 100
  }'

Power Prediction

curl -X POST https://api.tessellaterenewables.com/solar/predict \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 35.0,
    "longitude": -110.0,
    "capacity_kw": 1000,
    "tilt": 32.0,
    "azimuth": 180.0,
    "dc_ac_ratio": 1.25,
    "gcr": 0.38
  }'

With API Key Authentication

curl -X POST https://api.tessellaterenewables.com/solar/optimization/run \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key_here" \
  -d '{
    "site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000},
    "objective": "npv"
  }'

Save Response to File

curl -s -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{
    "site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000},
    "objective": "energy"
  }' > optimization_result.json

Batch Site Comparison Script

#!/bin/bash

# Sites to compare
SITES='[
  {"name": "Phoenix", "lat": 33.45, "lon": -112.07},
  {"name": "Denver", "lat": 39.74, "lon": -104.99},
  {"name": "Austin", "lat": 30.27, "lon": -97.74}
]'

echo "Site Comparison (1000 kW)"
echo "========================="
echo ""

echo "$SITES" | jq -c '.[]' | while read site; do
  NAME=$(echo $site | jq -r '.name')
  LAT=$(echo $site | jq -r '.lat')
  LON=$(echo $site | jq -r '.lon')

  RESULT=$(curl -s -X POST \
    https://api.tessellaterenewables.com/solar/optimization/quick \
    -H "Content-Type: application/json" \
    -d "{
      \"site\": {\"latitude\": $LAT, \"longitude\": $LON, \"capacity_kw\": 1000},
      \"objective\": \"npv\"
    }")

  ENERGY=$(echo $RESULT | jq '.energy_metrics.annual_energy_mwh')
  LCOE=$(echo $RESULT | jq '.financial_metrics.lcoe_cents_per_kwh')
  NPV=$(echo $RESULT | jq '.financial_metrics.npv_dollars')

  printf "%-10s Energy: %8.0f MWh  LCOE: %5.2f ยข/kWh  NPV: $%'d\n" \
    "$NAME" "$ENERGY" "$LCOE" "${NPV%.*}"
done

Timing Requests

time curl -s -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{"site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000}}' \
  > /dev/null

Verbose Mode for Debugging

curl -v -X POST https://api.tessellaterenewables.com/solar/optimization/quick \
  -H "Content-Type: application/json" \
  -d '{"site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000}}'