Add Funds to your Program Funding Account Balance
Overview
Card products have an underlying financial account called the product funding account. Like all financial accounts, the product funding account has its own associated set of ledgers. The ledgers for your product funding account differ based on your card product's vertical.
Funding your product funding account differs for Live and Test environments:
- Live environment: Your product funding account has an account and routing number, and may be funded via wire transfer from an external bank account.
- Test environment: You can Simulate Funding your Balance via Wire Transfer to test your integration.
Your product funding account's role depends on your card product vertical. The following table provides an overview of each card product vertical and its associated product funding account role:
| Card Product Vertical | Product Funding Account Role |
|---|---|
| Prepaid debit | Covers negative balances in account holder financial accounts and issues provisional credits |
| Charge | Backs the line of credit issued to financial accounts |
| Secured charge | Backs the line of credit issued to financial accounts |
| Fleet | Backs the line of credit issued to financial accounts |
| AP automation | Provides funds to account holder financial accounts via funds load |
| Prepaid | Provides funds to account holder financial accounts via funds load |
| Payroll | Provides payroll advance, covers negative balances in account holder financial accounts, and issues provisional credits |
Transfer methods
The speed and cost of transfer methods varies. The following table outlines the transfer methods available for product funding accounts, and the speed of each method:
| Transfer Method | Speed |
|---|---|
| Wire transfer | Same business day |
| Internal Highnote transfer | Within seconds |
Find your product funding account ID
To fund your product funding account in the Live environment, you will initiate a wire transfer outside of Highnote. This does not require knowing your product funding account ID.
To fund your product funding account using an internal Highnote transfer or to simulate a wire transfer in the Test environment, you must use your product funding account ID.
You can use the following query to find your product funding account ID using the Highnote API. In the response payload, the ID in the ProductFundingFinancialAccountFeature field is your product funding account ID:
GetCardProductWithAccounts
Query
query GetCardProductwithAccounts($id: ID!) {
node(id: $id) {
... on CardProduct {
__typename
id
name
usage
accounts {
edges {
node {
id
name
features {
__typename
enabled
}
accountStatus
owner {
__typename
}
}
}
}
}
}
}
Variables
{
"id": "CARD_PRODUCT_ID"
}
Result
{
"data": {
"node": {
"__typename": "CardProduct",
"id": "CARD_PRODUCT_ID",
"name": "Business Prepaid",
"usage": "MULTI_USE",
"accounts": {
"edges": [
{
"node": {
"id": "PRODUCT_FUNDING_ACCOUNT_ID",
"name": "Business Prepaid - Product Funding",
"features": [
{
"__typename": "ProductFundingFinancialAccountFeature",
"enabled": true
},
{
"__typename": "AchCapableFinancialAccountFeature",
"enabled": true
}
],
"accountStatus": "ACTIVE",
"owner": {
"__typename": "Organization"
}
}
},
{
"node": {
"id": "BALANCE_RESERVE_ACCOUNT_ID",
"name": "Business Prepaid - Negative Balance Reserve",
"features": [
{
"__typename": "NegativeBalanceReserveFinancialAccountFeature",
"enabled": true
}
],
"accountStatus": "ACTIVE",
"owner": {
"__typename": "Organization"
}
}
},
{
"node": {
"id": "PRODUCT_RESERVE_ACCOUNT_ID",
"name": "Business Prepaid - Product Reserve ",
"features": [
{
"__typename": "ProductReserveFinancialAccountFeature",
"enabled": true
}
],
"accountStatus": "ACTIVE",
"owner": {
"__typename": "Organization"
}
}
}
]
}
}
}
}
Simulate a wire transfer
In the Test environment, use the following mutation to simulate a wire transfer to fund your product funding account:
SimulateDeposit
Query
mutation SimulateDeposit($input: SimulateDepositInput!) {
simulateDeposit(input: $input) {
__typename
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "amount": { "value": 1500, "currencyCode": "USD" }, "toFinancialAccountId": "MC40LmFj", "memo": "", "source": "WIRE" } }
Result
{
"data": {
"simulateDeposit": {
"__typename": "Transfer"
}
},
"extensions": {
"requestId": "19070e66-2fd9-968a-94be-85c4836eae7b"
}
}
Find wire transfers
After a wire transfer is initiated, you can use the Highnote API to find incoming and outgoing wire transfers. The direction of a wire transfer is defined as follows:
- Incoming: Money is coming into a Highnote financial account via wire transfer.
- Outgoing: Money is leaving a Highnote financial account via wire transfer.
Incoming wire transfers
Use the following query to find an incoming wire transfer:
NodeWireTransfer
Query
query NodeWireTransfer($id: ID!) {
node(id: $id) {
__typename
... on WireTransfer {
id
amount {
value
currencyCode
}
createdAt
updatedAt
memo
type
status
financialAccount {
id
}
}
}
}
Variables
{
"id": "WIRE_TRANSFER_ID"
}
Result
{
"data": {
"node": {
"__typename": "WireTransfer",
"id": "WIRE_TRANSFER_ID",
"amount": {
"value": 2000,
"currencyCode": "USD"
},
"createdAt": "1970-01-01T00:01:00.000Z",
"updatedAt": "1970-01-01T00:02:00.000Z",
"memo": "This is an incoming wire transfer",
"type": "INCOMING_WIRE_TRANSFER",
"status": "COMPLETED",
"financialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
}
}
}
}
Outgoing wire transfers
Use the following query to find an outgoing wire transfer:
NodeWireTransfer
Query
query NodeWireTransfer($id: ID!) {
node(id: $id) {
__typename
... on WireTransfer {
id
amount {
value
currencyCode
}
createdAt
updatedAt
memo
type
status
financialAccount {
id
}
}
}
}
Variables
{
"id": "WIRE_TRANSFER_ID"
}
Result
{
"data": {
"node": {
"__typename": "WireTransfer",
"id": "WIRE_TRANSFER_ID",
"amount": {
"value": 2000,
"currencyCode": "USD"
},
"createdAt": "1970-01-01T00:01:00.000Z",
"updatedAt": "1970-01-01T00:02:00.000Z",
"memo": "This is an outgoing wire transfer",
"type": "OUTGOING_WIRE_TRANSFER",
"status": "COMPLETED",
"financialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
}
}
}
}
Find wire transfer reversals
Wire transfer reversals occur when a wire transfer has been reversed by Highnote's support team. In the event of a wire transfer reversal, a memo is left on the wire transfer to state the reason for the reversal. The direction of a wire transfer reversal is defined as follows:
- Incoming: An incoming wire transfer has been reversed by the Highnote support team.
- Outgoing: An outgoing wire transfer has been reversed by the Highnote support team.
Incoming wire transfer reversal
Use the following query to find an incoming wire transfer reversal:
NodeWireTransfer
Query
query NodeWireTransfer($id: ID!) {
node(id: $id) {
__typename
... on WireTransfer {
id
amount {
value
currencyCode
}
createdAt
updatedAt
memo
type
status
financialAccount {
id
}
}
}
}
Variables
{
"id": "WIRE_TRANSFER_REVERSAL_ID"
}
Result
{
"data": {
"node": {
"__typename": "WireTransfer",
"id": "WIRE_TRANSFER_REVERSAL_ID",
"amount": {
"value": 2000,
"currencyCode": "USD"
},
"createdAt": "1970-01-01T00:01:00.000Z",
"updatedAt": "1970-01-01T00:02:00.000Z",
"memo": "This is an incoming wire transfer reversal",
"type": "INCOMING_WIRE_TRANSFER_REVERSAL",
"status": "COMPLETED",
"financialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
}
}
}
}
Outgoing wire transfer reversal
Use the following query to find an outgoing wire transfer reversal:
NodeWireTransfer
Query
query NodeWireTransfer($id: ID!) {
node(id: $id) {
__typename
... on WireTransfer {
id
amount {
value
currencyCode
}
createdAt
updatedAt
memo
type
status
financialAccount {
id
}
}
}
}
Variables
{
"id": "WIRE_TRANSFER_REVERSAL_ID"
}
Result
{
"data": {
"node": {
"__typename": "WireTransfer",
"id": "WIRE_TRANSFER_REVERSAL_ID",
"amount": {
"value": 2000,
"currencyCode": "USD"
},
"createdAt": "1970-01-01T00:01:00.000Z",
"updatedAt": "1970-01-01T00:02:00.000Z",
"memo": "This is an outgoing wire transfer reversal",
"type": "OUTGOING_WIRE_TRANSFER_REVERSAL",
"status": "COMPLETED",
"financialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
}
}
}
}
Transfer funds from a financial account
Use the following mutation to transfer funds from a Highnote financial account to your product funding account. For input variables, use the following IDs:
toFinancialAccountId: Product funding account IDfromFinancialAccountId: Account holder's payment card financial account ID
initiateTransferFromPaymentCardFinancialAccountToFundingFinancialAccount
Query
mutation initiateTransferFromPaymentCardFinancialAccountToFundingFinancialAccount(
$input: InitiateTransferFromPaymentCardFinancialAccountToFundingFinancialAccountInput!
) {
initiateTransferFromPaymentCardFinancialAccountToFundingFinancialAccount(
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": "FINANCIAL_ACCOUNT_ID", "memo": "unload card", "amount": { "value": 5000, "currencyCode": "USD" } } }
Result
{
"data": {
"initiateTransferFromPaymentCardFinancialAccountToFundingFinancialAccount": {
"__typename": "InterFinancialAccountTransfer",
"id": "TRANSFER_ID",
"status": "COMPLETED",
"memo": "unload card",
"statusReason": null,
"createdAt": "2022-2-27T22:26:55.102Z",
"updatedAt": "2022-2-27T22:26:55.127Z",
"amount": {
"value": 5000,
"currencyCode": "USD"
}
}
}
}