External Transfer Accounts
Consumer API
>
API Reference
>
v0
>
Transfers
>
External Transfer Accounts
openapi: 3.0.0
info:
version: '0.0'
title: External Transfer Accounts
servers:
- url: 'https://{API_ENVIRONMENT}/a/consumer/api/v0'
variables:
API_ENVIRONMENT:
default: digital.garden-fi.com
description: FI specific hostname
tags:
- name: Transfer Accounts
description: Account entities to move money to and from
- name: PendingExternalTransferAccount Creation
description: Endpoints for creating PendingExternalTransferAccounts
- name: PendingExternalTransferAccount Modification
description: Any updates to the PendingExternalTransferAccounts
- name: ExternalTransferAccount Modification
description: Any updates to the ExternalTransferAccounts
paths:
"/users/{userId}/transfers/accounts/external":
get:
tags:
- Transfer Accounts
description: Returns External Transfer accounts
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readonly'
- 'https://api.banno.com/consumer/auth/transfers.unmaskednumber.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/GetExternalTransferAccounts"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"500":
description: Internal error
post:
tags:
- PendingExternalTransferAccount Creation
description: Creation of the PendingExternalTransferAccount Model
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
requestBody:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountCreation"
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/PendingExternalTransferAccount"
"400":
description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountCreationErrors"
"403":
description: User is not permitted to use External Transfer Account feature or
failed to supply a JWT that's allowed to perform High Risk actions.
content:
application/json:
schema:
$ref: "#/components/schemas/HighRiskForbidden"
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/pending/{pendingExternalTransferAccountId}":
put:
tags:
- PendingExternalTransferAccount Modification
description: Make guesses to deposit verification amounts
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the (potential) external transfer account
required: true
schema:
type: string
requestBody:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/DepositVerificationGuess"
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccount"
"400":
description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/DepositVerificationFailure"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
delete:
tags:
- PendingExternalTransferAccount Modification
description: Delete a PendingExternalTransferAccount
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the (potential) external transfer account
required: true
schema:
type: string
responses:
"204":
description: Success - No Content
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/pending/{pendingExternalTransferAccountId}/reset":
post:
tags:
- PendingExternalTransferAccount Modification
description: Institution reset of a locked PendingExternalTransferAccount
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the (potential) external transfer account
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/PendingExternalTransferAccount"
"400":
description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorNotLockedPendingExternalTransferAccount"
"401":
description: Enterprise User does not have the Affected Consumer User
content:
application/json:
schema:
$ref: "#/components/schemas/NoAffectedConsumerUser"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/{externalTransferAccountId}":
delete:
tags:
- ExternalTransferAccount Modification
description: Delete an ETA
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: externalTransferAccountId
description: ID of the external transfer account
required: true
schema:
type: string
responses:
"200":
description: OK - body contains deleted external transfer id's
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountDeletionSuccess"
"400":
description: Deletion failure - some transfers unable to be deleted
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountDeletionFailure"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active ETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/pending/{pendingExternalTransferAccountId}/name":
put:
tags:
- PendingExternalTransferAccount Modification
description: Change the name of a pending external transfer account
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the (potential) external transfer account
required: true
schema:
type: string
requestBody:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountUpdate"
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/PendingExternalTransferAccount"
"400":
description: Bad request
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/pending/{pendingExternalTransferAccountId}/verifications":
post:
tags:
- PendingExternalTransferAccount Modification
description: Resend micro deposits on an expired PETA
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the (potential) external transfer account
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/PendingExternalTransferAccount"
"400":
description: Bad request - returns PETA for updating purposes
content:
application/json:
schema:
$ref: "#/components/schemas/PendingExternalTransferAccount"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/{externalTransferAccountId}/name":
put:
tags:
- ExternalTransferAccount Modification
description: Change the name of a verified external transfer account
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.accounts.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: externalTransferAccountId
description: ID of the external transfer account
required: true
schema:
type: string
requestBody:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountUpdate"
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccount"
"400":
description: Bad request
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/{externalTransferAccountId}/number":
get:
tags:
- ExternalTransferAccount Modification
description: Get an ExternalTransferAccount's full account number
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.unmaskednumber.readonly'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: externalTransferAccountId
description: ID of the external transfer account
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountNumber"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active ETA
"500":
description: Internal error
"/users/{userId}/transfers/accounts/external/pending/{pendingExternalTransferAccountId}/number":
get:
tags:
- PendingExternalTransferAccount Modification
description: Get an PendingExternalTransferAccount's full account number
security:
- OpenID_Connect:
- 'https://api.banno.com/consumer/auth/transfers.unmaskednumber.readwrite'
parameters:
- in: path
name: userId
description: ID of the banno user
required: true
schema:
type: string
- in: path
name: pendingExternalTransferAccountId
description: ID of the pending external transfer account
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalTransferAccountNumber"
"403":
description: User is not permitted to use External Transfer Account feature
content:
application/json:
schema:
$ref: "#/components/schemas/NoAbilityForbidden"
"404":
description: Not found - the account id does not correspond to an active PETA
"500":
description: Internal error
components:
securitySchemes:
OpenID_Connect:
type: openIdConnect
description: OpenID Connect - Discovery endpoint will be institution specific
openIdConnectUrl: >-
https://digital.garden-fi.com/a/consumer/api/v0/oidc/.well-known/openid-configuration
schemas:
GetExternalTransferAccounts:
type: object
description: Array of External Transfer accounts
required:
- verified
- pending
properties:
verified:
type: array
description: Verified External Transfer Accounts available to make transfers
items:
$ref: "#/components/schemas/ExternalTransferAccount"
pending:
type: array
description: Pending External Transfer Accounts needing micro deposit verification
items:
$ref: "#/components/schemas/PendingExternalTransferAccount"
PendingExternalTransferAccount:
type: object
required:
- id
- maskedAccountNumber
- name
- accountType
- depositVerificationStatus
- routingNumber
properties:
id:
type: string
description: Unique identifier
maskedAccountNumber:
type: string
description: Last 4 digits of the of the account number masked
name:
type: string
description: Display name of External Transfer account
accountType:
$ref: "#/components/schemas/ExternalTransferAccountType"
depositVerificationStatus:
type: string
description: Current state of micro deposits for account verification
enum:
- pending
- verificationFailed
- lockedOut
institutionName:
type: string
description: Name of account's institution
routingNumber:
type: string
description: Routing number associated with account
depositExpirationDate:
type: string
format: date-time
description: Date in which micro deposits expire
ExternalTransferAccount:
type: object
required:
- id
- maskedAccountNumber
- name
- accountType
- routingNumber
properties:
id:
type: string
description: Unique identifier
maskedAccountNumber:
type: string
description: Last 4 digits of the of the account number masked
name:
type: string
description: Display name of External Transfer account
accountType:
$ref: "#/components/schemas/ExternalTransferAccountType"
institutionName:
type: string
description: Name of account's institution
routingNumber:
type: string
description: Routing number associated with account
ExternalTransferAccountCreation:
type: object
required:
- routingNumber
- accountNumber
- name
- accountType
properties:
routingNumber:
type: string
description: Institutions routing number, 9 digits
accountNumber:
type: string
description: Account number
name:
type: string
description: Name of the account, nickname
accountType:
$ref: "#/components/schemas/ExternalTransferAccountType"
ExternalTransferAccountType:
type: string
description: Account type of External Transfer account
enum:
- Checking
- Savings
example: Checking
ExternalTransferAccountCreationErrors:
type: object
required:
- error
properties:
error:
type: string
description: reason for failure
enum:
- DuplicateAccount
- InvalidRoutingNumber
- AccountBlocked
- MicroDepositsFailed
account:
$ref: "#/components/schemas/PendingExternalTransferAccount"
DepositVerificationFailureReason:
type: string
description: reason for failure
enum:
- IncorrectGuess
- AccountBlocked
- MicrodepositsExpired
DepositVerificationFailure:
type: object
required:
- error
properties:
error:
$ref: "#/components/schemas/DepositVerificationFailureReason"
account:
$ref: "#/components/schemas/PendingExternalTransferAccount"
ErrorNotLockedPendingExternalTransferAccountReason:
type: string
description: reason for failure
enum:
- NonLockedPendingAccount
ErrorNotLockedPendingExternalTransferAccount:
type: object
required:
- error
properties:
error:
$ref: "#/components/schemas/ErrorNotLockedPendingExternalTransferAccountReason"
account:
$ref: "#/components/schemas/PendingExternalTransferAccount"
DepositVerificationGuess:
type: object
required:
- amount1
- amount2
properties:
amount1:
type: string
example: "0.33"
description: Decimal string guess
amount2:
type: string
example: "0.34"
description: Decimal string guess
ExternalTransferAccountUpdate:
type: object
required:
- name
properties:
name:
type: string
description: New name for ETA
ExternalTransferAccountNumber:
type: object
required:
- accountNumber
properties:
accountNumber:
type: string
description: Unmasked ETA number
ExternalTransferAccountDeletionFailure:
type: object
required:
- deletedTransfers
- failedDeletedTransfers
properties:
deletedTransfers:
type: array
items:
type: string
format: uuid
description: Transfers associated with that account that were deleted with the
account
failedDeletedTransfers:
type: array
items:
type: string
format: uuid
description: Transfers associated with that account failed to delete with the
account
ExternalTransferAccountDeletionSuccess:
type: object
required:
- deletedTransfers
properties:
deletedTransfers:
type: array
items:
type: string
format: uuid
description: Transfers associated with that account that were deleted with the
account
HighRiskForbidden:
type: object
required:
- errorCode
properties:
errorCode:
type: number
enum:
- 33
- 40
description: 33 - Did not supply a High Risk-permitted JWT; 40 - User is not
permitted use ExternalTransferAccount Endpoints based on the users
ability.
NoAbilityForbidden:
type: object
required:
- errorCode
properties:
errorCode:
type: number
enum:
- 40
description: 40 - User is not permitted use ExternalTransferAccount Endpoints
based on the users ability.
NoAffectedConsumerUser:
type: object
required:
- error
properties:
error:
type: string
enum:
- "Enterprise User does not have Affected Consumer User"
description: There is no Affected Consumer User that belongs to the Enterprise User
Status
A given External Transfer Account
can have one of five statuses. They are:
Pending - The
External Transfer Account
is in a non-verified state. They are unable to make external transfers.Verified - The
External Transfer Account
is verified either by micro deposits or an import process. They are able to make external transfers.Locked - The
External Transfer Account
has gone over the institution configured allowed attempts.Expired - The
External Transfer Account
has gone past the expiration date or failed to verify via micro deposits.Deleted - The
External Transfer Account
has been deleted by the user.
Have a Question?
Have a how-to question? Seeing a weird error? Get help on
StackOverflow.
Register for the Digital Toolkit Meetup
where we answer technical Q&A from the audience.
Last updated Fri Sep 15 2023