---
title: "Assess ACH Transfer Prerequisites"
method: POST
path: "/programs/{programCode}/transfers/assessment/ach"
tags: ["Transfers"]
---

# Assess ACH Transfer Prerequisites

`POST /programs/{programCode}/transfers/assessment/ach`

Verifies ACH Pull limits, frequency, delivery type, and bank account verification method for ACH authorization. Returns assessment results and any unmet requirements.

## Path parameters

- `programCode` string, required

## Headers

- `X-GD-RequestId` string, required

## Request body

- AssessACHRequest — Represents a request to assess the eligibility, risk, and prerequisites for an ACH (Automated Clearing House) transfer. Inherits all properties from Gd.Bos.DataTransfer.Request.CreateACHRequest and is used to validate and pre-check an ACH transfer before execution, including transfer type, endpoints, amount, device, user, and fraud data. This assessment helps ensure compliance, risk mitigation, and business rule validation prior to initiating the actual ACH transaction.
  - `transferIdentifier` string, nullable — Required: A unique identifier for the transfer. This value is generated by the client and used for idempotency and tracking.
  - `transferType` string, nullable — Required: The type of ACH transfer to perform. Valid values: "achOut" (move funds to an external bank account), "achPull" (pull funds from an external bank account).
  - `currency` string, nullable — Required: The ISO 4217 currency code for the transfer (e.g., "USD") in string.
  - `deviceType` 'Unknown' | 'Web' | 'IOS' | 'Android' — Required: The device type from which the transfer is initiated. Valid values: Unknown, Web, IOS, Android.
  - `verificationIdentifier` string, nullable — Optional: The identifier for the bank account verification process. Required for ACH Pull transfers when bank account verification is needed.
  - `userIdentifier` string, nullable — Optional: The unique identifier of the user initiating the transfer. Required for both ACH Out and ACH Pull transfers.
  - `transferRoute` TransferRoute — Represents the routing details and required data for initiating a transfer operation. Contains transaction amount, delivery type, source and target endpoints, recurring and verification details, and ACH-specific flags. Used to define and process the flow of funds between accounts or external endpoints, supporting ACH, purse-to-purse, and partner-to-account transfers.
    - `transactionAmount` number, double, nullable — The amount to be transferred in the transaction.
    - `deliveryType` string, nullable — The delivery type for the transfer (e.g., standard, expedited), as a string code.
    - `sourceTransferEndpoint` EndPoint — Represents the endpoint details for a transfer operation. Contains the type of transfer endpoint (such as account, purse, or program funding source) and, if applicable, the account identifier. Used to specify the source or destination in transfer workflows, except for ACH transfers with a bank account type.
      - `transferEndpointType` string, nullable — The type of transfer endpoint (e.g., "account", "purse", "programFundingSource"). Required except for ACH transfers with a bank account type.
      - `accountIdentifier` string, nullable — Conditional: The unique identifier of the account, present if the endpoint type is "account".
    - `targetTransferEndpoint` ACHEndPoint — Represents the ACH (Automated Clearing House) endpoint details required for ACH-based transfers. Contains encrypted or plain bank account information and a reference identifier for the bank account. Used to securely provide all necessary details for initiating or processing ACH transfers, supporting both encrypted and plain data flows.
      - `encryptedBankAccount` EncryptedData — Represents a container for encrypted data used in secure data transfer operations. Contains the encrypted payload and associated cryptographic metadata, including encryption version, ephemeral public key, and public key hash. Used to securely transmit sensitive information such as user data, ensuring confidentiality and integrity during transport.
        - `version` string, nullable — The version of the encryption algorithm used to encrypt the data (e.g., "v1", "v2").
        - `ephemeralPublicKey` string, nullable — The ephemeral public key used in the encryption process, typically for key exchange or session establishment.
        - `publicKeyHash` string, nullable — The hash of the public key used to verify the integrity and authenticity of the encryption key.
        - `data` string, nullable — The encrypted data payload, typically base64-encoded, containing the sensitive information.
      - `bankAccount` BankAccount — Container for bank account details.
        - `routingNumber` string, nullable — External bank routing number.
        - `accountNumber` string, nullable — External bank account number.
        - `bankName` string, nullable — External bank name.
        - `firstName` string, nullable — Customer first name.
        - `lastName` string, nullable — Customer last name.
        - `accountType` string, nullable — External bank account type.
        - `businessName` string, nullable — Business name.
      - `bankAccountReferenceId` string, nullable — Conditional: The reference identifier for the bank account, used to reference a previously stored or verified account. Used if consumed by ACH transfer type.
    - `recurringType` string, nullable — The type of recurring transfer, if applicable (e.g., "Monthly", "Weekly").
    - `bankAccountVerificationMethod` string, nullable — The method used to verify the bank account (e.g., "Instant", "MicroDeposit").
    - `bankAccountVerificationDate` string, nullable — The date when the bank account was verified, if applicable.
    - `bankAccountAuthorizationDate` string, nullable — The date when the bank account was authorized for transfers, if applicable.
    - `businessThirdPartyACH` boolean — Indicates whether the transfer is a business third-party ACH transaction.
  - `transferDescription` string, nullable — An optional description for the transfer, such as the purpose or reference for the transaction.

## Response `200`

OK

- AssessTransferResponse — Represents the response returned after assessing a funds transfer request. Provides information about account holders, available balance, applicable limits, fees, prerequisites, and the net amount for the transfer. Used to determine eligibility, compliance, and cost before executing a transfer.
  - `accountHolders` AccountHolderAssess[], nullable — A list of account holders involved in the transfer assessment. Each entry includes identifiers and KYC (Know Your Customer) gate status for eligibility checks.
    - `accountIdentifier` string, nullable — The unique identifier of the account associated with the account holder being assessed for MRDC eligibility.
    - `userIdentifier` string, nullable — The unique identifier of the user (account holder) being assessed for MRDC eligibility.
    - `pendingkycGate` string, nullable — The current pending KYC (Know Your Customer) gate or status for the account holder. Indicates if there are any outstanding KYC requirements that must be satisfied before MRDC transactions can proceed.
  - `availableBalance` number, double, nullable — The available balance in the source account at the time of assessment. Used to determine if sufficient funds are present to complete the transfer.
  - `limits` Limit[], nullable — A list of limits applicable to the transfer, such as daily, monthly, or per-transaction limits. Each limit includes type, frequency, minimum/maximum amounts, and remaining allowance.
    - `type` string, nullable — The type of limit (e.g., "Transfer", "Withdrawal", "Deposit").
    - `frequency` string, nullable — The frequency at which the limit applies (e.g., "Daily", "Monthly", "PerTransaction").
    - `minimumAmount` number, double — The minimum amount allowed for the operation, in the relevant currency.
    - `maximumAmount` number, double — The maximum amount allowed for the operation, in the relevant currency.
    - `amountRemaining` number, double, nullable — The remaining amount available under this limit for the current period or context.
    - `initialTransferDateTime` string, date-time, nullable — The date and time when the initial transfer or operation was performed, if applicable.
    - `subsequentTransferAllowed` boolean, nullable — Indicates whether subsequent transfers or operations are allowed after the initial one.
    - `count` integer, nullable — The number of times the operation has been performed or the count of transactions within the limit period.
  - `fees` AssessTransferFee[], nullable — A list of fees that will be applied to the transfer, including type, frequency, and amount.
    - `type` string, nullable — The type of fee being assessed (e.g., "Transaction", "Service", "Recurring").
    - `frequency` string, nullable — The frequency at which the fee is applied (e.g., "OneTime", "Monthly", "PerTransfer").
    - `amount` number, double — The amount of the fee to be assessed, in the relevant currency.
  - `prerequisites` string[], nullable — A list of prerequisite conditions that must be met before the transfer can proceed. If any prerequisites are returned, the customer must fulfill them to be eligible for the transfer.
  - `netAmount` number, double — The net amount that will be transferred after deducting all applicable fees.
  - `responseDetails` ResponseDetail[], nullable — Required: A list of response details providing status codes, descriptions, and additional information about the result of the operation.
    - `code` integer — The primary status or error code for the response (e.g., 200 for success, 400 for validation error).
    - `subCode` integer, nullable — An optional subcode providing more granular detail about the response or error.
    - `description` string, nullable — A human-readable description of the response, error, or status.
    - `url` string, nullable — A URL linking to documentation or a web page with more information about the response code.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `500` — Internal Server Error
- `503` — Service Unavailable

---

[API](https://skmtc.net/greendot/apis/baas-apis.md) · [All operations](https://skmtc.net/greendot/apis/baas-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/greendot/baas-apis/versions/666553766b78/schema)
