Calculates cost avoidance savings for meters matching filter criteria
Use this endpoint to run the savings processor for multiple meters. Filters determine which
meters are processed. Bill selection options control which bills are recalculated. Optionally
skip one or all special adjustment categories. Runs asynchronously as a background task.
Use GET /task/{guid} to check progress. Requires Savings Engine Run permission.
Request Headers
| Header | Value | Required | Description |
|---|---|---|---|
| ECI-ApiKey | string | Yes | Your API key. See Authentication. |
| Content-Type | application/json | Yes | All requests must specify JSON content type, including the request body. |
Request Body
CalculateSavingsRequest
| Property | Description | Type | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| billSelectionOption | Determines which option will be used to select the bills for this instance of the cost avoidance processor to process
|
string | ||||||||||||
| billingPeriod | When BillSelectionOption is ‘BillingPeriod’, this defines the billing period to be used to target bills for processing Valid billing period between 190001 and 300001 NULL Valid Required when BillSelectionOption is set to BillingPeriod, case sensitive. | integer (int32) | ||||||||||||
| filters | Filter criteria which determine the meters whose savings will be reprocessed | FilterEdit[] | ||||||||||||
|
FilterEdit properties
|
||||||||||||||
| skipSpecialAdjustmentOption | Allow the user to optionally exclude one or all special adjustments One of ‘SkipAll’, ‘SkipOne’, ‘SkipNone’ | string | ||||||||||||
| specialAdjustmentTypeIdToIgnore | During cost avoidance processing, the special adjustment having the provided special adjustment type ID will not be applied (only if SkipSpecialAdjustmentOption = “SkipOne”) Required when SkipSpecialAdjustmentOption is set to SkipOne, case sensitive. | integer (int32) | ||||||||||||
Example Request Body
{ "billSelectionOption": "string", "billingPeriod": 1, "filters": [
{ "fieldId": 1, "operator": "string", "value": "string"
}
], "skipSpecialAdjustmentOption": "string", "specialAdjustmentTypeIdToIgnore": 1
}
Responses
200
OK
The request succeeded and the response body contains the requested data.
Response Body Parameters
CostAvoidanceTask
| Property | Description | Type | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| baselineLog | BaselineLog | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
BaselineLog properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| beginDate | The date and time the task began | string (date-time) | |||||||||||||||||||||||||||||||||||||||||||||||||||
| costAvoidanceTaskId | The task ID | integer (int32) | |||||||||||||||||||||||||||||||||||||||||||||||||||
| endDate | The date and time the task finished. If the task is not finished, endDate will have no value | string (date-time) | |||||||||||||||||||||||||||||||||||||||||||||||||||
| filters | The task’s filters | FilterResponse[] | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
FilterResponse properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| hasAttachments | Indicates whether or not the task has an output log available for download | boolean | |||||||||||||||||||||||||||||||||||||||||||||||||||
| message | If there was a catastrophic error during task processing, it will go here | string | |||||||||||||||||||||||||||||||||||||||||||||||||||
| reason | The reason for the cost avoidance task. Will be one of the following:
|
string | |||||||||||||||||||||||||||||||||||||||||||||||||||
| savingsLog | SavingsLog | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
SavingsLog properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| settings | CostAvoidanceSettings | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
CostAvoidanceSettings properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| status | The status of the cost avoidance task. Will be one of the following:
|
string | |||||||||||||||||||||||||||||||||||||||||||||||||||
| taskGUId | The task GUID | string (uuid) | |||||||||||||||||||||||||||||||||||||||||||||||||||
| taskNote | Notes added to the cost avoidance task by the user | string | |||||||||||||||||||||||||||||||||||||||||||||||||||
| taskType | TaskType | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
TaskType properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| user | UserChild | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
UserChild properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Example Response
{ "baselineLog": { "errorCount": 1, "numberOfMeters": 1, "status": "string", "successCount": 1, "warningCount": 1
}, "beginDate": "2026-06-29", "costAvoidanceTaskId": 1, "endDate": "2026-06-29", "filters": [
{ "availableOperator": [
"string"
], "caption": "string", "dataFieldId": 1, "dataType": { "dataTypeCode": "string", "dataTypeId": 1, "dataTypeInfo": "string"
}, "fieldId": 1, "hidden": false, "operator": "string", "queryParameterName": "string", "recommended": false, "required": false, "value": "string"
}
], "hasAttachments": false, "message": "string", "reason": "string", "savingsLog": { "errorCount": 1, "numberOfMeters": 1, "status": "string", "successCount": 1, "warningCount": 1
}, "settings": { "billSelectionOption": "string", "ignoredSpecialAdjustmentType": "string", "ignoredWeatherAdjustments": false, "minimumBillingPeriod": 1, "skippedMultiAccountIfBillsMissing": false
}, "status": "string", "taskGUId": "string", "taskNote": "string", "taskType": { "taskTypeCode": "string", "taskTypeId": 1, "taskTypeInfo": "string"
}, "user": { "fullName": "string", "userCode": "string", "userId": 1
}
}