Banno Consumer API

Build apps and services using the same Consumer API that powers Banno Mobile and Online. Provides authenticated, OAuth/OpenID Connect protected access to accountholder data — accounts, transactions, transfers, alerts, cards, bill pay, ACH, wires, Zelle, RDC, documents/statements, messages, and forms — across Jack Henry's digital banking platform.

Banno Consumer API is one of 11 APIs that Jack Henry & Associates publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

Tagged areas include Consumer Banking, Accounts, Transactions, Transfers, and Bill Pay. The published artifact set on APIs.io includes an OpenAPI specification, an API reference, a getting-started guide, authentication docs, and a quickstart.

OpenAPI Specification

banno-consumer-api-openapi.yml Raw ↑
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 }