openapi: 3.0.3
info:
title: Banno Consumer API
description: |
Build apps and services using the same Consumer API that powers Banno
Mobile and Online. OAuth 2.0 / OpenID Connect protects every endpoint;
scopes are enforced per resource (e.g. `user.profile.readonly`,
`transactions.detail.readonly`). All endpoints are scoped under
`/a/consumer/api/v0` and operate within the context of a `userId`.
Resource groups documented at
https://banno.github.io/open-api-docs/consumer-api/api-reference/v0/
include: Abilities, Account Aggregation, Accounts, ACH, Alerts,
Bill Pay, Cards, Documents and Statements, Forms, Institutions,
Messages, OAuth and OpenID Connect, Positive Pay, Routing Numbers,
Task Events, Transactions, Transfers, User, Wire Transfers, and Zelle.
version: v0
contact:
name: Jack Henry Developer Support
url: https://jackhenry.dev/support/
license:
name: Proprietary
url: https://www.jackhenry.com/legal/terms-of-use
servers:
- url: https://api.banno.com
description: Banno production
tags:
- name: User
description: Profile and identity of the authenticated user.
- name: Accounts
description: Deposit, loan, line-of-credit, and investment accounts.
- name: Transactions
description: Posted and pending transactions per account.
- name: Transfers
description: Account-to-account and external transfers.
- name: Bill Pay
description: Bill-payment payees and payments.
- name: ACH
description: ACH origination and history.
- name: Wire Transfers
description: Outbound wire requests.
- name: Zelle
description: Zelle peer-to-peer payments.
- name: Cards
description: Debit and credit card management.
- name: Alerts
description: Account and security alerts.
- name: Messages
description: Two-way secure messaging with the institution.
- name: Documents And Statements
description: Statement and document delivery.
- name: Institutions
description: Public institution profile lookup.
- name: Routing Numbers
description: Routing number validation.
security:
- openIdConnect: []
paths:
/a/consumer/api/v0/users/{userId}:
get:
summary: Get User Profile
operationId: getUser
tags: [User]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/user.profile.readonly]
parameters:
- $ref: '#/components/parameters/UserId'
responses:
'200':
description: User profile.
content:
application/json:
schema:
$ref: '#/components/schemas/User'
/a/consumer/api/v0/users/{userId}/accounts:
get:
summary: List Accounts
operationId: listAccounts
tags: [Accounts]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/accounts.readonly]
parameters:
- $ref: '#/components/parameters/UserId'
responses:
'200':
description: All accounts the user owns or has access to.
content:
application/json:
schema:
type: object
properties:
accounts:
type: array
items:
$ref: '#/components/schemas/Account'
/a/consumer/api/v0/users/{userId}/accounts/{accountId}:
get:
summary: Get Account Details
operationId: getAccount
tags: [Accounts]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/accounts.detail.readonly]
parameters:
- $ref: '#/components/parameters/UserId'
- $ref: '#/components/parameters/AccountId'
responses:
'200':
description: Account detail.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
/a/consumer/api/v0/users/{userId}/accounts/{accountId}/transactions:
get:
summary: List Account Transactions
operationId: listTransactions
tags: [Transactions]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/transactions.readonly]
parameters:
- $ref: '#/components/parameters/UserId'
- $ref: '#/components/parameters/AccountId'
- name: startDate
in: query
schema: { type: string, format: date }
- name: endDate
in: query
schema: { type: string, format: date }
- name: cursor
in: query
schema: { type: string }
responses:
'200':
description: Paged list of transactions.
content:
application/json:
schema:
type: object
properties:
transactions:
type: array
items: { $ref: '#/components/schemas/Transaction' }
nextCursor: { type: string, nullable: true }
/a/consumer/api/v0/users/{userId}/accounts/{accountId}/transactions/{transactionId}:
get:
summary: Get Transaction Details
operationId: getTransaction
tags: [Transactions]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/transactions.detail.readonly]
parameters:
- $ref: '#/components/parameters/UserId'
- $ref: '#/components/parameters/AccountId'
- name: transactionId
in: path
required: true
schema: { type: string, format: uuid }
responses:
'200':
description: Transaction detail. Returns a user's account's transaction in greater detail.
content:
application/json:
schema:
$ref: '#/components/schemas/Transaction'
/a/consumer/api/v0/users/{userId}/transfers:
get:
summary: List Transfers
operationId: listTransfers
tags: [Transfers]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/transfers.readonly]
parameters: [{ $ref: '#/components/parameters/UserId' }]
responses:
'200':
description: Scheduled and historical transfers.
content:
application/json:
schema:
type: object
properties:
transfers:
type: array
items: { $ref: '#/components/schemas/Transfer' }
post:
summary: Create Transfer
operationId: createTransfer
tags: [Transfers]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/transfers.write]
parameters: [{ $ref: '#/components/parameters/UserId' }]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/TransferRequest' }
responses:
'201':
description: Transfer created.
content:
application/json:
schema: { $ref: '#/components/schemas/Transfer' }
/a/consumer/api/v0/users/{userId}/bill-pay/payees:
get:
summary: List Bill Pay Payees
operationId: listPayees
tags: [Bill Pay]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/bill-pay.readonly]
parameters: [{ $ref: '#/components/parameters/UserId' }]
responses:
'200':
description: Payees.
content:
application/json:
schema:
type: object
properties:
payees:
type: array
items: { $ref: '#/components/schemas/Payee' }
/a/consumer/api/v0/users/{userId}/bill-pay/payments:
post:
summary: Create Bill Pay Payment
operationId: createBillPayPayment
tags: [Bill Pay]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/bill-pay.write]
parameters: [{ $ref: '#/components/parameters/UserId' }]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/BillPayPaymentRequest' }
responses:
'201':
description: Bill-pay payment scheduled.
content:
application/json:
schema: { $ref: '#/components/schemas/BillPayPayment' }
/a/consumer/api/v0/users/{userId}/alerts:
get:
summary: List Alerts
operationId: listAlerts
tags: [Alerts]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/alerts.readonly]
parameters: [{ $ref: '#/components/parameters/UserId' }]
responses:
'200':
description: Alerts configured by the user.
content:
application/json:
schema:
type: object
properties:
alerts:
type: array
items: { $ref: '#/components/schemas/Alert' }
/a/consumer/api/v0/users/{userId}/cards:
get:
summary: List Cards
operationId: listCards
tags: [Cards]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/cards.readonly]
parameters: [{ $ref: '#/components/parameters/UserId' }]
responses:
'200':
description: Cards linked to the user.
content:
application/json:
schema:
type: object
properties:
cards:
type: array
items: { $ref: '#/components/schemas/Card' }
/a/consumer/api/v0/users/{userId}/messages:
get:
summary: List Messages
operationId: listMessages
tags: [Messages]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/messages.readonly]
parameters: [{ $ref: '#/components/parameters/UserId' }]
responses:
'200':
description: Secure-message threads.
content:
application/json:
schema:
type: object
properties:
messages:
type: array
items: { $ref: '#/components/schemas/Message' }
/a/consumer/api/v0/users/{userId}/wire-transfers:
post:
summary: Create Wire Transfer
operationId: createWireTransfer
tags: [Wire Transfers]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/wire-transfers.write]
parameters: [{ $ref: '#/components/parameters/UserId' }]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/WireTransferRequest' }
responses:
'201':
description: Wire submitted.
content:
application/json:
schema: { $ref: '#/components/schemas/WireTransfer' }
/a/consumer/api/v0/users/{userId}/zelle/payments:
post:
summary: Send Zelle Payment
operationId: sendZellePayment
tags: [Zelle]
security:
- openIdConnect: [https://api.banno.com/consumer/auth/zelle.write]
parameters: [{ $ref: '#/components/parameters/UserId' }]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/ZellePaymentRequest' }
responses:
'201':
description: Zelle payment submitted.
content:
application/json:
schema: { $ref: '#/components/schemas/ZellePayment' }
/a/consumer/api/v0/institutions/{institutionId}:
get:
summary: Get Institution
operationId: getInstitution
tags: [Institutions]
parameters:
- name: institutionId
in: path
required: true
schema: { type: string, format: uuid }
responses:
'200':
description: Institution profile.
content:
application/json:
schema: { $ref: '#/components/schemas/Institution' }
/a/consumer/api/v0/routing-numbers/{routingNumber}:
get:
summary: Lookup Routing Number
operationId: lookupRoutingNumber
tags: [Routing Numbers]
parameters:
- name: routingNumber
in: path
required: true
schema: { type: string, pattern: '^[0-9]{9}$' }
responses:
'200':
description: Routing-number metadata.
content:
application/json:
schema: { $ref: '#/components/schemas/RoutingNumber' }
components:
securitySchemes:
openIdConnect:
type: openIdConnect
openIdConnectUrl: https://api.banno.com/a/oidc/.well-known/openid-configuration
parameters:
UserId:
name: userId
in: path
required: true
description: ID of the desired user (UUID format).
schema: { type: string, format: uuid }
AccountId:
name: accountId
in: path
required: true
description: ID of the desired account (UUID format).
schema: { type: string, format: uuid }
schemas:
User:
type: object
properties:
id: { type: string, format: uuid }
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
phone: { type: string }
loginName: { type: string }
institutionId: { type: string, format: uuid }
Account:
type: object
properties:
id: { type: string, format: uuid }
name: { type: string }
numbers:
type: object
properties:
masked: { type: string }
accountType:
type: string
enum: [Deposit, Debt, LineOfCredit, Investment]
accountStatus:
type: string
enum: [Active, Closed, Dormant, Frozen]
balance: { type: number, format: double }
availableBalance: { type: number, format: double }
fetchedDate: { type: string, format: date-time }
institution:
type: object
properties:
id: { type: string, format: uuid }
name: { type: string }
canCreatePayments: { type: boolean }
canTransferFrom: { type: boolean }
hidden: { type: boolean }
regD:
type: object
properties:
limit: { type: integer }
used: { type: integer }
formattedMetaData:
type: array
items:
type: object
properties:
label: { type: string }
value: { type: string }
Transaction:
type: object
properties:
id: { type: string, format: uuid }
amount: { type: number, format: double }
date: { type: string, format: date }
postedDate: { type: string, format: date }
type:
type: string
enum: [Debit, Credit, Fee, Interest, Transfer]
status:
type: string
enum: [Posted, Pending]
description: { type: string }
memo: { type: string }
merchant:
type: object
properties:
name: { type: string }
category: { type: string }
logo: { type: string, format: uri }
runningBalance: { type: number, format: double }
tags:
type: array
items: { type: string }
pending: { type: boolean }
notes: { type: string }
enrichments:
type: object
additionalProperties: true
Transfer:
type: object
properties:
id: { type: string, format: uuid }
fromAccountId: { type: string, format: uuid }
toAccountId: { type: string, format: uuid }
amount: { type: number, format: double }
scheduledDate: { type: string, format: date }
frequency:
type: string
enum: [OneTime, Weekly, BiWeekly, Monthly]
status:
type: string
enum: [Scheduled, Processing, Complete, Failed, Cancelled]
memo: { type: string }
TransferRequest:
type: object
required: [fromAccountId, toAccountId, amount]
properties:
fromAccountId: { type: string, format: uuid }
toAccountId: { type: string, format: uuid }
amount: { type: number, format: double }
scheduledDate: { type: string, format: date }
frequency: { type: string }
memo: { type: string }
Payee:
type: object
properties:
id: { type: string, format: uuid }
name: { type: string }
nickname: { type: string }
accountNumber: { type: string }
address:
type: object
properties:
line1: { type: string }
line2: { type: string }
city: { type: string }
state: { type: string }
postalCode: { type: string }
deliveryMethod:
type: string
enum: [Electronic, Check]
BillPayPayment:
type: object
properties:
id: { type: string, format: uuid }
payeeId: { type: string, format: uuid }
fromAccountId: { type: string, format: uuid }
amount: { type: number }
scheduledDate: { type: string, format: date }
status:
type: string
enum: [Scheduled, Processing, Complete, Failed, Cancelled]
BillPayPaymentRequest:
type: object
required: [payeeId, fromAccountId, amount, scheduledDate]
properties:
payeeId: { type: string, format: uuid }
fromAccountId: { type: string, format: uuid }
amount: { type: number }
scheduledDate: { type: string, format: date }
memo: { type: string }
Alert:
type: object
properties:
id: { type: string, format: uuid }
type:
type: string
enum: [BalanceLow, BalanceHigh, LargeWithdrawal, LargeDeposit, CardActivity, LoginActivity]
channels:
type: array
items:
type: string
enum: [Email, SMS, Push, InApp]
threshold: { type: number }
enabled: { type: boolean }
Card:
type: object
properties:
id: { type: string, format: uuid }
last4: { type: string }
cardType:
type: string
enum: [Debit, Credit]
status:
type: string
enum: [Active, Locked, Lost, Stolen, Expired]
expirationDate: { type: string, pattern: '^[0-9]{2}/[0-9]{2}$' }
nameOnCard: { type: string }
Message:
type: object
properties:
id: { type: string, format: uuid }
subject: { type: string }
body: { type: string }
sentDate: { type: string, format: date-time }
read: { type: boolean }
author:
type: object
properties:
id: { type: string, format: uuid }
type:
type: string
enum: [User, Institution]
WireTransfer:
type: object
properties:
id: { type: string, format: uuid }
fromAccountId: { type: string, format: uuid }
beneficiaryName: { type: string }
beneficiaryAccountNumber: { type: string }
beneficiaryBankRoutingNumber: { type: string }
amount: { type: number }
currency: { type: string }
status:
type: string
enum: [Pending, Processing, Sent, Failed, Cancelled]
WireTransferRequest:
type: object
required: [fromAccountId, beneficiaryName, beneficiaryAccountNumber, beneficiaryBankRoutingNumber, amount]
properties:
fromAccountId: { type: string, format: uuid }
beneficiaryName: { type: string }
beneficiaryAccountNumber: { type: string }
beneficiaryBankRoutingNumber: { type: string }
amount: { type: number }
currency: { type: string, default: USD }
memo: { type: string }
ZellePayment:
type: object
properties:
id: { type: string, format: uuid }
fromAccountId: { type: string, format: uuid }
recipientToken: { type: string }
amount: { type: number }
memo: { type: string }
status:
type: string
enum: [Pending, Sent, Delivered, Failed]
ZellePaymentRequest:
type: object
required: [fromAccountId, recipientToken, amount]
properties:
fromAccountId: { type: string, format: uuid }
recipientToken: { type: string, description: Email or phone number }
amount: { type: number }
memo: { type: string }
Institution:
type: object
properties:
id: { type: string, format: uuid }
name: { type: string }
routingNumber: { type: string }
primaryWebsiteUrl: { type: string, format: uri }
logoUrl: { type: string, format: uri }
RoutingNumber:
type: object
properties:
routingNumber: { type: string }
institutionName: { type: string }
institutionAddress: { type: string }
valid: { type: boolean }