Skip to main content

HVAC Estimate Savings API Documentation

Overview

This endpoint calculates estimated cost savings for HVAC systems based on optimization strategies. It supports two calculation types:
  • Monthly: Returns detailed hourly data for a specific time period
  • Annual: Returns annualized savings estimates

Authentication

Requires API Key authentication via ApiKeyGuard.

Path Parameters

ParameterTypeRequiredDescription
idstringYesHome ID (UUID)

Request Body

Base Fields

FieldTypeRequiredDefaultDescription
typeenumYes-Calculation type: "monthly" or "annual"
targetTempnumber (Fahrenheit)No72Target temperature in Fahrenheit
targetCoolSetpointnumber (Fahrenheit)NotargetTemp + 1Target cooling setpoint in Fahrenheit
targetHeatSetpointnumber (Fahrenheit)NotargetTemp - 1Target heating setpoint in Fahrenheit
minTempnumber (Fahrenheit)No70Minimum allowed temperature in Fahrenheit
maxTempnumber (Fahrenheit)No74Maximum allowed temperature in Fahrenheit
heatTransferCoefficientnumberNo1Heat transfer coefficient for thermal modeling
irradianceCoefficientnumberNo0.5Solar irradiance coefficient
coolingRatenumberNo1Cooling rate multiplier
heatingRatenumberNo1Heating rate multiplier
modeenumYes-HVAC mode: "AUTO", "COOL", "HEAT", or "OFF"
daysnumberNo1Number of days to simulate

Monthly Type Specific Fields

FieldTypeRequiredDescription
startobjectNoStart time configuration. Either {month: number} or {startTime: Date}
startTimeDate (ISO string)NoDeprecated - Use start object instead. Start time for the calculation

Annual Type Specific Fields

FieldTypeRequiredDescription
monthsnumber[] | nullNoArray of month indices (0-11) to include. If null, all 12 months are included

Request Examples

Monthly Calculation Example

{
  "type": "monthly",
  "targetTemp": 72,
  "targetCoolSetpoint": 73,
  "targetHeatSetpoint": 71,
  "minTemp": 70,
  "maxTemp": 74,
  "heatTransferCoefficient": 1,
  "irradianceCoefficient": 0.5,
  "coolingRate": 1,
  "heatingRate": 1,
  "mode": "AUTO",
  "start": {
   1
  },
  "days": 1,
}

Annual Calculation Example

{
  "type": "annual",
  "targetTemp": 72,
  "minTemp": 70,
  "maxTemp": 74,
  "mode": "AUTO",
  "days": 1,
  "months": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
}

Response

The response structure depends on the type parameter.

Monthly Response

FieldTypeDescription
zipcodestringHome zipcode
percentageSavednumberPercentage of cost saved (0-1)
dollarsSavednumberTotal dollars saved
optimizedCostnumberTotal cost with optimization
baselineCostnumberTotal cost without optimization (baseline)
outdoorTempnumber[]Array of outdoor temperatures for each hour (Fahrenheit)
temperatureDatanumber[]Array of optimized indoor temperatures for each hour (Fahrenheit)
hvacConsumptionnumber[]Array of optimized HVAC consumption for each hour (kWh)
baselineTemperatureDatanumber[]Array of baseline indoor temperatures for each hour (Fahrenheit)
baselineHvacConsumptionnumber[]Array of baseline HVAC consumption for each hour (kWh)
lengthnumberNumber of data points (hours)
setPointListnumber[]Array of setpoint temperatures for each hour (Fahrenheit)

Annual Response

FieldTypeDescription
zipcodestringHome zipcode
leapRevenuenumber | undefinedLEAP revenue (if applicable)
dollarsSavednumberAnnual dollars saved
percentageSavednumberAnnual percentage saved (0-1)
optimizedCostnumberAnnual optimized cost
baselineCostnumberAnnual baseline cost
optimizedEnergynumberAnnual optimized energy consumption (kWh)
baselineEnergynumberAnnual baseline energy consumption (kWh)
energyReductionnumberAnnual energy reduction (kWh)
annualDollarsSavednumberSame as dollarsSaved (for compatibility)
annualPercentageSavednumberSame as percentageSaved (for compatibility)
annualOptimizedCostnumberSame as optimizedCost (for compatibility)
annualBaselineCostnumberSame as baselineCost (for compatibility)
annualOptimizedConsumptionnumberSame as optimizedEnergy (for compatibility)
annualBaselineConsumptionnumberSame as baselineEnergy (for compatibility)
annualEnergyReductionnumberSame as energyReduction (for compatibility)

Response Examples

Monthly Response Example

{
  "zipcode": "60601",
  "percentageSaved": 0.15,
  "dollarsSaved": 12.50,
  "optimizedCost": 70.83,
  "baselineCost": 83.33,
  "temperatureData": [72, 72.5, 73, 73.2, 73.5, 73.3, 73, 72.5, 72, 72, 72, 72, ...],
  "hvacConsumption": [0.5, 0.8, 1.2, 1.5, 1.8, 1.6, 1.3, 0.9, 0.6, 0.4, 0.3, 0.2, ...],
  "baselineTemperatureData": [72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, ...],
  "baselineHvacConsumption": [0.3, 0.5, 0.9, 1.2, 1.5, 1.4, 1.1, 0.7, 0.4, 0.3, 0.2, 0.2, ...],
  "length": 24,
  "setPointList": [73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, ...],
}

Annual Response Example

{
  "zipcode": "60601",
  "leapRevenue": undefined,
  "dollarsSaved": 450.25,
  "percentageSaved": 0.18,
  "optimizedCost": 2047.14,
  "baselineCost": 2497.39,
  "optimizedEnergy": 12500.5,
  "baselineEnergy": 15200.8,
  "energyReduction": 2700.3,
  "annualDollarsSaved": 450.25,
  "annualPercentageSaved": 0.18,
  "annualOptimizedCost": 2047.14,
  "annualBaselineCost": 2497.39,
  "annualOptimizedConsumption": 12500.5,
  "annualBaselineConsumption": 15200.8,
  "annualEnergyReduction": 2700.3,
  "latencySeconds": 15.32
}

Error Responses

400 Bad Request

Missing required home data
{
  "statusCode": 400,
  "message": "Home zipcode is required"
}
or
{
  "statusCode": 400,
  "message": "Home rate plan ID is required"
}

404 Not Found

Home not found
{
  "statusCode": 404,
  "message": "Home not found"
}

500 Internal Server Error

Optimization failed
{
  "statusCode": 500,
  "message": "Optimization failed"
}
or
{
  "statusCode": 500,
  "message": "Invalid response structure"
}

Notes

  • The home must have a zipcode and ratePlanId configured
  • If outdoorTemp is not provided, temperatures are fetched from a weather service
  • The start field accepts either a month index (1-12) or a specific start time
  • For annual calculations, results are normalized to a full year (365 days)

Enumerations

EstimateSavingsType

ValueDescription
"monthly"Calculate monthly savings with hourly data
"annual"Calculate annual savings estimates

WsHvacMode

ValueDescription
"AUTO"Automatic mode (both heating and cooling)
"COOL"Cooling only
"HEAT"Heating only
"OFF"HVAC system off