Skip to content

Open-banking exports

Banks and aggregators that implement an open-banking standard can hand their customers the API’s own JSON as a download. UPC Accounting imports that JSON as a statement file: the member uploads it into one bank or card account of their books. There is no live API connection; see the overview.

Everything on Bank statements applies here too: amounts signed from the holder’s side, booked lines only, the bank’s transactionId as the duplicate key, account numbers masked to their last four characters, 10 MB per file.

  • One response (accounts, balances or transactions), several responses merged into one object, or a JSON array of responses. Lines are grouped into one statement per account id.
  • Property names are matched exactly first, then ignoring case. Trailing commas and comments are tolerated.
  • A file with several accounts imports the one whose last four characters match the bank account in the books; see Currency and account matching.
  • The whole JSON document is parsed at once (not streamed), so the 10 MB cap is the bound. Nesting is limited to 64 levels.

The standard is recognized from property names alone:

StandardRecognized by
FDXdepositAccount, depositTransaction, locAccount, locTransaction, loanAccount, investmentAccount, accountNumberDisplay, debitCreditMemo, postedTimestamp
UK Open BankingA Data object with Account, Balance, Transaction, AccountId, CreditDebitIndicator, TransactionId, BookingDateTime
Berlin GrouptransactionAmount, balanceAmount, balanceType, bookingDate, booked, resourceId, cashAccountType, remittanceInformationUnstructured, creditorName, debtorName
Australia CDRA data object with maskedNumber, productCategory, isDetailAvailable, postingDateTime, openStatus, executionDateTime

Used in the US and for Canada’s consumer-driven banking. Accepted: the accounts response, the transactions response, both merged, or an array of responses. Entities may be wrapped (depositAccount, locAccount, loanAccount, investmentAccount, depositTransaction, locTransaction, loanTransaction) or flat with accountCategory (FDX v5 / v6).

Read asFrom
AccountaccountNumberDisplay (else accountId)
Account type, nameaccountType; nickname, displayName or productName
Currencycurrency.currencyCode
Closing balance, datecurrentBalance (negated for credit lines and loans: an amount owed) / balanceAsOf
Available balanceavailableBalance / availableCredit
Transaction idtransactionId
Posted / value datepostedTimestamp / transactionTimestamp
Amountamount, made negative when debitCreditMemo is DEBIT
Counterpartypayee, merchant.name
Memo / reference / codedescription + memo / checkNumber or reference / transactionType
StatusPENDING and AUTHORIZATION are pending; MEMO is informational
Running balance, original amountrunningBalance; foreignAmount / foreignCurrency

openingDayBalance is not used as the opening balance: it opens the as-of day, not the period of the lines.

{
"accounts": [
{ "depositAccount": {
"accountId": "acct-1001", "accountNumberDisplay": "...1234", "accountType": "CHECKING",
"nickname": "Maple Grooming operating", "currency": { "currencyCode": "USD" },
"currentBalance": 3954.33, "availableBalance": 3954.33, "balanceAsOf": "2026-09-30T23:59:59Z" } }
],
"transactions": [
{ "depositTransaction": {
"accountId": "acct-1001", "transactionId": "txn-0001", "postedTimestamp": "2026-09-03T15:00:00Z",
"amount": 45.67, "debitCreditMemo": "DEBIT", "status": "POSTED",
"description": "KIBBLE WHOLESALE", "memo": "Invoice 1042" } }
]
}

Reads the Data.Account, Data.Balance and Data.Transaction payloads of the accounts, balances and transactions endpoints, alone or merged.

Read asFrom
AccountAccount[0].Identification
InstitutionServicer.Identification, else the sort code of a SortCodeAccountNumber
Account type / nameAccountSubType (else AccountType) / Nickname
Opening balanceBalance OpeningBooked (else PreviouslyClosedBooked)
Closing balanceClosingBooked (else InterimBooked)
Available balanceClosingAvailable (else InterimAvailable)
Transaction idTransactionId
AmountAmount.Amount, signed by CreditDebitIndicator
Posted / value dateBookingDateTime / ValueDateTime
CounterpartyMerchantDetails.MerchantName, else DebtorAccount.Name (money in) or CreditorAccount.Name (money out)
Memo / referenceTransactionInformation / TransactionReference
Bank codeBankTransactionCode Code-SubCode, else ProprietaryBankTransactionCode.Code
Running balance, statusBalance; Booked / Pending (Rejected is skipped)
{
"Data": {
"Account": [
{ "AccountId": "acc-1", "Currency": "GBP", "AccountType": "Business", "AccountSubType": "CurrentAccount",
"Nickname": "Maple Grooming",
"Account": [ { "SchemeName": "UK.OBIE.SortCodeAccountNumber", "Identification": "00000012345678",
"Name": "Maple Grooming Ltd" } ] }
],
"Balance": [
{ "AccountId": "acc-1", "Type": "OpeningBooked", "CreditDebitIndicator": "Credit",
"DateTime": "2026-09-01T00:00:00+00:00", "Amount": { "Amount": "4000.00", "Currency": "GBP" } },
{ "AccountId": "acc-1", "Type": "ClosingBooked", "CreditDebitIndicator": "Credit",
"DateTime": "2026-09-30T23:59:59+00:00", "Amount": { "Amount": "3954.33", "Currency": "GBP" } }
],
"Transaction": [
{ "AccountId": "acc-1", "TransactionId": "tx-0001", "Status": "Booked", "CreditDebitIndicator": "Debit",
"BookingDateTime": "2026-09-03T10:15:00+00:00", "Amount": { "Amount": "45.67", "Currency": "GBP" },
"TransactionInformation": "Invoice 1042", "CreditorAccount": { "Name": "Kibble Wholesale" } }
]
}
}

Reads the accounts list (accounts, cardAccounts), the balances response and the transactions response (transactions.booked, pending and information; cardTransactions), alone or together, keyed by resourceId or IBAN.

Read asFrom
Accountiban, bban or maskedPan
Currency, name, type, institutioncurrency, name, cashAccountType, bic
Opening balanceopeningBooked
Closing balanceclosingBooked, else interimBooked, else expected
Available balanceinterimAvailable, closingAvailable or forwardAvailable
Transaction idtransactionId / cardTransactionId
AmounttransactionAmount.amount (already signed)
Posted / value datebookingDate (pending: valueDate) / valueDate
CounterpartyMoney out: creditorName; money in: debtorName
MemoremittanceInformationUnstructured (or its array form), remittanceInformationStructured, transactionDetails, additionalInformation
Reference, bank codeendToEndId, checkId, mandateId, entryReference; bankTransactionCode
{
"account": { "iban": "DE00000000000001234567", "currency": "EUR" },
"balances": [
{ "balanceType": "openingBooked", "referenceDate": "2026-08-31",
"balanceAmount": { "currency": "EUR", "amount": "4000.00" } },
{ "balanceType": "closingBooked", "referenceDate": "2026-09-30",
"balanceAmount": { "currency": "EUR", "amount": "3954.33" } }
],
"transactions": {
"booked": [
{ "transactionId": "tx-0001", "bookingDate": "2026-09-03", "valueDate": "2026-09-03",
"transactionAmount": { "currency": "EUR", "amount": "-45.67" },
"creditorName": "Kibble Wholesale GmbH", "endToEndId": "INV-1042",
"remittanceInformationUnstructured": "Invoice 1042" }
],
"pending": []
}
}

Reads data.accounts, data.balances (or a single account’s balance in data) and data.transactions, alone or together. Amounts are signed strings; the currency defaults to AUD, as the standard says.

Read asFrom
AccountmaskedNumber
Account type / nameproductCategory / nickname, displayName
CurrencyThe balance’s currency (default AUD)
Closing balancecurrentBalance (already negative when money is owed)
Available balanceavailableBalance
Transaction idtransactionId
Amountamount (negative = money out)
Posted / value datepostingDateTime (else executionDateTime) / valueDateTime
Counterparty, memo, referencemerchantName or billerName; description; reference or crn
StatusPENDING is pending

CDR exports carry no opening balance.

{
"data": {
"accounts": [
{ "accountId": "a-1", "maskedNumber": "xxxx xxxx 1234", "productCategory": "TRANS_AND_SAVINGS_ACCOUNTS",
"nickname": "Maple Grooming", "displayName": "Business Everyday", "openStatus": "OPEN" }
],
"balances": [
{ "accountId": "a-1", "currentBalance": "3954.33", "availableBalance": "3954.33", "currency": "AUD" }
],
"transactions": [
{ "accountId": "a-1", "transactionId": "t-0001", "isDetailAvailable": false, "type": "PAYMENT",
"status": "POSTED", "description": "Invoice 1042", "postingDateTime": "2026-09-03T10:15:00+10:00",
"amount": "-45.67", "reference": "1042", "merchantName": "Kibble Wholesale" }
]
}
}

A JSON document that matches none of the four standards is refused as not recognized. Send a standard response shape rather than a custom one, or use the bank CSV layout.