Consumer Endpoints
Rapid Transfers
>
Consumer Endpoints
Overview
Consumer-facing endpoints for the Rapid Transfers service, enabling end users to perform rapid transfer operations between their accounts and cards.
Features
This API provides endpoints for:
Payment Methods - Link and manage debit cards for rapid transfers
- List all transfer-enabled cards
- Link new cards with high-risk authorization
- Delete/disable cards
Transfers - Create and manage rapid money movements
- Create push-to-card transfers (account to card)
- Create pull-from-card transfers (card to account)
- View transfer status and history
- Review transfer details including fees (V2 pricing: 1.75% with $0.50 minimum)
End-to-End Encryption - Generate encryption keys for secure card data handling
API Versions
V2 Endpoints apply a 1.75% service fee with a $0.50 minimum to both push and pull transfers.
API Reference
openapi: "3.0.0"
info:
version: 1.0.0
title: Rapid Transfers
servers:
- url: 'https://{API_ENVIRONMENT}/a/consumer/api'
variables:
API_ENVIRONMENT:
default: devbank.banno-development.com
description: FI specific hostname
paths:
/v1/users/{userId}/rapid-transfers/methods:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: List of all transfer cards for the user
tags:
- Payment Methods
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.paymentmethods.readonly
responses:
'200':
description: List all payment methods. Cards will only be returned if they have push-to-card or pull-from-card payment methods.
content:
application/json:
schema:
$ref: '#/components/schemas/GetAllCardsResponse'
'403':
description: Missing needed abilities
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/rapid-transfers/methods/cards:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Link a transfer card, this endpoint requires high risk authorization
tags:
- Payment Methods
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/highrisk.authorized
- https://api.banno.com/consumer/auth/rapidtransfers.cards.write
requestBody:
description: Details of the card
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCardRequest'
responses:
'200':
description: Card Linked
content:
application/json:
schema:
$ref: '#/components/schemas/Card'
'403':
description: Missing needed abilities
'404':
description: No Moov account for this user, or userId not found.
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/rapid-transfers/methods/cards/{cardId}:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/cardId'
delete:
summary: Delete/disable a card
tags:
- Payment Methods
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.cards.write
responses:
'200':
description: Card is disabled
'403':
description: Missing needed abilities
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/rapid-transfers/transfers:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Get the status of all transfers
tags:
- Transfers
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readwrite
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readonly
responses:
'200':
description: Transfer status
content:
application/json:
schema:
$ref: '#/components/schemas/GetAllTransfersResponse'
'403':
description: Missing needed abilities
'404':
description: No Moov account for this user, or userId not found.
'500':
description: Internal server error (something went wrong in the server side)
/v2/users/{userId}/rapid-transfers/transfers:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Create a transfer to move funds with a card (V2 — 1.75% fee with $0.50 minimum)
tags:
- Transfers
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readwrite
requestBody:
description: Create a card transfer, either pull or push. V2 applies a 1.75% fee with a $0.50 minimum to both push and pull transfers.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTransferRequest'
responses:
'200':
description: Transfer created
content:
application/json:
schema:
$ref: '#/components/schemas/RapidTransfer'
'400':
description: If a card-to-card transfer is requested, or if a JH account-to-JH account transfer is requested. These are disallowed in this API.
'403':
description: Missing needed abilities
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/rapid-transfers/transfers/{transferId}:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/transferId'
get:
summary: Get the status of a transfers
tags:
- Transfers
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readwrite
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readonly
responses:
'200':
description: Transfer status
content:
application/json:
schema:
$ref: '#/components/schemas/RapidTransfer'
'403':
description: Missing needed abilities
'404':
description: No Moov account for this user, or userId not found.
'500':
description: Internal server error (something went wrong in the server side)
/v1/rapid-transfers/end-to-end-keys/create:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Create a new end-to-end key
tags:
- End-to-end Keys
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.cards.write
responses:
'200':
description: End-to-end key created
content:
application/json:
schema:
type: object
properties:
alg:
type: string
crv:
type: string
kid:
type: string
kty:
type: string
use:
type: string
x:
type: string
y:
type: string
'403':
description: Missing needed abilities
'500':
description: Internal server error (something went wrong in the server side)
/v2/users/{userId}/rapid-transfers/transfers/review:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Returns data for transfer review (V2)
tags:
- Transfers
security:
- OpenIDConsumer:
- https://api.banno.com/consumer/auth/rapidtransfers.transfers.readwrite
requestBody:
description: Create a card transfer, either pull or push
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTransferRequest'
responses:
'200':
description: Transfer review data
content:
application/json:
schema:
$ref: '#/components/schemas/TransferReviewResponse'
'400':
description: If a card-to-card transfer is requested, or if a JH account-to-JH account transfer is requested. These are disallowed in this API.
'403':
description: Missing needed abilities
'500':
description: Internal server error (something went wrong in the server side)
components:
securitySchemes:
OpenIDConsumer:
$ref: '../security-schemas/security-schemas.yaml#/components/securitySchemes/OpenIDConsumer'
parameters:
userId:
name: userId
in: path
description: Unique identifier of the user
required: true
schema:
type: string
format: uuid
cardId:
name: cardId
in: path
description: Id of the transfer card
required: true
schema:
type: string
format: uuid
transferId:
name: transferId
in: path
description: Id of the transfer
required: true
schema:
type: string
format: uuid
schemas:
CreateCardRequest:
type: object
required:
- firstNumber
- token
properties:
firstNumber:
description: The first number of the card
type: string
token:
description: JWE encrypted card details. Needs to contain cardNumber (string), cardCvv (string), and expiration (object containing month (string), and year (string))
type: string
Expiration:
required:
- month
- year
properties:
month:
description: The month the card expires, encrypted by client
type: string
year:
description: The year the card expires, encrypted by client
type: string
Card:
required:
- cardId
- brand
- issuer
- lastFour
- pushToCardId
- pullFromCardId
type: object
properties:
cardId:
description: The unique identifer of the card.
type: string
format: uuid
nullable: false
brand:
description: The card brand.
type: string
enum: [ Visa, Mastercard ]
nullable: false
issuer:
description: The financial institution that issued the card.
type: string
example: "Banno Dev Bank"
nullable: false
lastFour:
description: The last four digits of the card number.
type: string
maxLength: 4
example: "1234"
nullable: false
pushToCardId:
description: The unique identifier to use when creating a transfer where the card is the destination.
type: string
format: uuid
nullable: true
pullFromCardId:
description: The unique identifier to use when creating a transfer where the card is the source.
type: string
format: uuid
nullable: true
GetAllCardsResponse:
required:
- cards
- accounts
type: object
properties:
cards:
type: array
items:
$ref: '#/components/schemas/Card'
accounts:
type: array
description: The accounts it is possible to use in a rapid transfer.
items:
type: object
required:
- accountId
- name
- maskedAccountNumber
- accountType
properties:
accountId:
type: string
format: uuid
description: The account id.
name:
type: string
description: The account name.
maskedAccountNumber:
type: string
description: The last 4 digits of the account number masked.
accountType:
type: string
description: The account type.
accountSubType:
type: string
description: The account sub type.
balance:
type: string
description: The account balance.
sortIndex:
type: integer
description: The sort index for ordering accounts.
CreateTransferRequest:
required:
- amount
- transferType
- transferDetails
type: object
properties:
amount:
description: The dollar amount of the transfer. Ie $ .99 would be represented as .99, $100.75 would be represented as 100.75
type: string
transferDetails:
type: object
oneOf:
- $ref: '#/components/schemas/pullFromCardCreate'
- $ref: '#/components/schemas/pushToCardCreate'
pullFromCardCreate:
type: object
required:
- transferType
- from
- paymentMethodId
- to
- jhAccountId
properties:
transferType:
type: string
enum:
- pullFromCardTransfer
from:
required:
- paymentMethodId
- brand
- lastFour
properties:
paymentMethodId:
type: string
format: uuid
brand:
type: string
enum:
- Mastercard
- Visa
lastFour:
type: string
to:
required:
- jhAccountId
properties:
jhAccountId:
type: string
format: uuid
pushToCardCreate:
type: object
required:
- transferType
- from
- jhAccountId
- to
- paymentMethodId
properties:
transferType:
type: string
enum:
- pushToCardTransfer
from:
required:
- jhAccountId
properties:
jhAccountId:
type: string
format: uuid
to:
required:
- paymentMethodId
- brand
- lastFour
properties:
paymentMethodId:
type: string
format: uuid
brand:
type: string
enum:
- Mastercard
- Visa
lastFour:
type: string
GetAllTransfersResponse:
required:
- RapidTransfer
type: object
properties:
transfers:
type: array
items:
$ref: '#/components/schemas/RapidTransfer'
RapidTransfer:
required:
- transferId
- transferDetails
- amount
- transferCreationDate
- status
- total
type: object
properties:
transferId:
description: The internal unique identifer for the transfer, created by enterprise
type: string
format: uuid
transferDetails:
type: object
oneOf:
- $ref: '#/components/schemas/pullFromCardResponse'
- $ref: '#/components/schemas/pushToCardResponse'
amount:
description: The dollar amount of the transfer. Ie $ .99 would be represented as .99, $100.75 would be represented as 100.75
type: string
transferCreationDate:
description: The date the transfer was created
type: string
format: date-time
transferCompletionDate:
description: The date the transfer was completed.
type: string
format: date-time
status:
description: The status of the transfer.
type: string
enum: [canceled, completed, created, delayed, failed, pending, queued, reversed]
fee:
description: The fee for the transfer.
type: string
example: "1.00"
total:
description: The total amount of the transfer, including fees.
type: string
example: "1.00"
pullFromCardResponse:
type: object
required:
- transferType
- from
- to
properties:
transferType:
type: string
enum:
- pullFromCardTransfer
from:
required:
- paymentMethodId
- brand
- lastFour
- issuer
properties:
paymentMethodId:
type: string
format: uuid
brand:
type: string
enum:
- Mastercard
- Visa
lastFour:
type: string
issuer:
type: string
nullable: true
to:
required:
- jhAccountId
properties:
jhAccountId:
type: string
format: uuid
pushToCardResponse:
type: object
required:
- transferType
- from
- jhAccountId
- to
- paymentMethodId
- brand
- lastFour
properties:
transferType:
type: string
enum:
- pushToCardTransfer
from:
required:
- jhAccountId
properties:
jhAccountId:
type: string
format: uuid
to:
required:
- paymentMethodId
- brand
- lastFour
- issuer
properties:
paymentMethodId:
type: string
format: uuid
brand:
type: string
enum:
- Mastercard
- Visa
lastFour:
type: string
issuer:
type: string
nullable: true
TransferReviewResponse:
type: object
required:
- fee
- reviewStatus
- total
properties:
fee:
description: The fee for the transfer.
type: string
example: "1.00"
reviewStatus:
description: The status of the transfer.
type: string
enum: [amountBelowMinimum, amountExceeded, countExceeded, oneRemaining, ready]
minimumTransferAmount:
description: The minimum transfer amount.
type: string
example: "1.00"
feeDetails:
nullable: true
$ref: '#/components/schemas/FeeDetails'
total:
description: The total amount of the transfer, including fees.
type: string
example: "1.00"
FeeDetails:
type: object
required:
- minimumTransferFee
- serviceFeePercent
properties:
minimumTransferFee:
description: The minimum transfer fee.
type: string
nullable: false
example: "0.25"
serviceFeePercent:
description: The service fee percentage.
nullable: false
type: string
example: "0.0175"
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Fri Jan 16 2026