Enable Banking: Pending holds from ASPSPs like DSK Bank returned as status: "BOOK" without transaction IDs
Before you start (required)
General checklist
- I have removed personal / sensitive data from screenshots and logs
- I have searched existing issues and discussions to ensure this is not a duplicate issue
How are you using Sure?
- I was a paying Maybe customer (hosted version)
- I use it on PikaPod, Umbrel or similar (VPS included)
- I am a self-hosted user (local only)
Self hoster checklist
Paying, hosted users should delete this entire section.
If you are a self-hosted user, please complete all of the information below. Issues with incomplete information will be marked as Needs Info to help our small team prioritize bug fixes.
- Self hosted app commit SHA (find in user menu): 1b105ef
- I have confirmed that my app's commit is the latest version of Sure
- Where are you hosting?
- Render
- Docker Compose
- Umbrel
- PikaPod
- Other (please specify)
Bug description
Certain ASPSPs (such as DSK Bank BG via Enable Banking) return un-finalized pending card holds marked with "status": "BOOK" instead of "status": "PDNG", while leaving both entry_reference and transaction_id set to null (and creditor set to null).
Because the importer relies solely on tx[:status] == "PDNG" to identify pending items, these un-cleared holds are processed as settled Booked transactions. However, because they lack an entry_reference or transaction_id, they fail to match when the bank later finalizes the transaction (which assigns a permanent entry_reference), causing duplicate transactions or incorrect pending state tracking in Sure.
To find this I have made myself a little app that shows the raw payload data so I can compare, which is where the screenshots below come from.
To Reproduce
- Connect an account from an ASPSP that returns un-cleared holds with
status: "BOOK"and null identifiers (e.g. DSK Bank BG via Enable Banking). - Enable "Include pending transactions" in account settings.
- Perform a card transaction.
- Run the Enable Banking sync importer.
- Observe that the un-cleared hold is imported as a settled Booked transaction instead of a pending hold.
Expected behavior
Transactions from Enable Banking that lack both entry_reference and transaction_id (and have creditor set to null) should be recognized and tagged as pending (_pending: true), even if the aggregator returns status: "BOOK".
Additional Context
Raw payload received from Enable Banking for a pending hold:
{
"entry_reference": null,
"transaction_id": null,
"status": "BOOK",
"creditor": null,
"booking_date": "2026-08-01",
"value_date": "2026-07-31",
"transaction_amount": {
"currency": "EUR",
"amount": "26.57"
},
"credit_debit_indicator": "CRDT",
"remittance_information": [
"4748..."
]
}Screenshots and/or recordings
Pending transaction
Booked transaction
A ticket has already been raised to Enable Banking directly regarding this, but it might be worth adding an edge case within Sure for other banks that behave the same way.
Proposed Solution
Editing the importer for Enable Banking (and potentially others) to also perform checks should theoretically cover the edge cases. I am however unable to test with other banks.
E.g.
is_unidentified_hold = tx_ia[:entry_reference].blank? && tx_ia[:transaction_id].blank? && tx_ia[:creditor].blank?
is_pending = tx_ia[:status] == "PDNG" || is_unidentified_hold
is_pending ? tx_ia.merge(_pending: true) : tx_iaP.S.
I am not too familiar with how other banks work, so this might not be a good idea. I would like your opinion on the topic before I go ahead and open a pull request for this, but I've been chasing this bug (which impacts user experience quite a bit) for a while and now at least we have answers.
Source: we-promise/sure