Skip to main content
Gary
Rank 1
Rank 1
March 9, 2017
Solved

Can we get access to the OVO energy online account API to download our smart meter usage data?

  • March 9, 2017
  • 227 replies
  • 36559 views

Hi Ovo,

I wondered whether the API that powers your live and historical usage page in the account menu is something you could look into opening up a bit so we can freely access our raw data and also perhaps it may stimulate some interesting community projects?

For instance (more sport related), Strava and Fitbit.

Best answer by g-de

Updated on 14/08/25 by Abby_OVO

 

Tim_OVO: “We love seeing the innovative ways our customers are using tech to help monitor and manage their energy usage. It’s inspiring us to think about ways to do energy differently. We know some customers have been using some of the application programming interface (APIs) behind our public facing services. While we’re OK with that, we do need to make you aware of a couple of things.

 

These APIs are designed to be used by OVO teams only, and aren't public facing. There are some downsides to using APIs that aren't for the public, and we wanted to let you know what these are. Behind the scenes, OVO uses APIs to share and update information between systems that power your bills and your online account. This is done in partnership with Kaluza, the tech company that’s part of the OVO family. They’ve built the billing platform designed to put our customers in the driving seat of their energy usage. 

 

These internal APIs are intended for use by Kaluza and its clients, who are energy retailers like OVO, rather than customers. Because of this, there’s no support for them being used anywhere else, which means they may be discontinued with no notice when we update our products and services. 

 

OVO Energy and Kaluza need to be able to monitor these APIs, and may block access if there's any problems in the future.

 

We know some customers may have put time and effort into developing solutions that use these API. So, now that you know the risks, we want to hear from you on how you’re using the APIs and the problems you’re solving with your DIY approach. 

 

Is there anything you’d like to see from OVO to help you monitor and manage your energy better? Leave a comment below to tell us.”

 

can you help me understand if the links above allow users to access raw data as if from an API?

I can certainly give it a go.

 

Firstly, big thanks to Timmo and other contributors for developing the library. All thanks go to them and links to buy them a coffee for their effort can be found on PyPi or GitHub:

https://pypi.org/project/ovoenergy/
https://github.com/timmo001/ovoenergy

 

I assume the way the library was developed this was to reverse engineer the My OVO website. That is, browse the website as normal and and monitor the traffic to see what OVO URLs and APIs it uses. Assuming this is the case, one of these URLs (get account IDs) already seems to be different but the library is still working for the moment. The APIs being used are not officially supported outside of the website, so first, a warning that any changes to the My OVO website may break the library.

 

For anyone using Python, you should be able to include the ovoenergy library and look at https://github.com/timmo001/ovoenergy/blob/master/ovoenergy/cli.py for how to use it.

 

For replicating this in other languages, the process seems to be as follows:

  1. Login by sending a POST request to https://my.ovoenergy.com/api/v2/auth/login with the following JSON in the body:
    {
    "username": "...",
    "password": "...",
    "rememberMe": true
    }

    From the response, save the cookies to use in all future requests.

  2. Next, send a GET request to https://smartpaym.ovoenergy.com/api/customer-and-account-ids . Be sure to save the items in the “accountIds” property (usually only one item).
  3. Finally, make a GET request to https://smartpaym.ovoenergy.com/api/energy-usage/daily/{accountId}?date={yyyy-MM} where {accountId} is the value from the previous request and {yyyy-MM} is the month in the format 2020-08.

You can also get monthly or half-hourly usage using the following URLs similar to step 3:

As mentioned above, if this is wanted for Home Assistant, the integration was added in version 0.114 (https://www.home-assistant.io/integrations/ovo_energy/).


Unfortunately the data only goes up to the end of the previous day as OVO no longer provide real-time data:

 

227 replies

MikeWilliams
Newcomer
Newcomer
October 11, 2025

@Firedog 

This is what my daily usage looks like on the website on my phone, as you can see it correctly starts at 00:00 BST

 

MikeWilliams
Newcomer
Newcomer
October 11, 2025

@Firedog 

Is the difference an electric only quirk???

If I remember correctly you are electric only customer.

MikeWilliams
Newcomer
Newcomer
October 12, 2025

@Firedog I have sussed the difference.

The OVO website calls

https://smartpaymapi.ovoenergy.com/usage/api/half-hourly-local/nnnnnnn?date=2025-10-09

Which gives the date stamps in UTC

Whereas my app calls

https://smartpaymapi.ovoenergy.com/usage/api/half-hourly/nnnnnnn?date=2025-10-09

Which gives the date stamps in local

Quite clearly the -local version is wrongly named I would have called it -utc

MikeWilliams
Newcomer
Newcomer
October 13, 2025

For those enquisitive people you can switch my app from local timestamps to UTC by changing AppSettings.json from this

{
"LoginUri": "https://my.ovoenergy.com/api/v2/auth/login",
"TokenUri": "https://my.ovoenergy.com/api/v2/auth/token",
"AccountsUri": "https://api.eu1.prod.kaluza.com/graphql/1",
"MonthlyUri": "https://smartpaymapi.ovoenergy.com/usage/api/monthly/{0}?date={1}",
"DailyUri": "https://smartpaymapi.ovoenergy.com/usage/api/daily/{0}?date={1}",
"HalfHourlyUri": "https://smartpaymapi.ovoenergy.com/usage/api/half-hourly/{0}?date={1}",
"DumpData": "true"
}

to this

{
"LoginUri": "https://my.ovoenergy.com/api/v2/auth/login",
"TokenUri": "https://my.ovoenergy.com/api/v2/auth/token",
"AccountsUri": "https://api.eu1.prod.kaluza.com/graphql/1",
"MonthlyUri": "https://smartpaymapi.ovoenergy.com/usage/api/monthly/{0}?date={1}",
"DailyUri": "https://smartpaymapi.ovoenergy.com/usage/api/daily/{0}?date={1}",
"HalfHourlyUri": "https://smartpaymapi.ovoenergy.com/usage/api/half-hourly-local/{0}?date={1}",
"DumpData": "true"
}

It might be prudent to delete/rename the file {accountNo}.db from the folder C:\ProgramData\OvoData before trying this out.

/MIke

MikeWilliams
Newcomer
Newcomer
October 13, 2025

Just done an experiment using the endpoint “api/half-hourly” vs “api/half-hourly-local” and I have found that my program is over writing some of the values.

api/half-hourly (which gives local time)

First Period Start Last Period Start Count
2025-03-29 00:00:00 2025-03-29 23:30:00 48
2025-03-30 00:00:00 2025-03-30 22:30:00 46
2025-03-31 00:00:00 2025-03-31 23:30:00 48

As you can see for the last change over date two readings have been over written.
 

api/half-hourly-local (which gives UTC)

First Period Start Last Period Start Count
2025-03-29 00:00:00 2025-03-29 23:30:00 48
2025-03-30 00:00:00 2025-03-30 22:30:00 48
2025-03-31 00:00:00 2025-03-31 23:30:00 48

 

So I would recomend altering the appsettings.json as follows

"HalfHourlyUri": "https://smartpaymapi.ovoenergy.com/usage/api/half-hourly-local/{0}?date={1}",

MikeWilliams
Newcomer
Newcomer
October 14, 2025

@Firedog It will be interesting to see which API the OVO web site calls after we switch back to GMT

Firedog
Super User
Super User
October 14, 2025

@MikeWilliams Thanks for looking into this. I went cross-eyed on Sunday trying to find out why I first complained about this BST nonsense and decided to do other stuff yesterday in the hope that I could get back to it with a clearer brain this morning. Now I find you’ve beaten me to it!

We have several sources of usage data, and they all have their own way of presenting the figures. This can make it easy for the unwary to get waylaid if data from different sources are mixed up. I did a comparison some time ago to illustrate how the same dataset called up by date can produce really different results:
  

 

Of these, the only really accurate one is n3rgy - the meter time-stamps each half-hour bucket as it becomes full and moves on to the next, so the one that starts filling up at midnight is labelled 00:30. The various utilities then apparently change the time stamps to what they think the end-user wants. 

We’ll find out soon what happens at the end of summertime. I think they’ve got it about as good as can be expected. During GMT, there’s no need for the weird first-hour entry on a placeholder page before the day’s data have been retrieved.  

Noel | I have no official status; I'm just a volunteer who comes here to help other customers. My gear: Aclara SGM 1416-B Electricity-only E7 meter; Chameleon IHD3-PPMID-AAA | It may look as if I know what I’m talking about, but don’t let that fool you. |
Newcomer
October 16, 2025

@MikeWilliams & ​@Firedog thanks for your efforts and work on this.

Just thought I’d double check -  is there any way to get the data for this property’s smart meter from the last 400 days as has been mentioned by some previously? (Or any X number of days, as opposed to just for this account)

Thank you!

MikeWilliams
Newcomer
Newcomer
October 16, 2025

I am currently working on the code to get the last 400 reading for this account.

Not sure how you would get readings for an account that is not yours.

Please explain further ​@X10 ?

Firedog
Super User
Super User
October 16, 2025

… is there any way to get the data for this property’s smart meter from the last 400 days as has been mentioned by some previously… as opposed to just for this account?
  

The OVOData utility retrieves the data stored by OVO in the user account. It doesn’t know or care which meter originally recorded the data. The last 400 days’-worth will of course be included in the All Time dataset so long as the account is old enough.

You may have read that a SMETS2 smart meter records both a daily snapshot of the register readings at midnight and every half-hour’s usage, storing the former for 30 days and the latter for 400 days. Old records are deleted to make space for new ones. 

Some third-party utilities can access the meter’s usage data store with the customer’s permission. The ones I use - Bright and n3rgy - limit data retrieval to three months’-worth, but they might be persuaded to download the whole lot if you ask them nicely. 
 

Noel | I have no official status; I'm just a volunteer who comes here to help other customers. My gear: Aclara SGM 1416-B Electricity-only E7 meter; Chameleon IHD3-PPMID-AAA | It may look as if I know what I’m talking about, but don’t let that fool you. |