Repository navigation
PB transactions API returns incorrect postingDate for posted transaction #85
Description
Level
High
Describe the bug
Summary
The Investec Private Banking transactions API is returning an incorrect postingDate for a posted transaction.
For the transaction below, both transactionDate and actionDate are 2026-05-04, but postingDate is returned as 2026-05-09, which is the date the API request was made.
Endpoint
GET /za/pb/v1/accounts/{accountId}/transactions
Steps To Reproduce
- Authenticate against the Investec OpenAPI Private Banking API.
- Call the Private Banking transactions endpoint for the affected account:
GET /za/pb/v1/accounts/{accountId}/transactions. - Use a date range that includes
2026-05-04, for example:GET /za/pb/v1/accounts/{accountId}/transactions?fromDate=2026-05-04&toDate=2026-05-09. - Inspect the returned transaction matching
amount = ***20.63,description = 1001280**** LE JENKINS,type = CREDIT, andstatus = POSTED. - Observe that the returned date fields are
transactionDate = 2026-05-04,actionDate = 2026-05-04, andpostingDate = 2026-05-09. - The
postingDatevalue is2026-05-09, which was the API request date, while bothtransactionDateandactionDateare2026-05-04. - Repeat the same request on a later date.
- Confirmed
postingDatechanges to the later API request date rather than remaining stable as the actual posting date for the transaction.
Raw API Response
{
"accountId": "00238127**************",
"actionDate": "2026-05-04",
"amount": ***20.63,
"cardNumber": "",
"description": "1001280**** LE JENKINS",
"postedOrder": 0,
"postingDate": "2026-05-09",
"runningBalance": -***11.59,
"status": "POSTED",
"transactionDate": "2026-05-04",
"transactionType": null,
"type": "CREDIT",
"uuid": "",
"valueDate": null
}Expected behaviour
For a transaction with status = POSTED, the postingDate field should represent the actual ledger posting date of the transaction.
The postingDate should be stable across repeated API calls and should not change based on the date the API request is made.
For the transaction shown in the raw API response, both transactionDate and actionDate are 2026-05-04. Unless there is a documented reason for postingDate to differ, the expected postingDate should also be 2026-05-04.
The API should also provide clear documentation on the semantic difference between postingDate, transactionDate, and actionDate, including which field should be treated as the authoritative ledger date for posted transactions.
Actual behaviour
The API returned postingDate = 2026-05-09 for the transaction.
This differs from both transactionDate = 2026-05-04 and actionDate = 2026-05-04.
The postingDate value appears to match the date the API request was made, rather than the actual ledger posting date of the transaction.
Because the transaction has status = POSTED, this makes the returned postingDate misleading for downstream reconciliation and accounting systems.
Additional context
Impact
This breaks downstream accounting reconciliation.
Our sync process uses postingDate as the canonical ledger date. In this case, the API response caused the sync process to attempt to move an existing accounting transaction from 2026-05-04 to 2026-05-09.
That would incorrectly alter the ledger date for a posted transaction, affecting:
- Account reconciliation
- Duplicate detection
- Historical reporting
- Running balance validation
- Auditability of imported bank transactions
Questions
- For posted transactions, which field should be treated as the authoritative ledger date?
- Is the empty
uuidexpected for this transaction type? - Is this a known issue with the Private Banking transactions endpoint?
Activity
theleejenkins commentedon May 16, 2026
Ping...
programmable-banking-community commentedon May 18, 2026
Hi @theleejenkins , thanks again for posting this. Apologies for the delay. We're taking a look at this and trying to get more details from Private Banking on the API and to confirm the intended behaviour. Will revert shortly. Thanks again :)
theleejenkins commentedon Jul 26, 2026
Thanks, appreciate the follow-up.
I re-tested this today, 2026-07-26, against the same affected posted transaction and the behaviour still appears to exist.
For the transaction with:
amount = ***20.63type = CREDITstatus = POSTEDthe API currently returns:
transactionDate = 2026-05-04actionDate = 2026-05-04postingDate = 2026-07-26uuid = ""So
postingDatenow appears to have moved again and is returning today’s request date, rather than the actual transaction/posting date.I’ve worked around this on my side by treating
transactionDate/actionDateas the stable ledger date wherepostingDateappears to drift, but it would still be very helpful to get confirmation of the intended semantics forpostingDate,transactionDate, andactionDate.The main concern is that
postingDatechanges depending on when the API request is made, which makes it unsafe for reconciliation unless that behaviour is documented and expected.Thanks for checking with the Private Banking team.
programmable-banking-community commentedon Jul 27, 2026
Hey @theleejenkins, appreciate you re-testing and sharing the updated details.
We’ve logged this with the relevant teams and need a bit of time to investigate properly. There was a fix that went in a while ago around
postingDatefor PB accounts, but we want to confirm a few things before giving you a definitive answer.One thing we’d like to check upfront: which account type is this transaction from? For example, is it a transactional/private bank account, Prime Saver, loan account, or another account type?
I’m asking because there may be differences in how downstream account types return transaction fields, and we want to make sure we’re looking at the right path.
We’ll come back with a clearer answer on the intended semantics for
postingDate,transactionDate, andactionDate.Thanks again for the detailed testing. It helps a lot.
theleejenkins commentedon Jul 27, 2026
Thanks for responding.
This is a transactional/private bank account.