Skip to main content

get-accounts

Get the user's bank accounts and cards. Returns each account with balances, identifiers (account number, plus IBAN/BBAN/BIC or masked PAN where the bank has them), holder, product, type, lifecycle status, and usage. Field shapes follow the Berlin Group PSD2 accountDetails model where they overlap.

Input​

FieldTypeRequiredDescription
account_type"Current" | "Savings" | "Credit" | "Loan" | "Other" | nullFilter by account type. Current and Savings are the common spending and deposit accounts; Credit covers revolving credit / credit cards; Loan covers mortgages and amortizing loans. Debit and prepaid cards live under Current; their maskedPan field flags the attached card. Default: null.
only_withdrawal_accountsbooleanIf true, return only accounts usable as the source of an outgoing transfer or withdrawal. Default: false.
status"Enabled" | "Blocked" | "Deleted" | nullFilter by lifecycle status. Defaults to all statuses; pass Enabled to hide closed or blocked accounts. Default: null.
usage"Private" | "Business" | nullFilter by usage: personal (Private) or business (Business). Servers MAY ignore this if they do not track usage. Default: null.
Raw JSON Schema
{
"additionalProperties": false,
"properties": {
"account_type": {
"anyOf": [
{
"enum": [
"Current",
"Savings",
"Credit",
"Loan",
"Other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by account type. `Current` and `Savings` are the common spending and deposit accounts; `Credit` covers revolving credit / credit cards; `Loan` covers mortgages and amortizing loans. Debit and prepaid cards live under `Current`; their `maskedPan` field flags the attached card."
},
"only_withdrawal_accounts": {
"default": false,
"description": "If true, return only accounts usable as the source of an outgoing transfer or withdrawal.",
"type": "boolean"
},
"status": {
"anyOf": [
{
"enum": [
"Enabled",
"Blocked",
"Deleted"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by lifecycle status. Defaults to all statuses; pass `Enabled` to hide closed or blocked accounts."
},
"usage": {
"anyOf": [
{
"enum": [
"Private",
"Business"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by usage: personal (`Private`) or business (`Business`). Servers MAY ignore this if they do not track usage."
}
},
"type": "object"
}

Output​

FieldTypeRequiredDescription
itemsarray<Account>✓Accounts matching the request.

items[] — Account​

Bank account with balance and metadata. Property names follow Berlin Group PSD2 accountDetails where they overlap (iban, bban, bic, maskedPan, product, status, usage), so servers fronting a PSD2 backend can map fields directly. Servers SHOULD populate at least one of accountNumber, iban, bban, or maskedPan.

FieldTypeRequiredDescription
accountNumberstring✓Display-friendly account number in the locally familiar format. For European accounts this is typically the IBAN; otherwise the domestic account number. Use the typed identifier fields (iban, bban, maskedPan) when you need to parse or route on it. Examples: "1234-56-789012", "GB29NWBK60161331926819", "0133-26-007890".
accountType"Current" | "Credit" | "Savings" | "Loan" | "Other" | nullType of account. Default: null.
availableBalancenumber | nullFunds available to spend right now in currency, after pending authorisations and including any overdraftLimit headroom. Aligns with the PSD2 interimAvailable balance type. Default: null.
balancenumber✓Current booked balance in currency. For credit accounts a negative value indicates an outstanding balance owed.
balanceUpdatedAtstring | nullISO 8601 timestamp at which balance and availableBalance were last refreshed by the bank. Default: null.
balancesarray<Balance> | nullTyped balance entries when the bank exposes more than just the booked and available scalars (ClosingBooked, Expected, InterimAvailable, ForwardAvailable, NonInvoiced). When populated, the top-level balance and availableBalance scalars are derived shortcuts for the most-recent ClosingBooked and InterimAvailable entries; servers MUST keep them consistent. Servers without typed balance support SHOULD omit this field and emit only the scalars. Default: null.
bbanstring | nullBasic Bank Account Number, the domestic identifier used in countries (or for products) without an IBAN. Default: null. Examples: "BARC12345612345678", "0133-26-007890".
bicstring | nullBIC / SWIFT code of the holding bank (ISO 9362). Default: null. Examples: "NWBKGB2L", "DEUTDEFF".
currencystring✓ISO 4217 currency code of the account. For multi-currency accounts (per PSD2 convention) use XXX. Examples: "USD", "EUR", "ISK", "GBP", "XXX". Pattern: ^[A-Z]{3}$.
ibanstring | nullIBAN (ISO 13616), when the account has one. Default: null. Examples: "GB29NWBK60161331926819", "DE89370400440532013000".
idstring✓Unique account identifier (server-scoped)
isDefaultAccountboolean | nullWhether this is the user's default account for new transfers. At most one account per response SHOULD have this set to true. Default: null.
isWithdrawalAccountboolean | nullWhether this account can be used as the source of an outgoing transfer or withdrawal. Default: null.
maskedPanstring | nullMasked Primary Account Number for card accounts. The middle digits MUST be obscured. Default: null. Examples: "411111xxxxxx1111", "****-****-****-1234".
minimumPaymentDuenumber | nullCredit accounts only. Minimum payment required by paymentDueDate to keep the account current and avoid late fees, in currency. Servers MUST omit on non-credit accounts. Default: null.
namestring | nullHuman-readable account name set by the bank or the user. Default: null. Examples: "Main Checking", "Emergency Fund", "Visa Credit Card".
openedDatestring | nullDate the account was opened, ISO 8601 (YYYY-MM-DD). Default: null.
overdraftLimitnumber | nullApproved overdraft on a current/savings account or credit limit on a credit/card account, in currency. 0 (or omitted) means no extra headroom beyond balance. Default: null.
ownerNamestring | nullPrimary account holder's name as the bank holds it. For joint accounts, servers MAY join multiple names with , . Default: null. Examples: "Jane Doe", "Jane Doe & John Doe", "Acme Corp".
paymentDueDatestring | nullCredit accounts only. ISO 8601 date by which minimumPaymentDue must be paid. Servers MUST omit on non-credit accounts. Default: null.
productstring | nullBank's marketing name for the account product, per PSD2 product. Free-form and proprietary to the issuer. Default: null. Examples: "Premium Checking", "Visa Signature", "Easy Saver".
statementBalancenumber | nullCredit accounts only. Total billed on the most recent closed statement, in currency. Pay this in full by paymentDueDate to avoid interest charges. Servers MUST omit on non-credit accounts. Default: null.
statementClosingDatestring | nullCredit accounts only. ISO 8601 date the current billing cycle closes and the next statement is generated. Optional even on credit accounts; servers MUST omit on non-credit accounts. Default: null.
status"Enabled" | "Blocked" | "Deleted" | nullLifecycle status. If omitted, clients SHOULD treat the account as Enabled. Default: null.
usage"Private" | "Business" | nullWhether this is a personal or business account. Default: null.

balances[] — Balance​

One typed balance entry on an account. Profile of: Berlin Group PSD2 balances array element.

FieldTypeRequiredDescription
amountnumber✓Balance amount in currency.
asOfstring | nullISO 8601 timestamp when this balance was last refreshed. Default: null.
currencystring✓ISO 4217 currency code. Pattern: ^[A-Z]{3}$.
type"ClosingBooked" | "Expected" | "InterimAvailable" | "ForwardAvailable" | "NonInvoiced"✓Balance type.
Raw JSON Schema
{
"description": "Envelope for a list of accounts",
"properties": {
"items": {
"description": "Accounts matching the request.",
"items": {
"description": "Bank account with balance and metadata.\n\nProperty names follow Berlin Group PSD2 `accountDetails` where they\noverlap (`iban`, `bban`, `bic`, `maskedPan`, `product`, `status`,\n`usage`), so servers fronting a PSD2 backend can map fields directly.\nServers SHOULD populate at least one of `accountNumber`, `iban`,\n`bban`, or `maskedPan`.",
"properties": {
"accountNumber": {
"description": "Display-friendly account number in the locally familiar format. For European accounts this is typically the IBAN; otherwise the domestic account number. Use the typed identifier fields (`iban`, `bban`, `maskedPan`) when you need to parse or route on it.",
"examples": [
"1234-56-789012",
"GB29NWBK60161331926819",
"0133-26-007890"
],
"type": "string"
},
"accountType": {
"anyOf": [
{
"description": "Type of bank account.\n\nAligned with the ISO 20022 ExternalCashAccountType1Code values exposed\nvia the Berlin Group PSD2 `cashAccountType`, collapsed to the buckets\nthat map cleanly across regions and reflect distinctions a user would\nactually ask about:\n\n - `Current` - day-to-day transaction account (ISO 20022 CACC).\n Debit cards and stored-value / prepaid cards live\n here too: `maskedPan` flags an attached card and the\n balance/availableBalance pair answers \"can I use it?\"\n - `Savings` - interest-bearing savings (ISO 20022 SVGS)\n - `Credit` - revolving credit / credit card account; carries the\n statement-cycle fields below (`statementBalance`,\n `minimumPaymentDue`, `paymentDueDate`, ...).\n - `Loan` - amortizing loan or mortgage (ISO 20022 LOAN)\n - `Other` - anything else (escrow, brokerage, etc.)",
"enum": [
"Current",
"Credit",
"Savings",
"Loan",
"Other"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Type of account."
},
"availableBalance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Funds available to spend right now in `currency`, after pending authorisations and including any `overdraftLimit` headroom. Aligns with the PSD2 `interimAvailable` balance type."
},
"balance": {
"description": "Current booked balance in `currency`. For credit accounts a negative value indicates an outstanding balance owed.",
"type": "number"
},
"balanceUpdatedAt": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 8601 timestamp at which `balance` and `availableBalance` were last refreshed by the bank."
},
"balances": {
"anyOf": [
{
"items": {
"description": "One typed balance entry on an account.\n\nProfile of: Berlin Group PSD2 `balances` array element.",
"properties": {
"amount": {
"description": "Balance amount in `currency`.",
"type": "number"
},
"asOf": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 8601 timestamp when this balance was last refreshed."
},
"currency": {
"description": "ISO 4217 currency code.",
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"type": {
"description": "Balance type.",
"enum": [
"ClosingBooked",
"Expected",
"InterimAvailable",
"ForwardAvailable",
"NonInvoiced"
],
"type": "string"
}
},
"required": [
"type",
"amount",
"currency"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Typed balance entries when the bank exposes more than just the booked and available scalars (`ClosingBooked`, `Expected`, `InterimAvailable`, `ForwardAvailable`, `NonInvoiced`). When populated, the top-level `balance` and `availableBalance` scalars are derived shortcuts for the most-recent `ClosingBooked` and `InterimAvailable` entries; servers MUST keep them consistent. Servers without typed balance support SHOULD omit this field and emit only the scalars."
},
"bban": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Basic Bank Account Number, the domestic identifier used in countries (or for products) without an IBAN.",
"examples": [
"BARC12345612345678",
"0133-26-007890"
]
},
"bic": {
"anyOf": [
{
"pattern": "^[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "BIC / SWIFT code of the holding bank (ISO 9362).",
"examples": [
"NWBKGB2L",
"DEUTDEFF"
]
},
"currency": {
"description": "ISO 4217 currency code of the account. For multi-currency accounts (per PSD2 convention) use `XXX`.",
"examples": [
"USD",
"EUR",
"ISK",
"GBP",
"XXX"
],
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"iban": {
"anyOf": [
{
"pattern": "^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "IBAN (ISO 13616), when the account has one.",
"examples": [
"GB29NWBK60161331926819",
"DE89370400440532013000"
]
},
"id": {
"description": "Unique account identifier (server-scoped)",
"type": "string"
},
"isDefaultAccount": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether this is the user's default account for new transfers. At most one account per response SHOULD have this set to true."
},
"isWithdrawalAccount": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether this account can be used as the source of an outgoing transfer or withdrawal."
},
"maskedPan": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Masked Primary Account Number for card accounts. The middle digits MUST be obscured.",
"examples": [
"411111xxxxxx1111",
"****-****-****-1234"
]
},
"minimumPaymentDue": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Credit accounts only. Minimum payment required by `paymentDueDate` to keep the account current and avoid late fees, in `currency`. Servers MUST omit on non-credit accounts."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable account name set by the bank or the user.",
"examples": [
"Main Checking",
"Emergency Fund",
"Visa Credit Card"
]
},
"openedDate": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Date the account was opened, ISO 8601 (YYYY-MM-DD)."
},
"overdraftLimit": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Approved overdraft on a current/savings account or credit limit on a credit/card account, in `currency`. `0` (or omitted) means no extra headroom beyond `balance`."
},
"ownerName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Primary account holder's name as the bank holds it. For joint accounts, servers MAY join multiple names with `, `.",
"examples": [
"Jane Doe",
"Jane Doe & John Doe",
"Acme Corp"
]
},
"paymentDueDate": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Credit accounts only. ISO 8601 date by which `minimumPaymentDue` must be paid. Servers MUST omit on non-credit accounts."
},
"product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Bank's marketing name for the account product, per PSD2 `product`. Free-form and proprietary to the issuer.",
"examples": [
"Premium Checking",
"Visa Signature",
"Easy Saver"
]
},
"statementBalance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Credit accounts only. Total billed on the most recent closed statement, in `currency`. Pay this in full by `paymentDueDate` to avoid interest charges. Servers MUST omit on non-credit accounts."
},
"statementClosingDate": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Credit accounts only. ISO 8601 date the current billing cycle closes and the next statement is generated. Optional even on credit accounts; servers MUST omit on non-credit accounts."
},
"status": {
"anyOf": [
{
"description": "Lifecycle status of an account, per Berlin Group PSD2 `accountStatus`.",
"enum": [
"Enabled",
"Blocked",
"Deleted"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Lifecycle status. If omitted, clients SHOULD treat the account as `Enabled`."
},
"usage": {
"anyOf": [
{
"description": "How the account is used, per Berlin Group PSD2 `usage`.\n\n`Private` corresponds to PSD2 `PRIV` (personal); `Business` to `ORGA`\n(professional / organisation).",
"enum": [
"Private",
"Business"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether this is a personal or business account."
}
},
"required": [
"id",
"accountNumber",
"currency",
"balance"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"items"
],
"type": "object"
}