Add Funds to a Financial Account
Overview
Financial accounts hold payment card balances. The funding source for a financial account differs depending on your card product vertical.
The following table lists the funding source for each card product vertical:
| Product Vertical | Funding Source |
|---|---|
| Debit | Funded using Originated ACH transfers from an account holder's verified external bank account or Non-originated ACH transfer |
| Charge | Funded by the credit limit, which is backed by your product funding account balance |
| Secured charge | Funded using secured deposits sent via transfer from an account holder's verified external bank account |
| Fleet | Funded by the credit limit, which is backed by your product funding account balance |
| AP automation | Funded using Non-originated ACH transfers |
| Prepaid | Funded using internal Highnote transfers from your product funding account balance |
| Payroll | Funded via external payroll or Non-originated ACH transfers |
Transfer methods
Card product cancellation periods and risk and compliance reviews can impact transfer timelines.
The following table outlines the different transfer methods used for funding a financial account, and their associated timelines:
| Transfer Method | Timeline |
|---|---|
| Originated ACH | Three to five business days |
| Originated next day ACH | One to three business days |
| Originated same day ACH | One to two business days |
| Non-originated ACH | Three to five business days |
| Internal Highnote transfer | Within seconds |
Cutoff times
Originated ACH transfers have specific cutoff times for processing. Initiating a transfer after the specified cutoff time may result in additional processing time.
- Originated next day ACH: If a transfer is initiated before 4 PM EST, it will be processed by the bank the following business day. If initiated after 4 PM EST, the transfer will be processed two business days from initiation.
- Originated same day ACH: If a transfer is initiated before 2 PM EST, the bank will process it the same day. If initiated after 2 PM EST, the transfer will be processed the following business day.
All originated ACH transfer methods have a required three business day hold period once the transfer has been initiated and is processing.
Find financial account ID
Use the following query to find a financial account ID by application ID:
FindAccountHolderCardProductApplication
Query
query FindAccountHolderCardProductApplication($id: ID!) {
node(id: $id) {
... on AccountHolderCardProductApplication {
__typename
id
createdAt
updatedAt
applicationState {
status
}
cardProduct {
name
}
accountHolderSnapshot {
... on USPersonAccountHolderSnapshot {
accountHolderCurrent {
id
financialAccounts(first: 20) {
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
edges {
cursor
node {
__typename
id
name
}
}
}
}
}
... on USBusinessAccountHolderSnapshot {
accountHolderCurrent {
id
financialAccounts(first: 20) {
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
edges {
cursor
node {
__typename
id
name
}
}
}
}
}
}
}
}
}
Variables
{
"id": "CARD_PRODUCT_APPLICATION_ID"
}
Result
{
"data": {
"node": {
"__typename": "AccountHolderCardProductApplication",
"id": "CARD_PRODUCT_APPLICATION_ID",
"createdAt": "2022-02-24T15:55:10.842Z",
"updatedAt": "2022-02-24T15:55:17.742Z",
"applicationState": {
"status": "APPROVED"
},
"cardProduct": {
"name": "Business Prepaid"
},
"accountHolderSnapshot": {
"accountHolderCurrent": {
"id": "ACCOUNT_HOLDER_ID",
"financialAccounts": {
"pageInfo": {
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "start-cursor",
"endCursor": "end-cursor"
},
"edges": [
{
"cursor": "some-cursor",
"node": {
"__typename": "FinancialAccount",
"id": "FINANCIAL_ACCOUNT_ID",
"name": "Financial Account #1"
}
},
{
"cursor": "some-cursor",
"node": {
"__typename": "FinancialAccount",
"id": "FINANCIAL_ACCOUNT_ID",
"name": "Financial Account #2"
}
}
]
}
}
}
}
},
"extensions": {
"requestId": "REQUEST_ID"
}
}
Add funds to a financial account
To add funds to a Highnote financial account, use one of the following methods:
- Originated ACH: Use this method for debit card products.
- Non-originated ACH: Use this method for API automation products.
- Transfer from product funding account: Use this method for credit and charge card products.
Non-originated ACH
Do not enter production data in the Test environment. The Highnote Test environment is for exploring features and training. Use only dummy or test data.
In the Live environment, non-originated ACH transfers are initiated by account holders. In the Test environment, you can simulate a non-originated ACH transfer to fund a financial account using the following mutation:
simulateNonOriginatedAchTransfer
Query
mutation simulateNonOriginatedAchTransfer(
$input: SimulateNonOriginatedAchTransferInput!
) {
simulateNonOriginatedAchTransfer(input: $input) {
__typename
... on NonOriginatedAchTransfer {
id
amount {
currencyCode
value
}
createdAt
updatedAt
ledgers {
id
name
normalBalance
asOf
debitBalance {
value
currencyCode
}
creditBalance {
value
currencyCode
}
}
type
purpose
sign
traceNumber
status
statusFailureReason
settlementDate
processedAt
failedAt
returnSentToBankAt
}
}
}
Variables
{ "input": { "idempotencyKey": "12345", "financialAccountId": "id", "amount": { "currencyCode": "USD", "value": "200.00" }, "purpose": "DEPOSIT", "settlementDate": "2024-12-23", "companyIdentifier": "123", "companyName": "My Company", "companyDiscretionaryData": "data", "companyEntryDescription": "description", "individualIdentificationNumber": "123", "individualName": "Joe", "paymentRelatedInformation": "RMR*IV*0123456789**999.99" } }
Result
{
"data": {
"simulateNonOriginatedAchTransfer": {
"__typename": "NonOriginatedAchTransfer",
"id": "TRANSFER_ID",
"amount": {
"currencyCode": "USD",
"value": "200.00"
},
"createdAt": "2024-09-13T10:15:30Z",
"updatedAt": "2024-09-13T10:15:30Z",
"ledgers": [
{
"id": "ledger_001",
"name": "Primary Ledger",
"normalBalance": "DEBIT",
"asOf": "2024-09-13T10:15:30Z",
"debitBalance": {
"value": "200.00",
"currencyCode": "USD"
},
"creditBalance": {
"value": "0.00",
"currencyCode": "USD"
}
}
],
"type": "DEPOSIT",
"purpose": "DEPOSIT",
"sign": "+",
"traceNumber": "123456789",
"status": "PROCESSED",
"statusFailureReason": null,
"settlementDate": "2024-12-23",
"processedAt": "2024-09-13T10:16:30Z",
"failedAt": null,
"returnSentToBankAt": null
}
}
}
Originated ACH
To pull funds from an external bank account via an originated ACH transfer, your account holder must connect a verified external account.
Once an account holder connects a verified external account, refer to the following guidelines for adding funds using originated ACH transfers:
- For the
fromFinancialAccountIdfield, use the verified external account ID. - For the
toFinancialAccountIdfield, use the account holder financial account. - Optional - Use a boolean to request the transfer to use same day ACH.
Use the following mutation to initiate an originated ACH transfer:
InitiateAchTransfer-Originated-Deposit
Query
mutation InitiateAchTransfer($input: InitiateAchTransferInput!) {
initiateAchTransfer(input: $input) {
__typename
... on OriginatedAchTransfer {
id
amount {
value
currencyCode
}
createdAt
updatedAt
type
purpose
sign
sameDay
traceNumber
status
effectiveEntryDate
sentToBankAt
processedAt
fromFinancialAccount {
__typename
... on ExternalFinancialBankAccount {
id
name
}
}
toFinancialAccount {
__typename
... on FinancialAccount {
id
name
}
}
}
... on UserError {
errors {
code
description
errorPath
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{ "input": { "idempotencyKey": "00000000-0000-0000-0000-000000000000", "fromFinancialAccountId": "EXTERNAL_BANK_ACCOUNT_ID", "toFinancialAccountId": "FINANCIAL_ACCOUNT_ID", "purpose": "DEPOSIT", "amount": { "value": 10000, "currencyCode": "USD" }, "transferAgreementConsent": { "consentTimestamp": "2025-01-15T10:30:00.000Z", "authorizedPersonId": "AUTHORIZED_PERSON_ID", "template": { "consentTemplateId": "your-consent-template-id", "consentTemplateVersion": "1.0" } }, "companyEntryDescription": "DEPOSIT", "individualName": "John Doe", "sameDay": false } }
Result
{
"data": {
"initiateAchTransfer": {
"__typename": "OriginatedAchTransfer",
"id": "eftet_1234567890abcdef",
"amount": {
"value": 10000,
"currencyCode": "USD"
},
"createdAt": null,
"updatedAt": null,
"type": "PULL",
"purpose": "DEPOSIT",
"sign": "POSITIVE",
"sameDay": false,
"traceNumber": null,
"status": "PENDING",
"effectiveEntryDate": null,
"sentToBankAt": null,
"processedAt": null,
"fromFinancialAccount": {
"__typename": "ExternalFinancialBankAccount",
"id": "EXTERNAL_BANK_ACCOUNT_ID",
"name": "External Checking Account"
},
"toFinancialAccount": {
"__typename": "FinancialAccount",
"id": "FINANCIAL_ACCOUNT_ID",
"name": "Primary Account"
}
}
}
}
Transfer from product funding account
Some prepaid card products may require using your product funding account to fund an account holder's financial account. Use the following input variables to ensure money is moving in the correct direction:
toFinancialAccountId: Account holder's financial account IDfromFinancialAccountId: Product funding account ID
Use the following mutation to initiate a transfer from your product funding account:
initiateTransferFromFundingFinancialAccountToPaymentCardFinancialAccount
Query
mutation initiateTransferFromFundingFinancialAccountToPaymentCardFinancialAccount(
$input: InitiateTransferFromFundingFinancialAccountToPaymentCardFinancialAccountInput!
) {
initiateTransferFromFundingFinancialAccountToPaymentCardFinancialAccount(
input: $input
) {
__typename
... on InterFinancialAccountTransfer {
id
status
statusReason
createdAt
updatedAt
memo
amount {
value
currencyCode
}
}
... on UserError {
errors {
code
errorPath
description
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{ "input": { "toFinancialAccountId": "PRODUCT_FUNDING_ACCOUNT_ID", "fromFinancialAccountId": "ACCOUNT_HOLDER_FINANCIAL_ACCOUNT_ID", "memo": "Fund Financial Account #1", "amount": { "value": 10000, "currencyCode": "USD" } } }
Result
{
"data": {
"initiateTransferFromFundingFinancialAccountToPaymentCardFinancialAccount": {
"__typename": "InterFinancialAccountTransfer",
"id": "TRANSFER_ID",
"status": "PENDING",
"memo": "Fund Financial Account #1",
"statusReason": null,
"createdAt": "2021-12-27T22:26:55.102Z",
"updatedAt": "2021-12-27T22:26:55.127Z",
"amount": {
"value": 10000,
"currencyCode": "USD"
}
}
}
}
Fund load review
You can inform Highnote that a WireTransfer or Non originated fund load has been sent. Once the information has been reviewed, the funds will be applied to the FinancialAccount.
Request wire fund load to a financial account
Call initiateAddWiredFundsToFinancialAccount with a FinancialAccount ID, memo, and amount to start a wire fund load request.
You must specify a memo. This should be the same memo that appears in the bank account when the wire transfer occurs.
InitiateAddWiredFundsToFinancialAccount
Query
mutation InitiateAddWiredFundsToFinancialAccount(
$input: InitiateAddWiredFundsToFinancialAccountInput!
) {
initiateAddWiredFundsToFinancialAccount(input: $input) {
__typename
... on ReviewWorkflowEvent {
id
reviewState
createdAt
updatedAt
transfer {
__typename
... on WireTransfer {
id
type
}
}
reviewItem {
__typename
... on WireTransferReview {
toFinancialAccount {
__typename
id
}
memo
amount {
... on Amount {
currencyCode
value
}
}
externalIdentifier
}
}
}
... on UserError {
errors {
code
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{ "input": { "toFinancialAccountId": "ac_1", "memo": "240926-HNS", "idempotencyKey": "00000000-0000-0000-0000-000000000000", "amount": { "value": 500000, "currencyCode": "USD" }, "externalIdentifier": "an additional reference ID" } }
Result
{
"data": {
"initiateAddWiredFundsToFinancialAccount": {
"__typename": "ReviewWorkflowEvent",
"id": "mgwte_242cxm3q7wih4hb1be5ciem3o3m1sb6f31",
"reviewState": "PENDING",
"createdAt": "2025-01-23T21:13:41.685Z",
"updatedAt": "2025-01-23T21:13:41.707Z",
"transfer": null,
"reviewItem": {
"__typename": "WireTransferReview",
"toFinancialAccount": {
"__typename": "FinancialAccount",
"id": "ac_og2234f70e5e4e384f1ca1f52b26aab8e7b5"
},
"memo": "Initiate workflow approval for wire transfer",
"amount": {
"currencyCode": "USD",
"value": 999999
},
"externalIdentifier": "2b43fc97-2541-43fc-8dd6-6ab414ad0a48"
}
}
}
}
Query wire fund load request
Use the following to retrieve a wire fund load request:
NodeWireTransferApprovalEvent
Query
query nodeWireTransferApprovalEvent($id: ID!) {
node(id: $id) {
__typename
... on ReviewWorkflowEvent {
id
reviewState
createdAt
updatedAt
transfer {
__typename
... on WireTransfer {
__typename
id
memo
type
status
ledgers {
name
debitBalance {
value
}
creditBalance {
value
}
}
}
}
reviewItem {
__typename
... on WireTransferReview {
toFinancialAccount {
__typename
id
}
memo
amount {
value
currencyCode
}
externalIdentifier
}
}
}
}
}
Variables
{
"id": "mgwte_242cxm3q7wih4hb1be5ciem3o3m1sb6f31"
}
Result
{
"data": {
"node": {
"__typename": "ReviewWorkflowEvent",
"id": "mgwte_242cxm3q7wih4hb1be5ciem3o3m1sb6f31",
"reviewState": "COMPLETED",
"createdAt": "2025-01-23T21:13:41.685Z",
"updatedAt": "2025-01-23T21:14:17.886Z",
"transfer": {
"__typename": "WireTransfer",
"id": "wt_228ac20fb461a24394bb2083f5f4d25933",
"memo": "Initiate workflow approval for wire transfer",
"type": "INCOMING_WIRE_TRANSFER",
"status": "COMPLETED",
"ledgers": [
{
"name": "CASH",
"debitBalance": {
"value": 999999
},
"creditBalance": {
"value": 0
}
},
{
"name": "FUND_IN_HOLD",
"debitBalance": {
"value": 0
},
"creditBalance": {
"value": 0
}
},
{
"name": "FUND_IN_HOLD",
"debitBalance": {
"value": 0
},
"creditBalance": {
"value": 0
}
},
{
"name": "AVAILABLE_CASH",
"debitBalance": {
"value": 0
},
"creditBalance": {
"value": 999999
}
},
{
"name": "CREDIT_OUTSTANDING",
"debitBalance": {
"value": 999999
},
"creditBalance": {
"value": 0
}
},
{
"name": "AVAILABLE_CREDIT",
"debitBalance": {
"value": 0
},
"creditBalance": {
"value": 999999
}
}
]
},
"reviewItem": {
"__typename": "WireTransferReview",
"toFinancialAccount": {
"__typename": "FinancialAccount",
"id": "ac_og2234f70e5e4e384f1ca1f52b26aab8e7b5"
},
"memo": "Initiate workflow approval for wire transfer",
"amount": {
"value": 999999,
"currencyCode": "USD"
},
"externalIdentifier": "2b43fc97-2541-43fc-8dd6-6ab414ad0a48"
}
}
}
}