Unofficial MoneyDashboard API
Note: MoneyDashboard is now closed.
The OpenBanking specification is brilliant. It allows you to aggregate all of your financial accounts in one place. You can give read or write access to apps and services. Magic!
API access is restricted to registered financial institutions. That's good, because it puts up a barrier to entry preventing dodgy companies slurping up your data and sending all your money to scammers.
But, whether by design or not, it means that you as an individual cannot get API access to your bank. Most financial institutions restrict API access to other financial institutions. Grrr!
Luckily, I've found a slightly cheeky hack to let you get Read-Only JSON feeds of all your transactions!
Sign up to MoneyDashboard and authorise it to read your bank and credit card statements.
Once done, they have an API which lists your transactions and other things. I found this by the dark art of... opening developer tools and seeing what the page was requesting. 1337!
Here's my (light) attempt to document it. Note: This uses the MoneyDashboard Classic account. I haven't mapped their "Neon" service yet.
List of Transactions
This gets up to 999 transactions in JSON. You get a reasonable amount of metadata with each one.
https://my.moneydashboard.com/transaction/GetTransactions?limitTo=999
Here's a sample response, redacted for privacy:
JSON
{
"5": {
"Id": 123456789,
"Description": "MORRISONS BRADFORD",
"OriginalDescription": "MORRISONS BRADFORD",
"Amount": -168.35,
"Date": "/Date(1601683200000)/",
"OriginalDate": "/Date(-62135596800000)/",
"IsDebit": true,
"TagId": 257,
"MerchantId": 194245,
"AccountId": 987654,
"Notes": null,
"NativeCurrency": "GBP",
"NativeAmount": -168.35,
"CurrencyExchange": null,
"AvailableCurrencyExchanges": []
}
}
Pretty simple!
- The
Date
is in UNIX Epoch milliseconds. - I don't know what
OriginalDate
is. - There's a separate API call for folksonomy tags.
That's most of what I want. The ability to list all my transactions. But there are a few other interesting bits of the API
List of Accounts
https://my.moneydashboard.com/api/Account/
Returns all the accounts you have associated with MoneyDashboard:
JSON
{
"2": {
"Id": 123456,
"Name": "Platinum Cashback Credit Card",
"Institution": {
"RealmId": 0,
"RealmName": null,
"DateProviderTypeId": 4,
"Name": "American Express",
"IconUrl": "https://media.moneydashboard.com/img/institution/ic_amex.svg",
"LogoUrl": "https://media.moneydashboard.com/img/institution/ic_amex.svg",
"Id": 7,
"ShowAccounts": true
},
"Balance": 0,
"Added": "2019-11-31T11:53:10.9095627Z",
"LastRefreshed": "2020-01-20T10:20:21Z",
"AccountTypeId": 2,
"Colour": "#9e9d24",
"Overdraft": 0,
"IsClosed": true,
"IncludeInCalculations": true,
"IsIncludedInCashflow": true,
"Position": 0,
"IncludeInSidebar": true,
"NativeCurrency": "GBP",
"NativeBalance": -123.45,
"CurrencyExchange": null,
"AllowAccountMigration": false,
"ShowAccountMigrationAlert": false,
"IsOpenBanking": false,
"OpenBankingMigratedDate": null,
"LastRefreshStatus": 0,
"OAuthTokenCreatedDate": null
}
}
Mostly, I'm interested in the NativeBalance
to see how much I've spent on my card.
Spend by Merchant
You can see exactly how much you've spent with each company over a specific period:
https://my.moneydashboard.com/api/merchant/getspend?FromDate=2020-09-01&GroupingInstruction=1&ToDate=2020-09-30
JSON
{
"2": {
"Amount": -38.49,
"TransactionCount": 2,
"Id": 123456,
"Name": "Debenhams Store",
"ImageFile": "icon_merchant.svg",
"MobileIcon": "ic_merchant",
"TagDisplayCategoryName": null,
"DisplayColour": "#7C3E3E"
}
}
Spend by Group
MoneyDashboard allows you to tag your transactions. This shows spending by group and tag:
https://my.moneydashboard.com/api/OutgoingsByGroup?fromDate=2020-09-01&includeCredit=true&toDate=2020-09-30
JSON
{
"1": {
"TagId": 123,
"Amount": 8.6
}
}
Balance Over Time
Rather than plotting your own graphs, MoneyDashboard will show you your balances across your accounts:
https://my.moneydashboard.com/api/balanceHistory?EndDate=2020-10-31&StartDate=2019-10-01
JSON
{
"2": {
"Date": "2019-10-04T00:00:00Z",
"Balances": [
{
"Balance": -8.06,
"AccountId": 123456
},
{
"Balance": -718.78,
"AccountId": 789012
}
]
}
}
List of Tags
If you are interested in how your spend is categorised - arguably the whole point of MoneyDashboard - you can get a list of all the in-built tags and sub-tags:
https://my.moneydashboard.com/TaggingRules/getTags
JSON
{
"0": {
"TagId": 237,
"TagName": "Appearance",
"ParentTagId": 0,
"ParentTagName": null,
"ParentTag": null,
"ChildTags": [
{
"TagId": 247,
"TagName": "Clothes - Designer or Other",
"ParentTagId": 237,
"ParentTagName": "Appearance",
"ParentTag": null,
"ChildTags": [
{
"TagId": 120,
"TagName": "Accessories",
"ParentTagId": 247,
"ParentTagName": "Clothes - Designer or Other",
"ParentTag": null,
"ChildTags": [],
"ImageFile": "ic_person.svg",
"MobileIcon": "ic_person",
"TagDisplayColour": "#039BE5",
"IsSystemTag": true
}
],
"ImageFile": "ic_person.svg",
"MobileIcon": "ic_person",
"TagDisplayColour": "#039BE5",
"IsSystemTag": true
}
}
And self-created tags:
https://my.moneydashboard.com/CustomTags/GetListOfTags
JSON
{
"0": {
"TagId": 3,
"TagName": "Vehicle insurance",
"ParentTagId": 0,
"ParentTagName": null,
"ParentTag": null,
"ChildTags": [],
"ImageFile": "ic_car_bump.svg",
"MobileIcon": null,
"TagDisplayColour": "#F57C00",
"IsSystemTag": true
}
}
Getting Authorised
OK, so you want to do this? How do you authenticate yourself against the API? This is the tricky bit.
In the source code for the login page, you'll see something like this:
HTML
<input
name="__RequestVerificationToken"
type="hidden"
value="cykGysmBr1vpUY1" />
The actual value
is much longer.
You will also need the Cookie which is set when you request the login page.
Your username and password are POSTed in a JSON payload, like so:
BASH
curl 'https://my.moneydashboard.com/landing/login'\
-H 'User-Agent: Mozilla/5.0'\
-H 'Accept: application/json, text/plain, */*'\
-H 'Accept-Language: en-GB,en;q=0.5'\
--compressed\
-H 'X-Requested-With: XMLHttpRequest'\
-H '__RequestVerificationToken: cykGysmBr1vpUY1'\
-H 'Content-Type: application/json;charset=utf-8'\
-H 'Origin: https://my.moneydashboard.com'\
-H 'DNT: 1'\
-H 'Connection: keep-alive'\
-H 'Referer: https://my.moneydashboard.com/landing'\
-H 'Cookie: COOKIEDATA'\
-H 'TE: Trailers'\
--data-raw '{"OriginId":"1","Password":"Passw0rd123","Email":"you@example.com","CampaignRef":"","ApplicationRef":"","UserRef":""}'
Once done, you can make API GET calls using the __RequestVerificationToken
header.
Or, you can use a Python Library for MoneyDashboard
What Next?
I was thinking of building a passive dashboard to show me the state of my current account.
Or, maybe...
Alexa? Ask MoneyDashboard what the balance is on my credit cards.
Alexa? Ask MoneyDashboard how much I spent at Wagamamas last month?
Too much?
Enjoyed this post?
If you've found this useful, please sign up to MoneyDashboard using my referral link.
Or, you can:
Or, just leave a supportive comment.
George says:
RonaldB says:
@edent says:
RonaldB says:
@edent says: