Updated November 2026 · Written and maintained by the Progression Agency strategy team
California’s Load Management Standards make the state’s largest utilities and community choice aggregators publish time-varying rates in MIDAS, a machine-readable database the California Energy Commission has run since August 25, 2021. A thermostat, water heater or EV charger app can read those rates and move its run time to cheaper, cleaner hours, if the code behind it follows MIDAS step by step. A software company in California building that product starts with an account, a ten minute token and ten lookup tables. Progression’s engineers are based in New York, build for California product teams remotely and come on site when a team asks.
On this page · 11 sections
- Fetched at midnight, expired by ten past
- How a software company in California reads MIDAS
- The session, call by call
- Integration budgets, as published
- Twelve aggregators, five utilities and a 700 GWh line
- San Jose Clean Energy and Silicon Valley Clean Energy Authority in MIDAS
- An Irvine software company and Southern California Edison
- Upload rights stay with the utilities
- Greenhouse gas signals beside the price
- When a FlexAlert arrives
- Before the first scheduled run
No energy data?A California business that needs an internal tool, a client portal or an integration with no energy data in it gets little from the MIDAS steps below; our software development company page covers that work.
MIDAS and the Load Management Standards belong to the California Energy Commission and this page describes them as the CEC’s two pages give them; the CEC can change either, so confirm the current wording before building. Progression has no relationship with the CEC or any utility or community choice aggregator and makes no claim about any customer’s bill. Regulatory questions go to the CEC, and contract questions go to counsel.
Fetched at midnight, expired by ten past
A water heater scheduler asks MIDAS for a token at midnight. At 12:14 it tries to read rates and fails. Nothing is wrong with the rates. The token was good for ten minutes, and the scheduler waited fourteen.
The CEC’s MIDAS page says the token expires after 10 minutes. A scheduler that stores the token and reuses it will work in testing and fail in production, at hours nobody is watching. The fix is a token request before every read, not a longer timer.
- A token lasts 10 minutes and no longer.
- A stored token is a bug waiting for a quiet hour.
- Request a token before each read.
- Log the token request and the read together.
How a software company in California reads MIDAS
The CEC’s MIDAS page says the Market Informed Demand Automation Server provides access to utilities’ time-varying rates, greenhouse gas emission signals and California Independent System Operator FlexAlerts. It has been available since August 25, 2021, and is the principal tool supporting the load management standards.
The Load Management Standards page says the standards encourage shifting electricity use from times when it is expensive and polluting to times when it is cheaper and cleaner. The revised standards require all large utilities and community choice aggregators to provide real-time electricity rates in a format that can be shared with smart devices or service providers.
There are four primary requirements. The CEC, large utilities and aggregators keep existing and future time-varying rates accurate in the machine-readable MIDAS database. Large utilities and aggregators develop a standard rate information access tool to support third-party services, develop and submit locational rates that change at least hourly to reflect marginal wholesale costs, and integrate information about new time-varying rates and automation technologies into customer education and outreach.
Who reads MIDAS?
Researchers and members of the public may register to query data. The CEC says users typically need programming skills and software.
Does the app need to know the standards?
It needs the signals the standards produce. The standards are why the rates are there.
The session, call by call
A product that reads MIDAS goes through a fixed sequence. The table gives each call, what MIDAS returns, what the product stores, what breaks if the call is skipped and who owns it on the team.
| The call | What MIDAS returns | What the product stores | What breaks if it is skipped | Who owns it |
|---|---|---|---|---|
| Register: a one-time call to the registration endpoint with the required parameters | An email to the address given | The username and the account type | No token can be requested | Backend engineer |
| Verify: answer the email | A verified User account | The date of verification | The token request is refused | Backend engineer |
| Token: call the token endpoint with username and password | A token string that expires after 10 minutes | Nothing for long; it is replaced before each read | Reads fail after ten minutes | Backend engineer |
| Schema: a GET to the ValueData endpoint with no parameters | The XML schema definition | A copy to validate against | Data cannot be read with confidence | Backend engineer |
| Lookup tables: a ValueData call naming each table | Upload codes and descriptions for Country, Daytype, Distribution, Enduse, Energy, Location, Ratetype, Sector, State and TimeZone | A cache with a refresh date | Codes cannot be translated into labels | Data engineer |
| RIN list: a ValueData call naming a signal type | The active rate identification numbers for that signal type | The list for each signal type | The app cannot tell which rate belongs to which customer | Data engineer |
| Values: read each RIN, as the MIDAS documentation describes | The values for the rate or signal | The values and the time they were read | The scheduler has nothing to follow | Data engineer |
| Device: schedule the run | Not applicable. | The schedule and a log of why | The device runs at the wrong time | Product lead |
| What an integration like this costs | Not applicable. | Not applicable. | See the price section below. | Not applicable. |
Accounts and the ten minute token
There are two account types, LSE accounts and User accounts. A product team uses a User account, which can query data. Registration is one call to the registration endpoint, and the user must answer the email before asking for a token.
Lookup tables before rates
A call to ValueData with a lookup table parameter returns the upload codes stored in that table with a description of each. The ten tables are Country, Daytype, Distribution, Enduse, Energy, Location, Ratetype, Sector, State and TimeZone. Loading them first lets the app turn codes into words.
Three signals in one RIN list
A call with a signal type returns the active RIN lists. Type 0 returns all, 1 returns electricity rates, 2 returns greenhouse gas emissions and 3 returns California ISO FlexAlerts.
| Signal type | What it returns | What the product does with it |
|---|---|---|
| 0 | All | A full inventory, useful when the app is first set up |
| 1 | Electricity rates | Schedules a device around cost |
| 2 | Greenhouse gas emissions | Schedules a device around cleaner hours |
| 3 | California ISO FlexAlert | Shows an alert and applies agreed actions |
- Register once and keep the account.
- Request a token before every read.
- Cache the schema and the lookup tables with a refresh date.
- Keep one RIN list per signal type.
Integration budgets, as published
An integration like this is a back end, a small data layer, a customer-facing app and testing. The market figures below cover software work of that kind. Progression quotes software work after a written scope, and pricing depends on scope and is set in the written proposal.
| Type of work | Typical low to published high |
|---|---|
| Software integration or internal tool | $30,000 to $100,000 |
| SaaS MVP | $30,000 to $150,000 |
| Mid complexity app | $60,000 to $150,000 |
| US agency or contract bill rate | $100 to $200 an hour |
Our API development page covers integrations more broadly, and our energy software development page covers the sector.
Twelve aggregators, five utilities and a 700 GWh line
The Load Management Standards page lists who must provide rates. The large investor-owned utilities are Pacific Gas and Electric, San Diego Gas and Electric and Southern California Edison. The large publicly owned utilities are the Los Angeles Department of Water and Power and the Sacramento Municipal Utility District.
| Kind | Named on the CEC’s page |
|---|---|
| Large investor-owned utilities | Pacific Gas and Electric, San Diego Gas and Electric, Southern California Edison |
| Large publicly owned utilities | Los Angeles Department of Water and Power, Sacramento Municipal Utility District |
| Large community choice aggregators | Central Coast Community Energy, CleanPowerSF, Clean Power Alliance of Southern California, East Bay Community Energy, Marin Clean Energy, Peninsula Clean Energy Authority, Pioneer Community Energy, San Diego Community Power, San Jose Clean Energy, Silicon Valley Clean Energy Authority, Sonoma Clean Power Authority, Valley Clean Energy |
| Any other aggregator | Any community choice aggregator that provides more than 700 GWh of electricity to customers in a calendar year |
A software development company in California building for these customers maps each customer to the utility or aggregator that serves them before it asks for a RIN. The mapping is a data question the customer answers, and the CEC’s list says only who is covered.
- Ask the customer for their utility or aggregator.
- Store the answer with the date it was given.
- Match the answer to the CEC’s list before asking for a RIN.
- Handle an aggregator that is not on the list as a separate case.
San Jose Clean Energy and Silicon Valley Clean Energy Authority in MIDAS
Both San Jose Clean Energy and the Silicon Valley Clean Energy Authority are on the CEC’s list. A software company in San Jose testing against those two finds their rates in the same database as Pacific Gas and Electric’s.
That means one integration, not two. The app reads a RIN list for each signal type and picks the entries for the supplier the customer names. This page makes no claim about which customers either aggregator serves.
- Test against more than one supplier from the start.
- Keep the supplier as a setting, not a constant.
- Compare RIN lists across suppliers before launch.
- Do not hard code any supplier’s identifiers.
Which devices does the product control?Tell us which devices your product controls and which customers it serves. You get a free proposal from a software company in California with the MIDAS session mapped call by call.
An Irvine software company and Southern California Edison
Southern California Edison and the Clean Power Alliance of Southern California are both named on the list. Plain advice for a software company in Irvine: test the customer-to-supplier mapping before any schedule logic.
A schedule that follows the wrong supplier’s rates is worse than none. The mapping screen belongs early in onboarding, with a plain question and an easy way to change the answer. The page claims no service area beyond what the CEC lists.
What if a customer does not know the supplier?
The app should explain where the name is found, and hold the schedule until it is set.
- Put the supplier question early in onboarding.
- Offer a way to change the answer later.
- Hold the schedule until the supplier is set.
- Log every change of supplier.
Upload rights stay with the utilities
Only CEC-verified utility and aggregator personnel can upload data, using an LSE account. User accounts can only query. Populating the RateInfo and Value tables requires the XML schema and is available to verified LSE accounts.
A California software company builds features around reading and never writes. A product team never builds a feature that depends on writing to MIDAS. A utility that wants access emails the MIDAS team with verification that it represents the utility it claims.
Can a product ever write to MIDAS?
Not with a User account. Writing is for verified utility and aggregator accounts, and a product team has no reason to ask for it.
- Build for query access only.
- Treat the schema as a read-only reference.
- Leave upload work to the utilities.
- Send access questions to the CEC.
Greenhouse gas signals beside the price
Signal type 2 returns greenhouse gas emissions. Plain advice: let the customer choose cheapest, cleanest or a blend, and show which one the device followed.
A device that follows price alone and a device that follows emissions will schedule differently. The customer should see the choice, not discover it later. The opt-in screen carries the choice and the override.
- Offer cheapest, cleanest or a blend.
- Show which choice the device followed.
- Keep an override for the customer.
- Log the choice with each schedule.
When a FlexAlert arrives
Signal type 3 returns California ISO FlexAlerts. The app shows the alert, applies only the actions the customer agreed to, and logs what it did.
The page makes no claim about what a FlexAlert asks of customers beyond its name. The customer’s agreement is what the app follows. A device that acts without agreement is a support call waiting to happen.
What does the app log on an alert?
The alert, the time, the actions taken and the customer’s settings at that moment.
- Show the alert in the app.
- Apply only agreed actions.
- Log the time and the actions.
- Let the customer review the log.
Before the first scheduled run
Eight checks cover the session and the schedule. Run them on a test account before any customer’s device is touched.
Our energy software development page covers the wider sector. For a project in the south of the state, see software development company in Los Angeles.
Who runs the checks?
An engineer who did not write the scheduler, with the CEC’s MIDAS page open beside the code.
A team that builds on MIDAS should keep these six numbers on one page, so the whole team can see them without reading the CEC’s pages.
Getting found in search
AI, AEO and what is changing
Paid media and lead generation
Websites and design
Choosing and working with an agency
Software and app development
Website design by industry and type
Web development, platforms and hosting
Social, content and brand
By industry and by situation
Frequently asked questions
What does a software company in California build on MIDAS?
What does the MIDAS database hold?
Which utilities have to load rates into MIDAS?
Can our app write data to MIDAS?
How many minutes does a MIDAS token stay valid?
Which lookup tables does MIDAS publish?
Does a software company in San Jose need anything different for local customers?
Can a software company in Irvine build for Southern California Edison customers?
What does a software development company in California need before writing MIDAS code?
What would a MIDAS integration cost to build?
Will Progression’s engineers meet our California team in person?
How does an app obtain a MIDAS token?
How do I get the XML schema?
What do the signal types mean?
What does RIN stand for in a MIDAS call?
Who can register?
How does a utility get upload access?
Does the page quote any rates?
Who answers questions about the Load Management Standards?
Should the app let customers override a schedule?
Which devices does the product control?Tell us which devices your product controls and which customers it serves. You get a free proposal from a software company in California with the MIDAS session mapped call by call.
Get a free marketing proposal
Tell us what you are trying to grow and we will come back with a plan, not a pitch deck. Same-day reply on weekdays.
