A pending transaction is an approved debit or credit transaction that has not been fully processed yet (i.e. has not been posted). On average a transaction may stay in the pending state for 3 - 5 business days. For pre-authorisations (e.g security deposits for hotels or car rentals), this can be up to 31 days. During this time the pending transaction amount is deducted from the ‘available funds,’ while the ‘account balance’ remains as is.
A posted transaction is a debit or credit that has been fully processed. Once a transaction is posted the account balance on the account is also updated.
To give you a better understanding of the process, here is how a typical payment is handled:
A customer uses their card to buy goods/services from a merchant. There’s an online check to make sure the card is valid and that there are enough funds to pay.
The customers bank will then authorise the transaction and deduct the amount from their available funds. The transaction now shows as ‘pending’ on the account
The merchant sends the bank their transaction file for with final amounts to be settled.
Finally the bank sends the merchant the customers money and the transaction is set to "posted" (and the pending transaction is deleted). The customers account balance is also updated to reflect the transaction amount.
Note that in some instances the description that appears for a pending transaction may change once it is posted.
How Basiq deals with pending transactions
Each transaction has a status of "pending" or "posted". This helps you differentiate between the two.
Every time a connection is refreshed (i.e. users latest financial data is retrieved) the pending transactions are deleted and new ones are imported. This is the opposite to posted transactions - that are never deleted.
Recommendation on how to deal with pending transactions
It is strongly recommended that you always separate the pending transactions from the posted ones in your database and that you treat them as temporary records.
You should aim to highlight pending transactions within your app, so that the user knows that these may change.