Skip to content

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 Amount and a separate CreditDebitIndicator, 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 TransactionId as 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.

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

integration coverage reportIntegration coverage report: bank connectors, terminal SDK, broker API, and payout partner
Integration coverage report: bank connectors, terminal SDK, broker API, and payout partner
ConnectorHappy pathTimeout and retryExpired consent or tokenDuplicate, out-of-order, or offline deliveryCoverage 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 consentCovered, 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 dayFailed, 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 currentCovered, 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 duplicatesFailed, 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 accountCovered, 4 of 4 cases passed: a statement request retried after a timeout reuses its TRNUID, and status 2019 Duplicate request is handled as already processedCovered, 3 of 3 cases passed: SONRS status 15500 Signon invalid stops the bank feed and asks the user to reconnect, with no empty statement importedFailed, 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 transactionFailed, 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 captureCovered, 6 of 6 cases passed: an authorisation request with no host response before the timeout sends a reversal before the sale is retriedCovered, 4 of 4 cases passed: a terminal session token that expires while the terminal is offline is refreshed before the store-and-forward upload startsFailed, 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 capturesBlocked 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 onceCovered, 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 keptCovered, 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 fillCovered, 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 onceFailed, 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 UETRCovered, 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 UETRCovered, 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 balanceBlocked 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?

An open banking API sandbox is a test environment where a bank or aggregator exposes its open banking API with synthetic accounts and test credentials. Under Article 30(5) of Delegated Regulation (EU) 2018/389, account servicing payment service providers shall make available a testing facility for connection and functional testing, and no sensitive information shall be shared through that facility.

What are open banking APIs?

Open banking APIs are interfaces through which a bank gives an authorised third party access to a customer's payment account data, or lets that third party initiate payments, with the customer's consent. Published specifications include the UK Open Banking Read/Write API, the Berlin Group NextGenPSD2 framework used in the EU, and the Financial Data Exchange (FDX) API used in the US.

What is conformance testing?

Conformance testing checks whether an implementation meets the requirements of a published specification, such as required fields, status codes, and security profile rules. In open banking, the OpenID Foundation conformance suite tests FAPI 1.0 Advanced and FAPI 2.0 security profile implementations, and the Open Banking Limited Functional Conformance Tool tests implementations of the UK Open Banking API standard.

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