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 Node {
id
}
... on FinancialAccount {
id
}
}
toFinancialAccount {
... on Node {
id
}
... 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 Node {
id
}
... 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 Node {
id
}
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on Node {
id
}
... 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": {
"id": "<FINANCIAL_ACCOUNT_ID>",
"name": "source-account"
},
"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 Node {
id
}
... 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 Node {
id
}
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on Node {
id
}
... 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 Node {
id
}
... on FinancialAccount {
id
name
}
}
toFinancialAccount {
... on Node {
id
}
... 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": {
"id": "<FINANCIAL_ACCOUNT_ID>",
"name": "source-account"
},
"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