Skip to main content

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 VerticalFunding Source
DebitFunded using Originated ACH transfers from an account holder's verified external bank account or Non-originated ACH transfer
ChargeFunded by the credit limit, which is backed by your product funding account balance
Secured chargeFunded using secured deposits sent via transfer from an account holder's verified external bank account
FleetFunded by the credit limit, which is backed by your product funding account balance
AP automationFunded using Non-originated ACH transfers
PrepaidFunded using internal Highnote transfers from your product funding account balance
PayrollFunded via external payroll or Non-originated ACH transfers

Transfer methods

transfer timelines

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 MethodTimeline
Originated ACHThree to five business days
Originated next day ACHOne to three business days
Originated same day ACHOne to two business days
Non-originated ACHThree to five business days
Internal Highnote transferWithin 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"
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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

test with dummy data

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"
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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 fromFinancialAccountId field, use the verified external account ID.
  • For the toFinancialAccountId field, 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
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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 ID
  • fromFinancialAccountId: 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"
    }
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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"
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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"
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
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"
}
}
}
}