Why are end users seeing duplicate transactions?

Token.io do not provide data amendment/enrichment/analysis through AIS. We simply provide access to the bank data and pass on the information we have received from the bank.

Can fields change after you received them?

Due to factors outside of Token.io’s control, banks can change certain fields, which include, but are not limited to: 

  • Timestamp
  • Description
  • Amount
  • The bank’s internal ID

This may happen for a variety of reasons, which include, but are not limited to:

  • Amendments to the bank's records, e.g. foreign exchange rates, settlement, or an adjustment
  • Fraud prevention checks


In AIS, it’s important to have logic in place to identify unique transactions. This logic should not be based on the fields above, as they are not immutable (are subject to change). If you are using any of the above fields in your logic to determine whether a transaction is unique, it may result in you seeing duplicated transactions. 

For example, an end customer may see a transaction appear twice on your app/platform, when comparing the transactions shown on their bank statements.

Is there a workaround for this?

Implement de-duplication logic that does not rely on the fields that are subject to change. 

You may also wish to use Token.io’s unique identifier within your logic (for UK (OBIE) and Hungary banks ONLY). 

Additionally, whilst the banks aren’t obligated to make these fields immutable, Token.io are able to pass this feedback on to the bank to encourage them to not change these. As part of PSD2, banks should replicate customers’ statements in their API.

To assist us with providing this feedback, please provide us with evidence to send to the bank. This should include screenshots of transactions on the customer’s bank statement compared to transactions on your app/platform, showing the difference between them (for example, duplicates, different descriptions, missing transactions).

Was this article helpful?
0 out of 0 found this helpful
document.addEventListener("DOMContentLoaded", function() { var calendarContainer = document.getElementById("google-calendar-container"); if (calendarContainer) { calendarContainer.innerHTML = ''; } });