Skip to main content

Simulate Repayments

Overview

test with dummy data

Do not enter production data in the Highnote Test environment, which is for exploring features and training. Use only dummy or test data.

Credit and charge card products use ACH transfers to drive repayments on the Highnote platform. For more information on repayments, see Schedule Repayments.

Simulating repayments in the Test environment requires the following steps:

  1. Creating a payment.
  2. Updating the status of the transfer.
  3. Processing a transfer.

This guide provides steps for simulating repayments in the Test environment.

Prerequisites

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 will be 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"
}
}

Update the transfer status

In the Test environment, you can change the status of a fund in transfer from NEW to PROCESSING using the transfer ID. The simulation will allow you to view the impacts to ledgers from initiating a transfer:

SimulateProcessingIntegratorInitiatedStatusChange
Query
mutation SimulateProcessingIntegratorInitiatedStatusChange(
$input: SimulateProcessingIntegratorInitiatedStatusChangeInput!
) {
simulateProcessingIntegratorInitiatedStatusChange(input: $input) {
__typename
... on IntegratorInitiatedFundsDepositACHTransfer {
id
amount {
currencyCode
value
}
createdAt
updatedAt

ledgers {
id
name
normalBalance
asOf
debitBalance {
value
currencyCode
}
creditBalance {
value
currencyCode
}
}
status {
__typename
... on NonFailureIntegratorInitiatedACHStatus {
status
}
... on FailureIntegratorInitiatedACHStatus {
status
statusReasonCode
}
}
fromFinancialAccount {
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on FinancialAccount {
id
name
}
}
companyName
descriptor {
companyEntryDescription
individualIdentificationNumber
individualName
}
companyIdentifier
settlementDate
}
... on UserError {
errors {
errorPath
code
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{
  "input": {
    "id": "ACH_TRANSFER_ID"
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"simulateProcessedIntegratorInitiatedStatusChange": {
"__typename": "SecureDepositACHTransfer",
"id": "ACH_TRANSFER_ID",
"amount": {
"currencyCode": "USD",
"value": 10000
},
"createdAt": "2022-04-21T19:15:43.441Z",
"updatedAt": "2022-04-21T19:18:37.369Z",
"ledgers": [
{
"id": "LEDGER_ID",
"name": "SECURED_DEPOSIT_PAYABLE",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 0,
"currencyCode": "USD"
},
"creditBalance": {
"value": 860300,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "ACH_PENDING_SETTLEMENT_OUT",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 860300,
"currencyCode": "USD"
},
"creditBalance": {
"value": 0,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "SECURED_DEPOSIT_RECEIVABLE",
"normalBalance": "DEBIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 860300,
"currencyCode": "USD"
},
"creditBalance": {
"value": 0,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "ACH_PENDING_SETTLEMENT",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 0,
"currencyCode": "USD"
},
"creditBalance": {
"value": 860300,
"currencyCode": "USD"
}
}
],
"status": {
"__typename": "NonFailureIntegratorInitiatedACHStatus",
"status": "PROCESSING"
},
"fromFinancialAccount": {},
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID",
"name": "first-account"
},
"companyName": "HIGHNOTEPLATFORM",
"descriptor": {
"companyEntryDescription": "entryDesc",
"individualIdentificationNumber": "",
"individualName": "indName"
},
"companyIdentifier": "1852922649",
"settlementDate": "2022-04-21T19:15:43.439Z"
}
},
"extensions": {
"requestId": "REQUEST_ID"
}
}

Process a transfer

In the Test environment, you can change the status of a fund in transfer from PROCESSING to PROCESSED using the transfer ID. The simulation will allow you to view the impacts to ledgers from processing a transfer:

SimulateProcessedIntegratorInitiatedStatusChange
Query
mutation SimulateProcessedIntegratorInitiatedStatusChange(
$input: SimulateProcessedIntegratorInitiatedStatusChangeInput!
) {
simulateProcessedIntegratorInitiatedStatusChange(input: $input) {
__typename
... on SecureDepositACHTransfer {
id
amount {
currencyCode
value
}
createdAt
updatedAt

ledgers {
id
name
normalBalance
asOf
debitBalance {
value
currencyCode
}
creditBalance {
value
currencyCode
}
}
status {
__typename
... on NonFailureIntegratorInitiatedACHStatus {
status
}
... on FailureIntegratorInitiatedACHStatus {
status
statusReasonCode
}
}
fromFinancialAccount {
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on FinancialAccount {
id
name
}
}
companyName
descriptor {
companyEntryDescription
individualIdentificationNumber
individualName
}
companyIdentifier
settlementDate
}
... on SecureCardBalanceRepaymentACHTransfer {
id
amount {
currencyCode
value
}
createdAt
updatedAt

ledgers {
id
name
normalBalance
asOf
debitBalance {
value
currencyCode
}
creditBalance {
value
currencyCode
}
}
status {
__typename
... on NonFailureIntegratorInitiatedACHStatus {
status
}
... on FailureIntegratorInitiatedACHStatus {
status
statusReasonCode
}
}
fromFinancialAccount {
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on FinancialAccount {
id
name
}
}
companyName
descriptor {
companyEntryDescription
individualIdentificationNumber
individualName
}
companyIdentifier
settlementDate
}
... on UserError {
errors {
errorPath
code
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{
  "input": {
    "id": "TRANSFER_ID"
  }
}
⚠️ Please login to execute queries. Visit the dashboard to authenticate.
Result
{
"data": {
"simulateProcessedIntegratorInitiatedStatusChange": {
"__typename": "SecureDepositACHTransfer",
"id": "TRANSFER_ID",
"amount": {
"currencyCode": "USD",
"value": 10000
},
"createdAt": "2022-04-21T19:15:43.441Z",
"updatedAt": "2022-04-21T19:18:37.369Z",
"ledgers": [
{
"id": "LEDGER_ID",
"name": "SECURED_DEPOSIT_PAYABLE",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 0,
"currencyCode": "USD"
},
"creditBalance": {
"value": 860300,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "ACH_PENDING_SETTLEMENT_OUT",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 860300,
"currencyCode": "USD"
},
"creditBalance": {
"value": 0,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "SECURED_DEPOSIT_RECEIVABLE",
"normalBalance": "DEBIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 860300,
"currencyCode": "USD"
},
"creditBalance": {
"value": 0,
"currencyCode": "USD"
}
},
{
"id": "LEDGER_ID",
"name": "ACH_PENDING_SETTLEMENT",
"normalBalance": "CREDIT",
"asOf": "2022-04-21T19:15:49.553Z",
"debitBalance": {
"value": 0,
"currencyCode": "USD"
},
"creditBalance": {
"value": 860300,
"currencyCode": "USD"
}
}
],
"status": {
"__typename": "NonFailureIntegratorInitiatedACHStatus",
"status": "PROCESSED"
},
"fromFinancialAccount": {},
"toFinancialAccount": {
"id": "FINANCIAL_ACCOUNT_ID",
"name": "first-account"
},
"companyName": "HIGHNOTEPLATFORM",
"descriptor": {
"companyEntryDescription": "entryDesc",
"individualIdentificationNumber": "",
"individualName": "indName"
},
"companyIdentifier": "1852922649",
"settlementDate": "2022-04-21T19:15:43.439Z"
}
},
"extensions": {
"requestId": "REQUEST_ID"
}
}

Automate your integration

To automate your integration, subscribe to ACH notification events.

The details provided in the payloads from this event can be used for the following use cases:

  • Automate your application or website's repayment workflows
  • Create account holder notifications or alerts
  • Create status views in your application or website