<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>openbanking &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/openbanking/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Sun, 26 Oct 2025 08:43:12 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>openbanking &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Converting MoneyDashboard's export file to a CSV - for Firefly III and others]]></title>
		<link>https://shkspr.mobi/blog/2023/10/converting-moneydashboards-export-file-to-a-csv-for-firefly-iii-and-others/</link>
					<comments>https://shkspr.mobi/blog/2023/10/converting-moneydashboards-export-file-to-a-csv-for-firefly-iii-and-others/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 24 Oct 2023 11:34:04 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=48478</guid>

					<description><![CDATA[As I mentioned last week, MoneyDashboard is shutting down. They are good enough to provide a JSON export of all your previous transactions.  It is full of entries like this:  {     &#34;Account&#34;: &#34;My Mastercard&#34;,     &#34;Date&#34;: &#34;2020-02-24T00:00:00Z&#34;,     &#34;CurrentDescription&#34;: null,     &#34;OriginalDescription&#34;: &#34;SUMUP *Pizza palace, London, W1&#34;,     &#34;Amount&#34;: -12.34,     &#34;L1Tag&#34;: &#34;Eating Out&#34;,    …]]></description>
										<content:encoded><![CDATA[<p>As I mentioned last week, <a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/">MoneyDashboard is shutting down</a>. They are good enough to provide a JSON export of all your previous transactions.</p>

<p>It is full of entries like this:</p>

<pre><code class="language-json">{
    "Account": "My Mastercard",
    "Date": "2020-02-24T00:00:00Z",
    "CurrentDescription": null,
    "OriginalDescription": "SUMUP *Pizza palace, London, W1",
    "Amount": -12.34,
    "L1Tag": "Eating Out",
    "L2Tag": "Pizza",
    "L3Tag": ""
},
{
    "Account": "American Express",
    "Date": "2019-01-11T00:00:00Z",
    "CurrentDescription": null,
    "OriginalDescription": "Work Canteen,Norwich",
    "Amount": -5,
    "L1Tag": "Lunch",
    "L2Tag": "",
    "L3Tag": ""
}
</code></pre>

<p>Let's write a quick bit of Python to turn that into CSV.  This will turn the above into two separate files.</p>

<p><code>My Mastercard.csv</code>:</p>

<pre><code class="language-csv">Data,       Description,                       Destination,  Amount
2020-02-24, "SUMUP *Pizza palace, London, W1", Pizza palace, -12.34
</code></pre>

<p>And <code>American Express.csv</code>:</p>

<pre><code class="language-csv">Data,       Description,            Destination,  Amount
2019-01-11, "Work Canteen,Norwich", Work Canteen, -5
</code></pre>

<p>I didn't make much use of MoneyDashboard's tagging, so I've ignored them.  The destination (which is the name of "opposing bank" in Firefly III speak) ignores the payment processor like <code>SUMUP</code> or <code>PAYPAL</code> and anything after the first comma.</p>

<p>It also sorts the CSV into date order. It's not very efficient, but you'll only run it once.</p>

<pre><code class="language-python">import json
import csv
import os
from datetime import datetime

#   Read the file
json_file = open( "md.json" )
data = json.load( json_file )
transactions = data["Transactions"]

#   Loop through the transactions
for transaction in transactions:
    #   Get the filename
    filename = transaction["Account"]

    #   Format the date
    date = datetime.strptime(transaction["Date"], "%Y-%m-%dT%H:%M:%SZ")
    formatted_date = date.strftime("%Y-%m-%d")

    #   The description
    description = transaction["OriginalDescription"]

    #   The destination is everything after the first " *" (if it exists) and before the first comma
    #   For example: "SUM *Pizza Place, London" becomes "Pizza Place"
    destination = description.split(',')[0]
    if " *" in destination:
        destination = destination.split(" *")[1]

    #   Monetary amount
    amount = transaction["Amount"]

    #   Create the file if it doesn't exist
    if not os.path.exists(f'{filename}.csv'):
        with open(f'{filename}.csv', mode='w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow(["Date", "Description", "Destination", "Amount"])

    #   Read the file and split the header from the existing data
    with open(f'{filename}.csv', mode='r', newline='') as file:
        reader = csv.reader(file)
        existing_data = list(reader)
        header = existing_data[0]
        data_rows = existing_data[1:]

    data_rows.append( [formatted_date, description, destination, amount] )

    #   Sort the data by the first column (string)
    sorted_data = sorted(data_rows, key=lambda x: x[0])

    #   Save the file back again
    with open(f'{filename}.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerows([header] + sorted_data)
</code></pre>

<p>Run that against your MoneyDashboard export and you can then import the CSV files into MoneyDashboard, GNUCash, or anything else.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=48478&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/10/converting-moneydashboards-export-file-to-a-csv-for-firefly-iii-and-others/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Free Open Banking API using Nordigen / GoCardless]]></title>
		<link>https://shkspr.mobi/blog/2023/10/free-open-banking-api-using-nordigen-gocardless/</link>
					<comments>https://shkspr.mobi/blog/2023/10/free-open-banking-api-using-nordigen-gocardless/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 22 Oct 2023 11:34:09 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[finance]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=48443</guid>

					<description><![CDATA[A few weeks ago I was moaning about there being no OpenBanking API for personal use. Thankfully, I was wrong!  As pointed out by Dave a company called Nordigen was set up to provide a free Open Banking service. It was quickly bought by GoCardless who said:  We believe access to open banking data should be free. We can now offer it at scale to anyone - developers, partners and Fintechs - looking…]]></description>
										<content:encoded><![CDATA[<p>A few weeks ago I was moaning about <a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/">there being no OpenBanking API for personal use</a>. Thankfully, I was wrong!</p>

<p>As pointed out by <a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#comment-330155">Dave</a> a company called <a href="https://www.ft.com/partnercontent/nordigen/europe-needs-free-open-banking-and-heres-why.html">Nordigen was set up to provide a free Open Banking service</a>. It was <a href="https://gocardless.com/g/gc-nordigen/">quickly bought by GoCardless</a> who said:</p>

<blockquote><p>We believe access to open banking data should be free. We can now offer it at scale to anyone - developers, partners and Fintechs - looking to solve customer problems.</p></blockquote>

<p>And, I'm delighted to report, it works! As a solo developer you can get access to your own data <em>for free</em> via the GoCardless APIs.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/10/gocardless-fs8.png" alt="Screenshot from GoCardless. 
1. Test with your own data. See how the product flow would look like for your users and what data is available. 2. Set up the API. Follow our documentation to set up the API and start collecting bank account data. 3. Customise the user interface.Pay as you go. Make the user agreement flow for your customers to match your brand. 4. Ready to go live? Need help and advice to set up faster?" width="1507" height="529" class="aligncenter size-full wp-image-48444">

<p>You'll get back a JSON file from each of your banks and credit cards with information like this in it:</p>

<pre><code class="language-json">{
   "bookingDate": "2023-07-11",
   "bookingDateTime": "2023-07-11T20:52:05Z",
   "transactionAmount": {
       "amount": "-2.35",
       "currency": "GBP"
   },
   "creditorName": "GREGGS PLC",
   "remittanceInformationUnstructured": "Greggs PLC, London se1",
   "merchantCategoryCode": "5812",
   "internalTransactionId": "123456789"
}
</code></pre>

<p>For foreign exchange, transactions look like this:</p>

<pre><code class="language-json">{
   "bookingDate": "2023-10-01",
   "bookingDateTime": "2023-10-01T21:41:40Z",
   "transactionAmount": {
      "amount": "-0.82",
      "currency": "GBP"
    },
    "currencyExchange": {
      "instructedAmount": {
         "amount": "1.00",
         "currency": "USD"
      },
      "sourceCurrency": "USD",
      "exchangeRate": "1.2195",
      "targetCurrency": "GBP"
   },
   "creditorName": "KICKSTARTER.COM",
   "remittanceInformationUnstructured": "Kickstarter.com, Httpswww.kick, 1.0 U.S. DOLLAR USA",
   "merchantCategoryCode": "5815",
   "internalTransactionId": "987654321"
}
</code></pre>

<p>Depending on your card and the transaction type, you might also get a few more bits of metadata.</p>

<p>Get started at <a href="https://gocardless.com/bank-account-data/"></a><a href="https://gocardless.com/bank-account-data/">https://gocardless.com/bank-account-data/</a>. From there, it's a case of <a href="https://developer.gocardless.com/bank-account-data/quick-start-guide">following the quickstart guide</a>.</p>

<h2 id="a-few-niggles"><a href="https://shkspr.mobi/blog/2023/10/free-open-banking-api-using-nordigen-gocardless/#a-few-niggles">A few niggles</a></h2>

<p>There's a bit of bouncing around. You've got to get an API key, get the institution ID, sign in, get redirected, get an ID from the callback, then get the bank account details. And <em>then</em> you can get the transactions!</p>

<p>Oh, and the access token only lasts a short while, so you'll need to either re-auth or use a refresh token.</p>

<p>Bank authorisation only lasts 90 days, so you'll have to refresh your details every 3 months. That's standard across all opening banking, but a bit of a pain.</p>

<p>GoCardless have <a href="https://gocardless.com/bank-account-data/coverage/">pretty comprehensive bank coverage</a> but they are missing a few which you might find useful.</p>

<p>Because there are so many financial institution in there, you might find it difficult to work out which one you need to log in to. For example, if you have a Barclays Credit Card, which of these is the right one for you?</p>

<pre><code class="language-json">{
    "id": "BARCLAYCARD_COMMERCIAL_BUKBGB22",
    "name": "Barclaycard Commercial Payments",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYCARD_COMMERCIAL_BUKBGB22.png"
  },
  {
    "id": "BARCLAYCARD_BUKBGB22",
    "name": "Barclaycard UK",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYCARD_COMMERCIAL_BUKBGB22.png"
  },
  {
    "id": "BARCLAYS_BUSINESS_BUKBGB22",
    "name": "Barclays Business",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYS_WEALTH_BUKBGB22.png"
  },
  {
    "id": "BARCLAYS_CORPORATE_BUKBGB22",
    "name": "Barclays Corporate",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYS_WEALTH_BUKBGB22.png"
  },
  {
    "id": "BARCLAYS_BUKBGB22",
    "name": "Barclays Personal",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYS_WEALTH_BUKBGB22.png"
  },
  {
    "id": "BARCLAYS_WEALTH_BUKBGB22",
    "name": "Barclays Wealth",
    "bic": "BUKBGB22",
    "transaction_total_days": "730",
    "countries": [
      "GB"
    ],
    "logo": "https://cdn.nordigen.com/ais/BARCLAYS_WEALTH_BUKBGB22.png"
  },
</code></pre>

<p>But, overall, it's an excellent service. Now I just need to find / write something to ingest the data and do something with it!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=48443&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/10/free-open-banking-api-using-nordigen-gocardless/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Why is there no OpenBanking API for personal use?]]></title>
		<link>https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/</link>
					<comments>https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 04 Oct 2023 11:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=47438</guid>

					<description><![CDATA[The recent news that MoneyDashboard is suddenly shutting down has exposed a gap in the way OpenBanking works. It is simply impossible for a user to get read-only access to their own data without using an aggregator. And there are very few aggregators around.  Why is it impossible for me to get programmatic access to my own data?  There are two interlinked reasons which I&#039;d like to discuss. …]]></description>
										<content:encoded><![CDATA[<p>The recent news that <a href="https://web.archive.org/web/20231004055844/https://www.moneydashboard.com/faq">MoneyDashboard is suddenly shutting down</a> has exposed a gap in the way <a href="https://www.openbanking.org.uk/">OpenBanking</a> works. It is simply impossible for a user to get read-only access to their own data without using an aggregator. And there are very few aggregators around.</p>

<p>Why is it impossible for me to get programmatic access to my own data?</p>

<p>There are two interlinked reasons which I'd like to discuss.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#background">Background</a></h2>

<p><a href="https://www.openbanking.org.uk/">OpenBanking</a> is a brilliant idea encoded in an excellent standard wrapped in some very complex processes and with some rather unfair limitations.</p>

<p>OpenBanking presents a <a href="https://openbankinguk.github.io/read-write-api-site3/v3.1.11/profiles/read-write-data-api-profile.html">standardised API to allow read and write access to a financial account</a>. So I could give a smartphone app read-only access to my credit card and let it automatically tell me when I've spent more than £50 on sausage rolls this week. Or I could add all my bank accounts to one service which would let me see my net worth. Or any of a hundred ideas.</p>

<p>I could also connect my accounts in such a way that when Bank Account A drop below £100, an OpenBanking API request is sent to Bank Account B to transfer some money to A.</p>

<p>Nifty!</p>

<h2 id="access"><a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#access">Access</a></h2>

<p>But here's the first problem. The only way you can get access to a bank's API is if you have a licence. And you only get a licence if you're a financial institution who can prove that they have robust security controls.  Which means that individuals have to go through an aggregator. Or, in OpenBanking terms, an "Account Information Service Provider".</p>

<p>Some OpenBanking providers will let individuals play in a "sandbox" to test out the API. There are no real accounts and no real money, it's just a way to test how the API works.</p>

<p>I can see why that makes sense for write access. You don't want a user's unpatched Raspberry Pi suddenly sending all their money to Russia.</p>

<p>And I can see why that makes sense for organisations which deal with data from multiple people. One leak and everyone is exposed.</p>

<p>But I'm not convinced that it makes sense to deny an individual read-only API access to their own account. Sure, I might accidentally leak my own data - but the same risk exists if I download a PDF statement from my bank.</p>

<h2 id="coverage"><a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#coverage">Coverage</a></h2>

<p>The second problem is that not every OpenBanking <em>consumer</em> will talk to every OpenBanking <em>provider</em>.</p>

<p>For example, I have an account with Coventry Building society. <a href="https://developer.coventrybuildingsociety.co.uk/">They have an OpenBanking API</a> which <em>no one</em> uses! They're not the largest financial institution in the UK, but have a fair few customers. And yet all the OpenBanking apps refuse to work with it.</p>

<p>So even if I did find an aggregator with an API, it may not work with all my financial institutions.</p>

<h2 id="whats-next"><a href="https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/#whats-next">What's next?</a></h2>

<p>As much as I love using someone else's website or app, sometimes there's nothing better than writing something bespoke.</p>

<p>I was using <a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/">MoneyDashboard as an <em>unofficial</em> API</a>. I gave them read-only access to my accounts and then piggybacked off their API. But that's now closed.</p>

<p>Similarly, I was using <a href="https://shkspr.mobi/blog/2020/10/moneyed-a-personal-openbanking-api/">Moneyed - which offered a personal OpenBanking API</a> - but that shut down as well.</p>

<p>And now I can't find anything.</p>

<p>If you know of an Account Information Service Provider which provides read-only API access to connected accounts, please let me know!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=47438&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/10/why-is-there-no-openbanking-api-for-personal-use/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Moneyed - a personal OpenBanking API]]></title>
		<link>https://shkspr.mobi/blog/2020/10/moneyed-a-personal-openbanking-api/</link>
					<comments>https://shkspr.mobi/blog/2020/10/moneyed-a-personal-openbanking-api/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 26 Oct 2020 12:19:41 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[banking]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37044</guid>

					<description><![CDATA[Update! Moneyed shut down in 2021.  After writing about how to use MoneyDashboard&#039;s unofficial API, the good folk at Moneyed told me about their officially supported API! So here&#039;s a quick review &#38; howto guide.  Moneyed is a slightly strange service. I think it is designed for companies to give as a benefit to their employees. But you can sign up as an individual. The first month is free - but I…]]></description>
										<content:encoded><![CDATA[<p><ins datetime="2025-10-26T08:37:27+00:00">Update! <a href="https://find-and-update.company-information.service.gov.uk/company/12341342">Moneyed shut down in 2021</a>.</ins></p>

<p>After writing about how to use <a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/">MoneyDashboard's unofficial API</a>, the good folk at <a href="https://web.archive.org/web/20201028203520/https://moneyed.co.uk/">Moneyed</a> told me about their <em>officially</em> supported API! So here's a quick review &amp; howto guide.</p>

<p>Moneyed is a slightly strange service. I <em>think</em> it is designed for companies to give as a benefit to their employees. But you can sign up as an individual. The first month is free - but I don't see a way to tell how much subsequent months are.  Although it is presented as an app for Android and iPhone, you can <a href="https://web.archive.org/web/20200929161223/https://moneyed.co.uk/app/">log in on the website</a>.</p>

<p>It is a read-only account aggregator. This allows you to see all your credit cards, current accounts, and savings accounts in one place.</p>

<p>There are a good range of OpenBanking API accounts which you can add.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/10/List-of-OpenBanking-providers.png" alt="List of OpenBanking providers." width="712" height="824" class="aligncenter size-full wp-image-37058">

<p>There's also investment accounts, credit cards, and pensions.</p>

<p>You can <a href="https://moneyed.co.uk/blog/download_your_data">download your data as CSV</a> - but that's not the exciting part!</p>

<p>In the settings screen, you can generate an API key. That gives you JSON access to your accounts and transactions.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/10/Settings-Screen.png" alt="Settings Screen." width="750" height="533" class="aligncenter size-full wp-image-37057">

<p>Once done, there's a quick guide to downloading your data.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/10/API-Token-generation-screen.png" alt="API Token generation screen." width="750" height="556" class="aligncenter size-full wp-image-37059">

<p>You need your API key sent as a header, and your account's unique ID.</p>

<p><code>curl --header "Authorization: Api-Key 123456" https://app.moneyed.co.uk/v1/capi/assets/abc123</code></p>

<p>Here's a sample JSON output from my credit card, it shows me buying groceries and getting a refund from eBay. At the bottom is the total balance on the card.</p>

<pre><code class="language-json">{
  "id": "ABC123",
  "name": "American Express",
  "transactions": [
    {
      "category": "GROCERIES",
      "label": "Morrisons Bradford",
      "pending": false,
      "timestamp": "2020-10-16T00:00:00",
      "value": {
        "amount": "-99.99",
        "currency": "GBP"
      }
    },
    {
      "category": "INCOME",
      "label": "Ebay O Luxembourg",
      "pending": false,
      "timestamp": "2020-10-19T00:00:00",
      "value": {
        "amount": "12.34",
        "currency": "GBP"
      }
    }
  ]
  "type": "CREDIT_CARD",
  "valuations": [
    {
      "date": "2020-10-24",
      "value": {
        "amount": "-123.45",
        "currency": "GBP"
      }
    }
  ]
}
</code></pre>

<p>That's not as detailed as the MoneyDashboard API - but it covers everything I need. It would be nice to have more accurate timestamps. At the moment, it only seems to give the last month of spending. But it's a beta project and should improve as time goes on.</p>

<p>You can <a href="https://web.archive.org/web/20201028203520/https://moneyed.co.uk/">sign up to Moneyed for one month free</a> - no credit card details required.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37044&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/10/moneyed-a-personal-openbanking-api/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Unofficial MoneyDashboard Neon API]]></title>
		<link>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/</link>
					<comments>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 16 Oct 2020 11:40:37 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[banking]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36967</guid>

					<description><![CDATA[Note: MoneyDashboard is now closed.  Yesterday, I wrote up how to use the MoneyDashboard Classic API.  Read that blog post first before reading this one.  MoneyDashboard have launched a new &#34;Neon&#34; service. The API is a bit more simple, but authentication is harder.  Here&#039;s a quick guide to the bits of the API that I found useful. I&#039;ve lightly redacted some of the API responses for my privacy. …]]></description>
										<content:encoded><![CDATA[<p><ins datetime="2024-10-16T06:38:28+00:00">Note: <a href="https://moneytothemasses.com/news/money-dashboard-to-close-all-accounts-from-31st-october-2023">MoneyDashboard is now closed</a>.</ins></p>

<p>Yesterday, I wrote up <a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/">how to use the MoneyDashboard Classic API</a>.  Read that blog post first before reading this one.</p>

<p>MoneyDashboard have launched a new "Neon" service. The API is a bit more simple, but authentication is harder.</p>

<p>Here's a quick guide to the bits of the API that I found useful. I've lightly redacted some of the API responses for my privacy.</p>

<h2 id="list-of-all-supported-institutions"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#list-of-all-supported-institutions">List of all supported institutions</a></h2>

<p>MoneyDashboard only supports a limited number of OpenBanking Institutions. Here's a list:</p>

<p><code>https://neonapiprod.moneydashboard.com/v1/institutions</code></p>

<pre><code class="language-JSON">{
    "0": {
        "id": "44306c61-9fb9-4221-b4d9-f91cd711f665",
        "name": "AIB (NI)",
        "active": 1,
        "paymentsEnabled": false,
        "logo": "https://media.moneydashboard.com/logos/providers/firsttrust.jpg",
        "isAvailableFeatureFlagName": null,
        "primaryColour": "#7F2B7B"
    }
}
</code></pre>

<h3 id="list-of-the-users-accounts"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#list-of-the-users-accounts">List of the User's Accounts</a></h3>

<p>You can add multiple accounts to MoneyDashboard. Here's a list of everything you've added:</p>

<p><code>https://neonapiprod.moneydashboard.com/v1/accounts</code></p>

<pre><code class="language-JSON">{
    "0": {
        "cognitoId": "1234",
        "accountId": "4567",
        "providerId": "7891",
        "connectionsUserId": "8910",
        "accountType": "CREDIT_CARD",
        "accountNumber": null,
        "sortCode": null,
        "balance": "-123.45",
        "accountName": "Platinum Cashback Credit Card",
        "currency": "GBP",
        "description": null,
        "logo": "https://media.moneydashboard.com/logos/providers/amex.jpg",
        "providerName": "American Express",
        "primaryColour": "#016FD0",
        "created": "2020-09-13T12:34:56.533+00:00",
        "lastUpdateSuccess": null,
        "lastUpdateAttempt": null,
        "deactivated": null,
        "alias": "Platinum Cashback Credit Card",
        "lastRefreshStatus": 0,
        "paymentsEnabled": false,
        "isOffline": false,
        "tokenCreatedDate": "2020-09-13T12:34:56.533+00:00",
        "tokenRefreshDate": "2020-09-13T12:34:56.533+00:00",
        "tokenExpiryDate": null
    }
}
</code></pre>

<h2 id="babs-balance-after-bills"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#babs-balance-after-bills">BABS - Balance After Bills</a></h2>

<p>MoneyDashboard can predict what your <a href="https://web.archive.org/web/20200918095621/https://support.moneydashboard.com/hc/en-us/articles/360044261332-How-do-I-set-up-my-Balance-after-bills-">balance is after bills</a>:</p>

<p><code>https://neonapiprod.moneydashboard.com/v1/analytics/babs</code></p>

<pre><code class="language-JSON">{
    "babs": -1234.56,
    "predictedBalance": -2345.67,
    "unpaidSeries": 0,
    "dailyFlexSpend": 50.99,
    "daysRemaining": 19,
    "daysElapsed": 0,
    "predictedSpending": 123.45
}
</code></pre>

<h2 id="transactions"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#transactions">Transactions</a></h2>

<p>A full list of every transaction you've made - including tags:</p>

<p><code>https://neonapiprod.moneydashboard.com/v1/transactions/filter</code></p>

<pre><code class="language-JSON">{
    "6": {
        "id": "ABCDEFG",
        "created": "2020-10-03T00:00:00",
        "accountId": "4567",
        "customerId": "7891",
        "isPredicted": false,
        "providerTransactionId": null,
        "amount": {
            "amount": 168.35,
            "currency": "GBP"
        },
        "sourceAmount": {
            "amount": 168.35,
            "currency": "GBP"
        },
        "status": "Booked",
        "deactivated": null,
        "type": "Debit",
        "description": "MORRISONS               BRADFORD",
        "seriesId": null,
        "savedDate": "2020-10-13T12:20:23.176183",
        "merchant": "Morrisons Supermarket",
        "transactionBatchId": "ABC123",
        "excludeFromSpendCalculations": false,
        "originalTransactionDate": "2020-10-03T00:00:00",
        "originalTransactionDescription": "MORRISONS               BRADFORD",
        "ProprietaryProviderDetails": null,
        "categorisation": [
            {
                "id": 324978238,
                "certainty": 100,
                "source": "CategorisationService",
                "tag": "Supermarket",
                "level": 2,
                "created": "2020-10-13T12:20:33.678358"
            },
            {
                "id": 324978239,
                "certainty": 100,
                "source": "CategorisationService",
                "tag": "Groceries",
                "level": 1,
                "created": "2020-10-13T12:20:33.678356"
            }
        ],
        "bookedTransactionId": null,
        "merchantLogo": "https://media.moneydashboard.com/logos/merchants/morrisons_supermarket.png"
    }
}
</code></pre>

<h2 id="categories"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#categories">Categories</a></h2>

<p>Get your spending broken down by category. For example, how much do you spend on takeaways?</p>

<p>There are some <em>weird</em> JSON handling of floating point numbers in here. Beware!</p>

<p><code>https://neonapiprod.moneydashboard.com/v1/analytics/spend/category</code></p>

<pre><code class="language-JSON">{
    "1": {
        "categoryName": "Eating Out",
        "amount": 76.29666666666667,
        "transactionCount": 8,
        "transactions": [
            {
                "id": "ABCDEFG123793",
                "created": "2020-07-22T00:00:00",
                "accountId": "4567",

                "customerId": "7891",
                "isPredicted": false,
                "providerTransactionId": null,
                "amount": {
                    "amount": 22.47,
                    "currency": "GBP"
                },
                "sourceAmount": {
                    "amount": 22.47,
                    "currency": "GBP"
                },
                "status": "Booked",
                "type": "Debit",
                "description": "JUST EAT.CO.UK LTD      LONDON",
                "seriesId": null,
                "merchant": "Just Eat",
                "merchantLogo": "https://media.moneydashboard.com/logos/merchants/just_eat.png",
                "deactivated": null,
                "savedDate": "2020-10-13T12:20:23.176338",
                "ProprietaryProviderDetails": null,
                "categorisation": [
                    {
                        "id": 324978297,
                        "certainty": 100,
                        "source": "CategorisationService",
                        "tag": "Takeaway",
                        "level": 2,
                        "created": "2020-10-13T12:20:33.679618"
                    },
                    {
                        "id": 324978298,
                        "certainty": 100,
                        "source": "CategorisationService",
                        "tag": "Eating Out",
                        "level": 1,
                        "created": "2020-10-13T12:20:33.679617"
                    }
                ]
            }
        ],
        "cycleStartDate": "2020-06-01T00:00:00Z",
        "cycleEndDate": "2020-08-31T00:00:00Z"
    }
}
</code></pre>

<h2 id="authentication"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/#authentication">Authentication</a></h2>

<p>OK, this is where it gets horrible and I get confused. MoneyDashboard uses <a href="https://aws.amazon.com/cognito/">Amazon Cognito</a>. It does a complex authentication dance, passing along lots of different <code>SRP_A</code> tokens until, eventually, it gives you an <code>IdToken</code>. You can grab that by opening Developer Tools in your browsers.  It will be a <em>very</em> long string.</p>

<p>You need to pass this as an <code>x-auth</code> header in your request, like so:</p>

<pre><code class="language-_">curl 'https://neonapiprod.moneydashboard.com/v1/accounts'\
 -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0'\
 -H 'Accept: */*'\
 -H 'Accept-Language: en-GB,en;q=0.5'\
 --compressed -H\
 'Referer: https://app.moneydashboard.com/'\
 -H 'x-auth: aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890'\
 -H 'Cache-Control: no-cache, no-store, must-revalidate'\
 -H 'Pragma: no-cache'\
 -H 'Expires: 0'\
 -H 'Origin: https://app.moneydashboard.com'\
 -H 'DNT: 1'\
 -H 'Connection: keep-alive'\
 -H 'TE: Trailers'
</code></pre>

<p>I don't know of any easy way to automated getting the token from your own username and password.</p>

<p>Good luck!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36967&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-neon-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Unofficial MoneyDashboard API]]></title>
		<link>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/</link>
					<comments>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 15 Oct 2020 11:13:54 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[banking]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[openbanking]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36917</guid>

					<description><![CDATA[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&#039;s good, because it puts up a barrier to entry preventing dodgy companies slurping up your data and sending all…]]></description>
										<content:encoded><![CDATA[<p><ins datetime="2024-10-15T06:38:28+00:00">Note: <a href="https://moneytothemasses.com/news/money-dashboard-to-close-all-accounts-from-31st-october-2023">MoneyDashboard is now closed</a>.</ins></p>

<p>The <a href="https://www.openbanking.org.uk/">OpenBanking</a> 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!</p>

<p>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.</p>

<p>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!</p>

<p>Luckily, I've found a slightly cheeky hack to let you get Read-Only JSON feeds of all your transactions!</p>

<p>Sign up to MoneyDashboard and authorise it to read your bank and credit card statements.</p>

<p>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!</p>

<p>Here's my (light) attempt to document it. <mark>Note:</mark> This uses the MoneyDashboard Classic account. I haven't mapped their "Neon" service yet.</p>

<h2 id="list-of-transactions"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#list-of-transactions">List of Transactions</a></h2>

<p>This gets up to 999 transactions in JSON. You get a reasonable amount of metadata with each one.</p>

<p><code>https://my.moneydashboard.com/transaction/GetTransactions?limitTo=999</code></p>

<p>Here's a sample response, redacted for privacy:</p>

<pre><code class="language-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": []
    }
}
</code></pre>

<p>Pretty simple!</p>

<ul>
<li>The <code>Date</code> is in UNIX Epoch milliseconds.</li>
<li>I don't know what <code>OriginalDate</code> is.</li>
<li>There's a separate API call for folksonomy tags.</li>
</ul>

<p>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</p>

<h2 id="list-of-accounts"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#list-of-accounts">List of Accounts</a></h2>

<p><code>https://my.moneydashboard.com/api/Account/</code></p>

<p>Returns all the accounts you have associated with MoneyDashboard:</p>

<pre><code class="language-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
    }
}
</code></pre>

<p>Mostly, I'm interested in the <code>NativeBalance</code> to see how much I've spent on my card.</p>

<h2 id="spend-by-merchant"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#spend-by-merchant">Spend by Merchant</a></h2>

<p>You can see exactly how much you've spent with each company over a specific period:</p>

<p><code>https://my.moneydashboard.com/api/merchant/getspend?FromDate=2020-09-01&amp;GroupingInstruction=1&amp;ToDate=2020-09-30</code></p>

<pre><code class="language-JSON">{
    "2": {
        "Amount": -38.49,
        "TransactionCount": 2,
        "Id": 123456,
        "Name": "Debenhams Store",
        "ImageFile": "icon_merchant.svg",
        "MobileIcon": "ic_merchant",
        "TagDisplayCategoryName": null,
        "DisplayColour": "#7C3E3E"
    }
}
</code></pre>

<h2 id="spend-by-group"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#spend-by-group">Spend by Group</a></h2>

<p>MoneyDashboard allows you to tag your transactions. This shows spending by group and tag:</p>

<p><code>https://my.moneydashboard.com/api/OutgoingsByGroup?fromDate=2020-09-01&amp;includeCredit=true&amp;toDate=2020-09-30</code></p>

<pre><code class="language-json">{
    "1": {
        "TagId": 123,
        "Amount": 8.6
    }
}
</code></pre>

<h2 id="balance-over-time"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#balance-over-time">Balance Over Time</a></h2>

<p>Rather than plotting your own graphs, MoneyDashboard will show you your balances across your accounts:</p>

<p><code>https://my.moneydashboard.com/api/balanceHistory?EndDate=2020-10-31&amp;StartDate=2019-10-01</code></p>

<pre><code class="language-JSON">{
    "2": {
        "Date": "2019-10-04T00:00:00Z",
        "Balances": [
            {
                "Balance": -8.06,
                "AccountId": 123456
            },
            {
                "Balance": -718.78,
                "AccountId": 789012
            }
        ]
    }
}
</code></pre>

<h2 id="list-of-tags"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#list-of-tags">List of Tags</a></h2>

<p>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:</p>

<p><code>https://my.moneydashboard.com/TaggingRules/getTags</code></p>

<pre><code class="language-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
    }
}
</code></pre>

<p>And self-created tags:</p>

<p><code>https://my.moneydashboard.com/CustomTags/GetListOfTags</code></p>

<pre><code class="language-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
    }
}
</code></pre>

<h2 id="getting-authorised"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#getting-authorised">Getting Authorised</a></h2>

<p>OK, so you want to do this? How do you authenticate yourself against the API?  This is the tricky bit.</p>

<p>In the source code for the login page, you'll see something like this:</p>

<pre><code class="language-html">&lt;input
   name="__RequestVerificationToken"
   type="hidden"
   value="cykGysmBr1vpUY1" /&gt;
</code></pre>

<p>The actual <code>value</code> is much longer.</p>

<p>You will also need the Cookie which is set when you request the login page.</p>

<p>Your username and password are POSTed in a JSON payload, like so:</p>

<pre><code class="language-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":""}'
</code></pre>

<p>Once done, you can make API GET calls using the <code>__RequestVerificationToken</code> header.</p>

<p>Or, you can use a <a href="https://github.com/shutupflanders/moneydashboard">Python Library for MoneyDashboard</a></p>

<h2 id="what-next"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#what-next">What Next?</a></h2>

<p>I was thinking of building a <a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">passive dashboard</a> to show me the state of my current account.</p>

<p>Or, maybe...</p>

<blockquote><p>Alexa? Ask MoneyDashboard what the balance is on my credit cards.</p>

<p>Alexa? Ask MoneyDashboard how much I spent at Wagamamas last month?</p></blockquote>

<p>Too much?</p>

<h2 id="enjoyed-this-post"><a href="https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/#enjoyed-this-post">Enjoyed this post?</a></h2>

<p>If you've found this useful, please sign up to MoneyDashboard using my referral link.</p>

<p>Or, you can:</p>

<ul>
<li><a href="https://ko-fi.com/edent">Buy me a Ko-Fi</a></li>
<li><a href="https://github.com/sponsors/edent">Sponsor me on GitHub</a></li>
<li><a href="https://www.amazon.co.uk/hz/wishlist/ls/13GFCFR2B2IX4?type=wishlist&amp;linkCode=sl2&amp;tag=shksprblogwish-21">Get me a birthday present from my Wishlist</a></li>
</ul>

<p>Or, just leave a supportive comment.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36917&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/10/unofficial-moneydashboard-api/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
