Skip to main content

Schedule Repayments

Overview

This guide covers how to set up one-time and recurring payment schedules for account holders.

The Automated Clearing House (ACH) is an electronic funds transfer network that facilitates interbank transfers. Highnote utilizes ACH to send money from an account holder’s external bank account to their Highnote financial account when scheduling payments. The movement of funds using ACH typically takes three to five business days.

For credit card products, it's important to provide cardholders with the ability to make payments toward outstanding balances or debts. The following payment options are available:

  • Recurring payments
  • One-time payments

Repayment rules

The rules for repayments on credit products, and loading funds on prepaid products, are as follows:

ProductFinancialAccountStatus
CreditCan repay with a financial account in any state except CLOSED
PrepaidCan only load funds with a financial account in the ACTIVE state

Payment schedules

info

For credit products, you can repay in any state except CLOSED. For prepaid products, you can only load funds in the ACTIVE state.

Refer to the following guidelines when creating payment schedules.

Scheduling payments

To avoid a late payment, initiate the payment on or before the due date.

ScheduledInitiatedProcessed
Before 3 PM ETSame calendar daySame calendar day
Before 11 PM ETSame calendar dayNext business day
Weekends & bank holidaysSame calendar dayNext business day
Payment stages
StageResult
InitiationA pending credit is recorded on the account holder's financial account
ProcessingThe payment clears in 3-5 business days after processing
PostingThe payment posts to the financial account after the funds have cleared
On-time payments

Depending on your program's credit policies, the available credit on a financial account may not be released until a payment has posted.

Tips to avoid late payments

Communicate the following to help your cardholders avoid late payments, fees, or impacts to their credit:

  • Plan ahead: Schedule payments at least 3-5 business days before the due date to account for processing time.
  • Consider bank holidays: Be mindful of weekends and bank holidays, as these can delay payment processing.
  • Monitor pending credits: Check your account to ensure the pending credit is recorded after initiating a payment.

Create recurring payment schedule

info

Scheduled payments are initiated by the account holder. You can not schedule payments for account holders in the Live environment.

Recurring payments occur on a set frequency and can be scheduled based on the outstanding balance or current amount due. In the Test environment, a transfer ID is generated within 5 minutes of scheduling a payment on the current date.

Use the findScheduledTransferEvent query to find a transfer event ID and simulate changing the transfer status:

CreateRecurringAchTransfer
Query
mutation CreateRecurringAchTransfer($input: CreateRecurringACHTransferInput!) {
createRecurringACHTransfer(input: $input) {
... on RecurringACHTransfer {
id
fromFinancialAccount {
... on FinancialAccount {
id
}
}
toFinancialAccount {
... on FinancialAccount {
id
}
}
frequency
balanceAmountType
descriptor {
companyEntryDescription
individualName
individualIdentificationNumber
}
transferAmount {
... on TransferAmountCalculation {
calculatedType
}
}
status
nextScheduledTransferDate
createdAt
updatedAt
}
... on UserError {
errors {
errorPath
description
code
}
}
}
}
Variables
{
  "input": {
    "fromFinancialAccountId": "EXTERNAL_BANK_ACCOUNT_ID",
    "toFinancialAccountId": "FINANCIAL_ACCOUNT_ID",
    "frequency": "MONTHLY",
    "transferAmountStrategy": {
      "balanceAmountType": "OUTSTANDING_BALANCE"
    },
    "descriptor": {
      "companyEntryDescription": "CompanyDes",
      "individualName": "IndivName",
      "individualIdentificationNumber": "112345"
    },
    "transferDayOfMonth": 3,
    "transferAgreementConsent": {
      "consentTimestamp": "2022-02-09T17:10:55.662Z",
      "authorizedPersonId": "AUTHORIZED_PERSON_ID",
      "template": {
        "consentTemplateId": "your-template-id",
        "consentTemplateVersion": "0"
      }
    }
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"id": "SCHEDULED_TRANSFER_ID",
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
},
"fromFinancialAccount": {
"id": "EXTERNAL_BANK_ACCOUNT_ID"
},
"frequency": "MONTHLY",
"balanceAmountType": "OUTSTANDING_BALANCE",
"descriptor": {
"companyEntryDescription": "CompanyDes",
"individualName": "IndivName",
"individualIdentificationNumber": "112345"
},
"transferAmount": {
"calculatedType": "OUTSTANDING_BALANCE"
},
"status": "SCHEDULED",
"nextScheduledTransferDate": "2022-03-09T00:00:00.000Z",
"createdAt": "2022-02-09T17:10:56.662Z",
"updatedAt": "2022-02-09T17:10:56.662Z"
}
}

Create a one-time payment

info

Scheduled payments are initiated by the account holder. You can not schedule a payment for an account holder in the Live environment.

One-time payments can be scheduled based on a balance amount or a custom amount. A scheduled payment will not be initiated if the financial account has an OUTSTANDING_BALANCE less than or equal to $0.

In the Test environment, a transfer ID is generated within 5 minutes of scheduling a payment for today. Use the findScheduledTransferEvent query to find a transfer event ID and simulate changing the status of the transfer:

CreateOneTimeAchTransfer
Query
mutation CreateOneTimeAchTransfer($input: CreateOneTimeACHTransferInput!) {
createOneTimeACHTransfer(input: $input) {
... on OneTimeACHTransfer {
id
fromFinancialAccount {
... on FinancialAccount {
id
}
}
toFinancialAccount {
... on FinancialAccount {
id
}
}
descriptor {
companyEntryDescription
individualName
individualIdentificationNumber
}
transferAmount {
... on ManualTransferAmount {
amount {
value
currencyCode
}
}
}
status
scheduledTransferDate
createdAt
updatedAt
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{
  "input": {
    "fromFinancialAccountId": "EXTERNAL_BANK_ACCOUNT_ID",
    "toFinancialAccountId": "FINANCIAL_ACCOUNT_ID",
    "descriptor": {
      "companyEntryDescription": "CompanyDes",
      "individualName": "IndivName",
      "individualIdentificationNumber": "112345"
    },
    "transferAmountStrategy": {
      "transferAmount": {
        "value": "9900",
        "currencyCode": "USD"
      }
    },
    "transferDate": "2023-03-11",
    "transferAgreementConsent": {
      "consentTimestamp": "2022-03-10T17:10:55.662Z",
      "authorizedPersonId": "AUTHORIZED_PERSON_ID",
      "template": {
        "consentTemplateId": "your-template-id",
        "consentTemplateVersion": "0"
      }
    }
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"id": "SCHEDULED_TRANSFER_ID",
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
},
"fromFinancialAccount": {
"id": "EXTERNAL_BANK_ACCOUNT_ID"
},
"descriptor": {
"companyEntryDescription": "CompanyDes",
"individualName": "IndivName",
"individualIdentificationNumber": "112345"
},
"transferAmount": {
"amount": {
"value": "9900",
"currencyCode": "USD"
}
},
"status": "SCHEDULED",
"scheduledTransferDate": "2022-03-09T00:00:00.000Z",
"createdAt": "2022-02-09T17:10:56.662Z",
"updatedAt": "2022-02-10T17:10:56.662Z"
}
}

Cancel a payment schedule

info

To cancel a payment, you must do so before it is initiated, and before 9:00 AM ET on the day it is scheduled. If you attempt to cancel a recurring payment that has already been initiated, the current payment cannot be stopped, but all future payments on the recurring schedule will be canceled.

Both one-time and recurring payment schedules can be canceled. To change a payment schedule (e.g., date, amount, or external bank account), you must first cancel the original scheduled payment and then create a new one-time or recurring payment schedule.

Use the following mutation to cancel a payment:

CancelScheduledTransfer
Query
mutation CancelScheduledTransfer($input: CancelScheduledTransferInput!) {
cancelScheduledTransfer(input: $input) {
... on RecurringACHTransfer {
id
fromFinancialAccount {
... on FinancialAccount {
id
}
}
toFinancialAccount {
... on FinancialAccount {
id
}
}
frequency
descriptor {
companyEntryDescription
individualName
individualIdentificationNumber
}
transferAmount {
... on TransferAmountCalculation {
calculatedType
}
}
status
nextScheduledTransferDate
createdAt
updatedAt
}
}
}
Variables
{
  "input": {
    "scheduledTransferId": "SCHEDULED_TRANSFER_ID"
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"id": "SCHEDULED_TRANSFER_ID",
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
},
"fromFinancialAccount": {
"id": "EXTERNAL_BANK_ACCOUNT_ID"
},
"frequency": "MONTHLY",
"descriptor": {
"companyEntryDescription": "CompanyDes",
"individualName": "IndivName",
"individualIdentificationNumber": "112345"
},
"transferAmount": {
"calculatedType": "OUTSTANDING_BALANCE"
},
"status": "CANCELED",
"nextScheduledTransferDate": null,
"createdAt": "2022-02-09T17:10:56.662Z",
"updatedAt": "2022-02-10T17:10:56.662Z"
}
}

Find a scheduled payment

Use the following query to find a scheduled payment. You can use this query to display scheduled payments in your website or application:

findScheduledTransfer
Query
query findScheduledTransfer($id: ID!) {
node(id: $id) {
... on RecurringACHTransfer {
id
fromFinancialAccount {
... on FinancialAccount {
id
}
}
toFinancialAccount {
... on FinancialAccount {
id
}
}
frequency
balanceAmountType
descriptor {
companyEntryDescription
individualName
individualIdentificationNumber
}
transferAmount {
... on TransferAmountCalculation {
calculatedType
}
}
status
nextScheduledTransferDate
createdAt
updatedAt
}
}
}
Variables
{
"id": "SCHEDULED_TRANSFER_ID"
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"node": {
"id": "SCHEDULED_TRANSFER_ID",
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID"
},
"fromFinancialAccount": {
"id": "EXTERNAL_BANK_ACCOUNT_ID"
},
"frequency": "MONTHLY",
"descriptor": {
"companyEntryDescription": "CompanyDes",
"individualName": "IndivName",
"individualIdentificationNumber": "112345"
},
"transferAmount": {
"calculatedType": "OUTSTANDING_BALANCE"
},
"status": "ACTIVE",
"nextScheduledTransferDate": "2022-03-09T00:00:00.000Z",
"createdAt": "2022-02-09T17:10:56.662Z",
"updatedAt": "2022-02-09T17:10:56.662Z"
}
}
}

Simulate repayments

To simulate repayments in the Test environment, see Simulate Repayments.