Skip to content

Quick Optimization

Get instant optimal solar parameters without running a full optimization job. Ideal for rapid assessments and interactive applications.

Endpoint

POST /solar/optimization/quick

Request

{
  "site": {
    "latitude": 35.0,
    "longitude": -110.0,
    "capacity_kw": 1000
  },
  "objective": "energy"
}

Parameters

Field Type Required Default Description
site.latitude float Yes - Site latitude (-90 to 90)
site.longitude float Yes - Site longitude (-180 to 180)
site.capacity_kw float Yes - System DC capacity in kW
objective string No energy Optimization objective

Objectives

Value Description
energy Maximize annual energy production (MWh)
lcoe Minimize Levelized Cost of Energy (¢/kWh)
npv Maximize Net Present Value ($)
irr Maximize Internal Rate of Return (%)

Response

{
  "optimal_parameters": {
    "tilt": 32.5,
    "azimuth": 180.0,
    "dc_ac_ratio": 1.25,
    "gcr": 0.35
  },
  "energy_metrics": {
    "annual_energy_mwh": 1850.5,
    "capacity_factor": 0.211,
    "specific_yield": 1850.5,
    "performance_ratio": 0.82
  },
  "financial_metrics": {
    "lcoe_cents_per_kwh": 3.45,
    "npv_dollars": 1250000,
    "irr_percent": 14.5,
    "payback_years": 6.2,
    "total_capex": 850000
  },
  "solar_resource": {
    "annual_ghi": 2150.5,
    "annual_dni": 2450.3,
    "avg_temp": 18.5,
    "data_source": "NASA_POWER"
  },
  "optimization_time_ms": 245
}

Code Examples

import requests

response = requests.post(
    "https://api.tessellaterenewables.com/solar/optimization/quick",
    json={
        "site": {
            "latitude": 35.0,
            "longitude": -110.0,
            "capacity_kw": 1000
        },
        "objective": "energy"
    }
)

result = response.json()

print("Optimal Parameters:")
print(f"  Tilt: {result['optimal_parameters']['tilt']}°")
print(f"  Azimuth: {result['optimal_parameters']['azimuth']}°")
print(f"  DC/AC Ratio: {result['optimal_parameters']['dc_ac_ratio']}")
print(f"  GCR: {result['optimal_parameters']['gcr']}")

print("\nEnergy Performance:")
print(f"  Annual Energy: {result['energy_metrics']['annual_energy_mwh']:,.0f} MWh")
print(f"  Capacity Factor: {result['energy_metrics']['capacity_factor']:.1%}")

print("\nFinancial Performance:")
print(f"  LCOE: {result['financial_metrics']['lcoe_cents_per_kwh']:.2f} ¢/kWh")
print(f"  NPV: ${result['financial_metrics']['npv_dollars']:,.0f}")
print(f"  IRR: {result['financial_metrics']['irr_percent']:.1f}%")
async function optimizeSolar(lat, lon, capacityKw, objective = 'energy') {
  const response = await fetch(
    'https://api.tessellaterenewables.com/solar/optimization/quick',
    {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        site: {
          latitude: lat,
          longitude: lon,
          capacity_kw: capacityKw
        },
        objective: objective
      })
    }
  );

  return response.json();
}

// Usage
const result = await optimizeSolar(35.0, -110.0, 1000, 'energy');
console.log(`Optimal tilt: ${result.optimal_parameters.tilt}°`);
console.log(`Annual energy: ${result.energy_metrics.annual_energy_mwh} MWh`);
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"
  }'

Comparing Objectives

Different objectives yield different optimal parameters:

objectives = ['energy', 'lcoe', 'npv', 'irr']

for obj in objectives:
    result = requests.post(
        "https://api.tessellaterenewables.com/solar/optimization/quick",
        json={
            "site": {"latitude": 35.0, "longitude": -110.0, "capacity_kw": 1000},
            "objective": obj
        }
    ).json()

    params = result['optimal_parameters']
    print(f"{obj.upper()}: Tilt={params['tilt']:.1f}°, GCR={params['gcr']:.2f}")

When to Use Quick vs Full Optimization

Use Case Recommended Endpoint
Interactive web apps Quick Optimization
Initial site screening Quick Optimization
Detailed feasibility study Full Optimization
Custom parameter bounds Full Optimization
Tradeoff analysis Multi-Objective

Performance

  • Response time: ~200-500ms
  • No job polling required: Results returned immediately
  • Caching: Solar resource data cached for faster repeated queries