Integrations and platforms
Open banking API testing
Open banking API testing checks bank connections, consent and reauthorisation flows, token refresh, and transaction data normalisation for aggregators, lenders, accounting tools, and account information apps. Buyers receive a consent and reauthorisation flow test suite, a bank connector coverage report, data normalisation accuracy checks, and API conformance test results against the applicable standard.
What open banking API testing covers
A defect in a bank connection repeats for every customer of that bank: a lender reads a stale balance, a ledger sync books a pending payment twice, or a background job keeps pulling data after the customer withdrew consent. Clause references below were checked on 2026-09-16.
Consent and reauthorisation flows
In the Berlin Group NextGenPSD2 OpenAPI definition version 1.3.16 (27 November 2025), a consent is received, rejected, valid, revokedByPsu, expired, terminatedByTpp, or partiallyAuthorised, and HTTP 401 message codes include CONSENT_EXPIRED and CONSENT_INVALID. Tests move each consent through every status and map each one to one product state and one customer message. A product that shows "connected" on an expired consent keeps billing refreshes that return no data.
Reauthorisation rules differ by market, so the suite runs on an injected clock:
- EU. Article 10a of Delegated Regulation (EU) 2022/2360, applicable from 25 July 2023, requires strong customer authentication when the customer accesses balances or last-90-day transactions through an account information provider for the first time, or when more than 180 days have elapsed since that access last used strong customer authentication. Tests run background pulls on day 180 and day 181. Authentication rules are on the PSD2 SCA page.
- UK. Article 36(6) of the UK SCA-RTS, in force from 26 March 2022 under FCA PS21/19, lets an account information provider access data without an active customer request only if the customer confirmed continued consent with that provider within the previous 90 days. Tests check that the day-91 job stops and that reconfirmation restarts access.
- US. The one-year authorisation limit in 12 CFR 1033.421(b) sits in a rule whose compliance dates a court stayed on 29 October 2025. Tests against it are marked as stayed, and the Section 1033 status page holds the current position.
- EU, agreed text. Article 43(2) of the PSR final compromise text (Council document 8221/26) gives the customer a bank dashboard to withdraw consent and re-establish it within 48 hours. Article 43(2b) requires the account information or payment initiation provider to stop accessing and using the data and delete it without undue delay, but not before 48 hours from withdrawal, unless the customer explicitly chooses retention. The PSR is not published in the Official Journal on 16 September 2026; see PSD3 and PSR status.
GDPR Article 5(1)(c) limits personal data to what is necessary for the purpose, so tests check that fields outside the consented data categories are dropped before storage.
Token refresh and access limits
Token tests cover refresh token rotation, a refresh token that expires before the consent, and two workers refreshing one consent at once, where the losing worker holds a revoked token. Article 36(5)(b) of Delegated Regulation (EU) 2018/389 (the RTS) allows access without an active customer request no more than four times in 24 hours, unless the provider and the bank agree a higher frequency with the customer's consent. In NextGenPSD2, frequencyPerDay is at most 4 unless agreed bilaterally, and excess calls return HTTP 429 with ACCESS_EXCEEDED. A retry loop on a failed refresh can spend that allowance before the nightly pull. The consent and token refresh guide shows the requests.
Bank connector coverage
Coverage is recorded per bank, API version, and journey: link, account list, first pull, scheduled refresh, bank downtime, and unexpected fields. A link counts as a success only when it returns at least one account with a balance, because a blended success rate hides a bank that returns empty account lists while connection fees continue. Tests start in each bank's RTS Article 30(5) testing facility, and sandbox and production results are reported separately.
Data normalisation
Tests compare normalised output with the raw bank response for every field a lending or accounting product consumes:
- Sign. The UK Open Banking Read/Write API v4.0.1 transaction model carries an unsigned
Amountand a separateCreditDebitIndicator, while NextGenPSD2 signs negative amounts with a minus. A mapper that ignores the indicator turns card spending into income in an affordability check. - Duplicates. The UK transaction model defines
TransactionIdas unique and immutable but optional, so deduplication tests cover responses without it, pending entries that book later, and a transaction repeated across pages.
API conformance
Conformance tests check requests and responses against the chosen specification version: required fields, status and error codes, idempotency, and the security profile. The OpenID Foundation conformance suite tests FAPI 1.0 Advanced Final and FAPI 2.0 Security Profile implementations, and its UK Open Banking tests are a superset of the FAPI 1.0 Advanced Final tests. The Open Banking Limited Functional Conformance Tool is a tool that a bank may use as evidence to its competent authority that its PSD2 interfaces are based on an open and widely accepted standard. Interface rules per standard are on the open banking standards page.
Related
Segments
Standards
Deliverables
Consent and reauthorisation flow test suite
An automated suite that moves test consents through authorisation, expiry, revocation at the bank, withdrawal in the app, and reauthorisation, and checks the API response and product state at each step, for engineering leads.
Bank connector coverage report
A report per bank and API version of link, account list, first data pull, scheduled refresh, and error handling results, with empty account lists counted as failures, for product owners and partner banks.
Data normalisation accuracy checks
Checks that compare each normalised balance and transaction with the raw bank response for sign, amount, booking status, dates, and duplicates, for data, lending, and accounting teams.
API conformance test results against the applicable standard
Results of each request and response tested against the chosen specification version, such as the UK Open Banking Read/Write API or Berlin Group NextGenPSD2, with the test date, for auditors and bank onboarding teams.
How open banking tests fit your release process
On every pull request. Normalisation tests replay recorded UK Open Banking and NextGenPSD2 responses from fixtures and fail the build on a changed sign, amount, booking status, or duplicate count. Fixtures use synthetic accounts, IBANs, and names, and no live account data enters the CI pipeline.
Nightly, against sandboxes. The consent and reauthorisation suite runs against bank testing facilities and the aggregator sandbox with the clock moved to day 90, day 91, day 180, and day 181, plus revocation at the bank and withdrawal in the app. Under RTS Article 30(4), an EU bank makes interface specification changes available at least 3 months before implementation, except in emergencies, so the nightly run against the new version starts when the notice arrives.
Before release. The connector coverage run executes on the release candidate across the full bank list and produces the bank connector coverage report. A coverage drop for any bank blocks the release unless the product owner signs it off in the report.
At bank onboarding or certification. Conformance tests run against the target specification version before OpenID Foundation certification or a bank's onboarding review, and the results carry the specification version, test date, and environment.
After release. Link and refresh success per bank from aggregated production logs, without account data, is compared with the pre-release coverage report on the first release day.
Cadence and handover. Suites rerun for each new specification version, each added bank, and each change to consent wording or data categories. Suites live in your repository, and evidence goes to your shared evidence folder. Your team owns production credentials, eIDAS certificates, bank agreements, consent wording, and the decision to disable a connector.
Sample deliverable
Sample, synthetic data
| Connector | Happy path | Timeout and retry | Expired consent or token | Duplicate, out-of-order, or offline delivery | Coverage status and open defect |
|---|---|---|---|---|---|
| Bank connector 01 (Berlin Group NextGenPSD2) | Covered, 9 of 9 cases passed: POST /v1/consents reaches consentStatus valid after SCA, and the accounts, balances, and transactions calls return 200 for that consent | Covered, 6 of 6 cases passed: a timed-out transactions call is retried with a new X-Request-ID, and a 429 ACCESS_EXCEEDED response stops refreshes for that consent until the next day | Failed, 4 of 5 cases passed: after a 401 CONSENT_EXPIRED response, the connector keeps scheduling refreshes and shows a stale balance of 1,240.00 XTS as current | Covered, 5 of 5 cases passed: a pending transaction that returns with bookingStatus booked and a new transactionId replaces the pending entry, and overlapping dateFrom windows import no duplicates | Failed, retest scheduled after the INT-0203 fix. INT-0203 (medium): the bank connector does not set reconnect required after a 401 CONSENT_EXPIRED response |
| Bank feed 03 (OFX) | Covered, 7 of 7 cases passed: a STMTRQ for a checking account returns STMTRS with SONRS STATUS code 0, and each STMTTRN posts once to the ledger bank account | Covered, 4 of 4 cases passed: a statement request retried after a timeout reuses its TRNUID, and status 2019 Duplicate request is handled as already processed | Covered, 3 of 3 cases passed: SONRS status 15500 Signon invalid stops the bank feed and asks the user to reconnect, with no empty statement imported | Failed, 5 of 6 cases passed: overlapping DTSTART and DTEND windows repeat FITID values, and one repeated FITID with a changed TRNAMT imports as a second transaction | Failed, retest scheduled after the INT-0221 fix. INT-0221 (medium): a repeated FITID with a changed TRNAMT of 18.75 XTS imports as a second bank transaction |
| Card terminal SDK (offline mode) | Covered, 12 of 12 cases passed: online EMV contact and contactless sales return tag 8A value 00, and each approved sale posts one capture | Covered, 6 of 6 cases passed: an authorisation request with no host response before the timeout sends a reversal before the sale is retried | Covered, 4 of 4 cases passed: a terminal session token that expires while the terminal is offline is refreshed before the store-and-forward upload starts | Failed, 10 of 11 cases passed: offline sales under the terminal floor limit (tag 9F1B) complete with tag 8A value Y3, and one retried store-and-forward upload posts two captures | Blocked for release until the INT-0214 fix passes retest. INT-0214 (high): a store-and-forward upload retried after a lost acknowledgement captures one 42.50 XTS sale twice |
| Broker API A (FIX 4.4) | Covered, 10 of 10 cases passed: Logon (35=A) succeeds, and each ExecutionReport (35=8) with ExecType (150) F updates the imported position once | Covered, 5 of 5 cases passed: no inbound message within HeartBtInt (108) triggers a TestRequest (35=1), and a reconnect resumes at the next expected MsgSeqNum (34) | Covered, 3 of 3 cases passed: a Logon with an expired Password (554) is answered with Logout (35=5) and Text (58), and the broker link shows as disconnected with positions kept | Covered, 8 of 8 cases passed: a MsgSeqNum (34) gap triggers ResendRequest (35=2), and a resent ExecutionReport with PossDupFlag (43) Y and a known ExecID (17) is not counted as a second fill | Covered, with no open defects on Broker API A |
| Payout partner B (ISO 20022 pacs.008) | Covered, 8 of 8 cases passed: a pacs.008.001.08 credit transfer with a UETR returns pacs.002 TxSts ACSP and then ACSC, and the payout is marked settled once | Failed, 5 of 6 cases passed: a timed-out pacs.008 submission is followed by a pacs.028 status request, but one retry is sent as a new pacs.008 with a new UETR | Covered, 4 of 4 cases passed: a payout submitted with an expired API access token returns 401, and the token is refreshed before one resubmission with the same UETR | Covered, 6 of 6 cases passed: a pacs.002 TxSts RJCT after ACSP releases the payout hold once, and a repeated pacs.002 for the same UETR changes no balance | Blocked for release until the INT-0230 fix passes retest. INT-0230 (high): a pacs.008 retried after a timeout carries a new UETR and pays 250.00 XTS twice to one beneficiary |
Amounts use XTS, the ISO 4217 code reserved for testing. Connectors, banks, and partners are generic sandbox endpoints, and terminal sales use scheme test cards masked to BIN and last four.
Questions
What is an open banking API sandbox?
What are open banking APIs?
What is conformance testing?
Scope your open banking API testing
Send your bank list, API standards, consent model, and data consumers, and we return a test scope that maps the four deliverables to your release process.
Scope your testing