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
November 13, 2025

@Firedog - I have fixed the issues with the json data set having both PEAK and OFF_PEAK readings...

Import of your meter readings data shows:-

  • Meter Registers: 10
  • Meter Readings: 1,648

New version at https://github.com/MikeWilliams-UK/My-Ovo-Data/releases/tag/V1.0.7

Firedog
Super User
Super User
November 13, 2025

@MikeWilliams Thanks again. That’s much better. I got 1650 readings - today’s turned up in the short time between your retrieval and mine.

There are some odd gaps in the record, which I’m sure aren’t the result of the retrieval process. There are three meters involved - non-smart, SMETS1 and SMETS2 - and their designation of registers to peak and offpeak tiers was a bit of a moveable feast over the years. This came to a head when they tried to enrol and adopt my SMETS1 meter on to the DCC; it turned out that DCC would not accept the first tier as offpeak, so we had to swap them over. 

I suspect that readings for most of 2018-2022 have been lost from my OVO account. I’m not sure if I have them salted away somewhere. I do certainly have month-end readings for the whole period, so losing the daily ones is no great problem.

Anyway, it’s great to be able to retrieve readings in a useable format along with the usage data. I hope those who download the code show their appreciation! 

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. |
MikeWilliams
Newcomer
Newcomer
November 13, 2025

You are welcome, the extra readings are due to me injecting your JSON file (instead of fetching my readings), which was created yesterday.

I was surprised that so many readings were available as we have previously been told that the system only stores the last 400 readings???

 

/Mike

Firedog
Super User
Super User
November 14, 2025

… we have previously been told that the system only stores the last 400 readings???
  

Bit of confusion here.

The meter has a datastore which saves (a) 400 days’ Hh usage data and (b) 31 days’ billing data, i.e. midnight snapshots of register readings etc. Suppliers will normally send a request for the previous day’s records once a day, so 48 Hh bucket contents and readings for each register.

It’s then up to suppliers what they do with these data, but OVO seem to salt everything away in the customer’s account. This what your app accesses. Utilities like n3rgy and Bright connect via DCC to the meters themselves to retrieve the contents of their datastores.

I see that the JSON file I shared with you has lots of register details, which OVOData pushes to the DB’s Meter Registers table. There has clearly been some mucking about with these data, because there were periods when the lowest register tier was the offpeak one, a state which DCC chokes on. So I think the R01/02 labels were changed around with no alteration to the underlying data. Theis means that OVO’s (or Kaluza’s) own systems can’t successfully retrieve the data for the upside-down periods. I’ll have another look.  

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. |
MikeWilliams
Newcomer
Newcomer
November 24, 2025

I am leaving OVO in a few days time.

This has led to a new bug raising its head in obtaining the meter readings

// Previous
"accountSupplyPoints": [
{
"startDate": "2014-12-01",
"end": null,
"supplyPoint": {

// Now that I have a exit date
"accountSupplyPoints": [
{
"startDate": "2014-12-01",
"end": {
"date": "2025-11-25"
},
"supplyPoint": {

Notice the unexpected formatting of end.date which give an error

Exception thrown: 'System.Text.Json.JsonException' in System.Text.Json.dll System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: $.data.account.accountSupplyPoints[0].end | LineNumber: 0 | BytePositionInLine: 91.

I have fixed the error.

I will be releasing it later today - providing my testing finds no further issues.

MikeWilliams
Newcomer
Newcomer
November 24, 2025

Sadly, I didn't have time to release my "final" version today. That's assuming that I will lose access when my account is closed.

I am hoping to get time to do it tomorrow.

/Mike

MikeWilliams
Newcomer
Newcomer
November 25, 2025

Version 1.0.8 released

https://github.com/MikeWilliams-UK/My-Ovo-Data/releases/tag/V1.0.8

PS: After today I will have limited ability to fix issues...

/Mike

Firedog
Super User
Super User
November 26, 2025

  

Version 1.0.8 released
  

Thanks as always, Mike. I’ve taken it for a test drive and all seems to be well.

I’m sorry to see you go, but I assume you found a better deal elsewhere. You’re always welcome in these forums whoever has your energy allegiance from time to time.

Au revoir, and bonne chance!

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
December 22, 2025

@MikeWilliams  - I would also like to thank you for your help and creation as well as updating of your program!

 

On a side note, does anyone know if there is any way to tell if the data being retrieved is estimate or actual readings?

I ask only as I just found out that our meter has not been sending data to OVO for over 2 months, but there have also been days where it dropped before that too (we have a SMETS1).  Mike’s tool has half-hourly reads for our entire account, so I just wondered if there is some easy way to tell which are estimates and which are actual.

Or, based on some of the recent discussion just above about 400 days worth of data being stored, are these actual readings that didn’t get sent to OVO?

I’m a little confused and would appreciate any clarity, if anyone knows.

Thank you!

MikeWilliams
Newcomer
Newcomer
December 22, 2025

@X10 - If you have used my program and look into the data in the SQLite database using a program such as SQLite Studio (which is free https://sqlitestudio.pl/) you will be able to see in the table MeterReadings when the column Type has a value of “ESTIMATE”
 

 

/Mike