Handle Tiered Rates
Learn how to identify, understand, and work with tiered rates in tariff structures, including fixed and variable limit examples with detailed calculations.
What are Tiered Rates?
Tiered rates are a specific type of tariff rate where the price customers pay varies based on their power consumption. A tariff rate represents one of many individual line items that customers pay on their tariff rate plan. Tiered rates are typically tied to consumption rates, so they change based on the total kWh the customer uses (especially for residential customers). However, they can also apply to demand rates (peak kW usage). Tiered rates may include optional seasons, time-of-use groups, and rate criteria (applicability values) that define them. In some rare cases, they can also have a baseline region (territory).
This how-to article provides detailed information about finding and understanding tiered rates. It's particularly useful for understanding how to display rate information or map these rates to your own tariff database. Note that our calculators automatically handle tiered rates using the usage data you provide.
Which Tariffs Have Tiered Rates?
The most direct way to determine if a specific tariff or tariff version has tiered rates is to loop through the rates and check if any have multiple tariff rate bands for the same applicability value (more details on this later). However, there's a simpler approach that works for most cases.
Each tariff includes an indicator field at the tariff "header" level called hasTieredRates. If this field is true, one or more of its default TariffRate entries have tiers. This doesn't necessarily mean all rates are tiered, but at least one is. You can also filter your tariff query to return only tariffs with tiered rates.
Anatomy of a Tiered Rate
A tiered tariff rate contains more than one tariff rate band. There's one band for each tier, and the information in each band specifies the lower and upper limits of that tier.
GET /rest/public/tariffs/980?populateRates=true&effectiveOn=2020-01-01
{
"tariffRateId":18616651,
"tariffId":3351380,
"tariffSequenceNumber":10,
"rateGroupName":"Energy and Demand Charge",
"rateName":"Energy and Demand Charge",
"fromDateTime":"2020-01-01T00:00:00-05:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"rateBands":[
{
"tariffRateBandId":12682396,
"tariffRateId":18616651,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":1000,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.05271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":12682397,
"tariffRateId":18616651,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.06271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}
Caution: Not all tariff rates with multiple bands are tiered rates. Sometimes a tariff rate will have several rate bands for different rate criteria, with different "applicabilityValue" data in each band. A tariff rate is only tiered if it has more than one TariffRateBand for the same "applicabilityValue," or one or more rates with no "applicabilityValue."
Fixed Limit Tiered Rates
For fixed limit tiered rates, the limits between tiers are specified in the tariff rate bands' consumptionUpperLimit field (for consumption charges) or the demandUpperLimit field (for demand charges). These limits are defined as the quantity for the billing period: kWh for consumption and kW for demand. The sequence number field indicates the order of the limits from lowest to highest.
Example 1 - Fixed Consumption Tiers (kWh)
GET /rest/public/tariffs/980?populateRates=true&effectiveOn=2020-01-01
{
"tariffRateId":18616651,
"tariffId":3351380,
"tariffSequenceNumber":10,
"rateGroupName":"Energy and Demand Charge",
"rateName":"Energy and Demand Charge",
"fromDateTime":"2020-01-01T00:00:00-05:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"rateBands":[
{
"tariffRateBandId":12682396,
"tariffRateId":18616651,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":1000,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.05271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":12682397,
"tariffRateId":18616651,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.06271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}Example 2 - Fixed Demand Tiers (kW)
GET /rest/public/tariffs/3305820?populateRates=true
{
"tariffRateId": 19637847,
"tariffId": 3429844,
"tariffSequenceNumber": 16,
"rateGroupName": "Demand Charge",
"rateName": "Demand Charge",
"fromDateTime": "2022-07-01T00:00:00-04:00",
"toDateTime": null,
"chargeType": "DEMAND_BASED",
"chargeClass": "NON_BYPASSABLE",
"chargePeriod": "MONTHLY",
"quantityKey": "billingDemand979",
"rateBands": [
{
"tariffRateBandId": 14158951,
"tariffRateId": 19637847,
"rateSequenceNumber": 1,
"hasConsumptionLimit": false,
"hasDemandLimit": true,
"demandUpperLimit": 25.0,
"hasPropertyLimit": false,
"rateAmount": 6.410000,
"rateUnit": "COST_PER_UNIT",
"isCredit": false,
"prevUpperLimit": null
},
{
"tariffRateBandId": 14158952,
"tariffRateId": 19637847,
"rateSequenceNumber": 2,
"hasConsumptionLimit": false,
"hasDemandLimit": true,
"hasPropertyLimit": false,
"rateAmount": 6.410000,
"rateUnit": "COST_PER_UNIT",
"isCredit": false,
"prevUpperLimit": null
}
]
}Variable Limit Tiered Rates
Sometimes tier limits can be formulaic or variable. This is common for residential customers in California, where the limit is based partly on the number of days in the billing cycle. When a limit is variable, the TariffRate's variableLimitKey field will contain a value. If the rate is tiered but doesn't have a variableLimitKey, then its tier limits are fixed, and you should use the values in the rate bands' upper limit fields.
Example 1
Here's a simple example of a variable limit tiered rate. Note that the variableLimitKey field is populated.
GET /rest/public/tariffs/80984?populateRates=true&effectiveOn=2020-01-01
{
"tariffRateId":17479531,
"tariffId":3245898,
"tariffSequenceNumber":5,
"rateGroupName":"Energy Charge",
"rateName":"Winter",
"fromDateTime":"2016-01-01T00:00:00-08:00",
"toDateTime":null,
"season":{
"seasonId":415,
"lseId":1116,
"seasonGroupId":1,
"seasonName":"Winter",
"seasonFromMonth":10,
"seasonFromDay":1,
"seasonToMonth":3,
"seasonToDay":31
},
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"variableLimitKey":"consumptionTiersCalifornia",
"rateBands":[
{
"tariffRateBandId":10932410,
"tariffRateId":17479531,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":16,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.0265,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":10932411,
"tariffRateId":17479531,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.0528,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}When a variableLimitKey is present, the value in that field points to a property that defines how the variability works. Take the value (e.g., consumptionTiersCalifornia) and use the Property Key API endpoint to get the property, which will show you the formula to use to determine its limits. You'll find the formula in the formulaDetail field.
//Template:
GET /rest/public/properties/{keyName}
//Example:
GET /rest/public/properties/consumptionTiersCalifornia
{
"status":"success",
"count":1,
"type":"PropertyKey",
"results":[
{
"keyName":"consumptionTiersCalifornia",
"displayName":"Consumption Tiers in California",
"family":"formula",
"keyspace":"tariff",
"description":"Formula to calculate the consumption Tiers using the number of days in the billing period",
"dataType":"FORMULA",
"formulaDetail":"#tariffRateBand.consumptionUpperLimit * #billingPeriod.days",
"entityType":"ORG"
}
]
}Given the formula above, here's how you calculate the limits and costs associated with this tariff rate:
- Date Range: 7/1 to 8/1 (31 billing days)
- Billing Period Consumption: 1000 kWh
- Formula:
#tariffRateBand.consumptionUpperLimit * #billingPeriod.days
| Rate Band ID | Consumption Upper Limit | Calculated Tier | Usage (kWh) | Total Usage | Rate | Cost |
|---|---|---|---|---|---|---|
| 10932410 | 16 | 16 × 31 = 496 | 496 | 496 | .0265 | $13.144 |
| 10932411 | NULL | NULL | 504 | 1000 | .0528 | $26.6112 |
| $39.7552 |
Example 2
The following JSON snippet shows a more complex example of a variable limit tiered rate commonly used across California investor-owned utilities (PG&E, SCE, and SDG&E).
{
"tariffRateId":17128970,
"masterTariffRateId":17023286,
"tariffId":3166167,
"tariffSequenceNumber":17,
"tariffBookSequenceNumber":17,
"rateGroupName":"Conservation Incentive Adjustment",
"rateName":"Conservation Incentive Adjustment (Winter - Territory P)",
"fromDateTime":"2014-03-01T00:00:00-08:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"variableLimitKey":"consumptionTiersCaliforniaWithMedicalAllowance"
}The response snippet above indicates that the variableLimitKey is consumptionTiersCaliforniaWithMedicalAllowance, so we retrieve that from the propertyKey endpoint:
GET /rest/public/properties/consumptionTiersCaliforniaWithMedicalAllowance
{
"keyName":"consumptionTiersCaliforniaWithMedicalAllowance",
"displayName":"Consumption Tiers in California With Medical Allowance Formula",
"family":"formula",
"keyspace":"tariff",
"description":"Consumption Tiers in California with Medical Allowance using the number of days in the billing period",
"dataType":"FORMULA",
"formulaDetail":"( #tariffRateBand.consumptionUpperLimit + #dailyMedicalAllowance ) * #tariffRateBand.propertyUpperLimit * #billingPeriod.days",
"entityType":"ORG"
}Given the formula above, here's how you calculate the limits and costs associated with this tariff rate:
- Date Range: 7/1 to 8/1 (31 billing days)
- Daily Medical Allowance: 0 (some customers with medical needs, such as dialysis machines, receive an additional allowance)
- Billing Period Consumption: 1000 kWh
- Formula:
(#tariffRateBand.consumptionUpperLimit + #dailyMedicalAllowance ) * #tariffRateBand.propertyUpperLimit * #billingPeriod.days
Where:
- Consumption Upper Limit is the daily allowance (before medical adjustment)
- Property Upper Limit is the percentage (factor) of baseline
| Rate Band ID | Consumption Upper Limit | Property Upper Limit | Calculated Tier | Usage (kWh) | Total Usage | Rate | Cost |
|---|---|---|---|---|---|---|---|
| 10408228 | 12.7 | 1.000000 | (12.7+0) × 1.0 × 31 = 393.7 | 393.7 | 393.7 | .06023 | $23.712 |
| 10408229 | 12.7 | 1.300000 | (12.7+0) × 1.3 × 31 = 511.81 | 511.81 | 905.51 | .04159 | $21.286 |
| 10408230 | 12.7 | 2.000000 | (12.7+0) × 2.0 × 31 = 787.4 | 94.49 | 1000 | .12299 | $1.162 |
| 10408231 | 12.7 | 3.000000 | (12.7+0) × 3.0 × 31 = 1181.1 | 0 | 1000 | .16299 | $0 |
| 10408232 | NULL | NULL | NULL | 0 | 1000 | .16299 | $0 |
| $46.16 |
Updated 16 days ago
