ACH
ACH APIs can be used for ACH transfers.
ACH API Endpoints
This endpoint only allows the creation of an ACH Out or ACH Pull transfer, to move funds to and from an external bank account. Daily limits can be configured for ACH Out transfers. However, daily limits are not mandatory for ACH Out. Note: For achOut and achPull transfers, Green Dot is the Originating Depository Financial Institution (ODFI).
When a valid ACH transfer is requested, an ACH transfer webhook will always be published unless there is a system failure. Refer to ACH Return Codes for details. Transaction Webhooks contain information on when the achOut or achPull is posted to the account. However, a Transaction webhook may not always be published. Refer to Event Type: Transactions for details.
This API is affected by Joint Accounts as applicable. For Joint Account scenarios, there is an added request validation. When transfer type is achPull / achOut for joint accounts, userIdentifier field is required, if missing this property will get error response.
API Call Structure
POST /programs/{programCode}
/transfers/ach
ACH Limits
Note: When executing a POST /programs/{programCode}
/transfers/ach request where the transferType is “achOut”, the following limits will be enforced for ACH Out transfers. Consult with your onboarding liaison to confirm your limits.
Partner | Limit Type | Frequency | Example Amount |
---|---|---|---|
Acme Debit | ACH Out Minimum Transfer Limit | Per Use | 1 |
ACH Out Velocity Limit | Last 7 Days | 20000 | |
ACH Out Maximum Transaction Limit | Per Use | 3000 |
When one of the limits above is exceeded, the following code/sub-code will be returned.
Note: If the customer’s balance is below the minimum threshold then they will be allowed to transfer out the remaining balance.
ACH Availability
Schedule Times | Funding Date | Delivery Flag | Error |
---|---|---|---|
Before 10:10am | Same Day | 1 | |
After 10:10am | Return error | ||
Before 9:45pm | Next Business Day | 2 | |
After 9:45pm | 2 Business Days | ||
Before 9:45pm | 3 Business Days | 3 | |
After 9:45pm | 4 Business Days | ||
Before 9:45pm | 4 Business Days | 4 | |
After 9:45pm | 5 Business Days |
Note: The above times are in PT.
Expected Delivery Date/Time (EDD)
ACH Out/ACH Pull | Time of Request | Date of Request | Expected Delivery Date/Time (EDD) | Delivery Type |
---|---|---|---|---|
ACH Out |
Time of Request is before 10:15AM PT cutoff |
On a weekday and non-banking holiday |
Same day of request (no time set). Example: 2019-11- 18T00:00:00 |
N/A. Delivery Type does not apply to ACH Out. |
ACH Out |
Time of Request is before 10:15AM PT cutoff |
On a weekday or weekend and non-banking holiday |
Next business day (no time set). Example: 2019-11- 18T00:00:00 |
N/A. Delivery Type does not apply to ACH Out. |
ACH Pull |
Time of Request is before 10:15AM PT cutoff |
On a weekday and non-banking holiday |
Same day as request, at 21:00 PT |
Delivery Type Option: |
ACH Pull |
Anytime |
Any Day |
9:00PM PT and date available depends on chosen deliveryType. Example: If deliveryType is three business days, the EDD will be three business days after the first requested business day, at 21:00 PT. |
Delivery Type Options: |
Note: Delivery Type does not apply to ACH Out. It only applies to ACH pull when the credit will be funded to BaaS accounts.
NACHA guidelines
- Per NACHA guidelines, Green Dot is required to do the following:
- Include an RDFI indicator within the NACHA file, for partners who submit recurring ACH transfers.
- Provide external banks with the successful bank account verification method and date when debit authorizations are requested.
- Provide supporting evidence that the customer (user) authorized the ACH transfer.
- To meet these guidelines, Partners will now need to provide an optional recurringType for all ACH Transfers.
Options for the recurringType are:- “R” for Recurring Payment
- “S” for Single Payment (one-time payment).
- If the recurringType is provided and does not contain one of these options, the following error will be received:
- HTTP Status: 400
- Code: 600
- Description: Invalid value provided for
<property name here>
.
- If the recurringType is not provided the system will treat it as a one-time payment.
ACH Joint Account Scenario
For ACH Joint Account scenarios, there is an added request validation. When transfer type is achPull / achOut for joint accounts, the userIdentifier field is required,. If missing, this property will get error response.
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | wf | This value identifies the program type of the account to be created. |
Headers
Header name | Type | Value | description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Authorization | bearer token | varies | The token received from GD. |
Request Sample
{
"transferIdentifier": "43445b58-87d5-4932-a49e-9910ab0f51b0",
"userIdentifier": "6F40110D-99B3-4091-8F7F-05AEBBC229D8", // Optional for Individual Accounts and REQUIRED for Joint Accounts
"transferType": "achOut",
"currency": "USD",
"transferRoute": {
"transactionAmount": 5.1,
"sourceTransferEndpoint": {
"transferEndpointType": "account",
"accountIdentifier": "fd7767c1-76e3-445a-a6a5-4e9492777e69"
},
"targetTransferEndpoint": {
"encryptedBankAccount": {
"version": "EC_v1",
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD",
"publicKeyHash": "kMhnzB6afrTdRvVFjhOQ5kjUTrPKvkygSCZQXQzNHYo=",
"data": ""
}
},
"recurringType": "",
"bankAccountVerificationMethod": "",
"businessThirdPartyACH": true
},
"fraudData": {}
}
Webhook
ACH Transfer Joint Account Webhook
ACH Notification of Change (NOC)
Green Dot needs to be able to process ACH Notification of Change (NOC) requests received from the Federal Reserve (Fed). An ACH NOC is created by a Receiving Depository Financial Institution (RDFI) to notify the Originating Depository Financial Institution (ODFI) that the account information included in the ACH is incorrect and needs to be changed.
When ACH NOC requests are received from the Fed, subsequent ACH transfer requests using the incorrect account number or routing number included in the ACH requests will be declined.
Partners can be configured to receive NOC Alert webhook notifications when a NOC is received for their program.
See ACH NOC Alert Webhook for details.
Sample achPull Request Body (Account with a NOC Return Code)
{
"transferIdentifier":"8aac3be4-b190-4d97-9b31-d5211cdb58d7",
"transferType":"achPull",
"currency":"USD",
"transferRoute":{
"transactionAmount":10,
"sourceTransferEndpoint":{
"transferEndpointType":"account",
"accountIdentifier":"407da696-4141-410d-9674-d466626f788a"
},
"targetTransferEndpoint":{
"encryptedBankAccount":{
"version":"EC_v1",
"ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESot1Hj2OHD4AW9jZ39EW95SodW0Tgxg25c2omHC4tPzf+KWKNN81Gzw8K1ObbXbhaPDQqF3/okCKsBeKsdIHEg==",
"publicKeyHash":"1YPiscLswrzhpxDdW2LvYTwKmzImy922OQ5HMcmoL9E=",
"data":"IyHe0snwpL7kCx73YKND/ITLS4o2fCsA7xjGpWRCkEl/3XDgva4nzA6je17f73zUYrX3zfnJkKdnyFUVfZCVWPv5Sy9fodKwRcNhBouskBpxHSAwt8stZz6LvXGGOxLqzDuEG3b8Oz6ouNJA60qA5XqWDu/Wbdf1sElsWwk/S6vfxfuECbJQZP6U6FqD8SUS5QLJ87h3cOJ/RGlJrzk0vyqSHtT0enrDHzbvWLjOSIN3IQ=="
}
},
"recurringType":""
},
"fraudData":{
}
}
Sample achOut Request Body (Account with a NOC Return Code)
{
"transferIdentifier":"9d61b996-fb2c-4c51-8cb8-bfb34739f15a",
"transferType":"achOut",
"currency":"USD",
"transferRoute":{
"transactionAmount":10,
"sourceTransferEndpoint":{
"transferEndpointType":"account",
"accountIdentifier":"0b7725b9-5dfc-4972-a465-ab8f889d16a0"
},
"targetTransferEndpoint":{
"encryptedBankAccount":{
"version":"EC_v1",
"ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFNGxyj9sLVL/JoGXyeZlseahA3nFWnFgNT/Er13EpHRVXgIg+H+B8F0AP13oyz5aAobyiZ1bHP6vq5qO0hTzUA==",
"publicKeyHash":"1YPiscLswrzhpxDdW2LvYTwKmzImy922OQ5HMcmoL9E=",
"data":"hqw0qkuVY8O7f6sCbxU2MoyShvRAXGqKlbT57FoZ0Y0TZkay0BTsvjrmkUb3w3VCa573Ih//2f//mfBOhH6I/AL7/Vj6ZXnQ/IspM8hrGXfHCX2TsGyTHJ1ElwcJ0WTT1aDGTFWNon+b+LJz6eQUdt185P+7SopAQKhSrdXxNuE3w9ctZyu2FKZK7SL970wHpchlo3RcQ0QK+jtl2vZUmWp/H2gt6Ex6V21p0MQ8zcExDg=="
}
},
"recurringType":""
},
"fraudData":{
}
}
Sample Response
{
"transfer":{
},
"responseDetails":[
{
"code":3,
"subCode":216,
"description":"The transfer was initiated by an account that has previously received a NOC return. Corrected account information must be submitted.",
"url":"http://tbd"
}
]
}
Response Codes
Transfers for “Restricted” and “Closed” accounts are never allowed for inbound transfers. Outbound transfers on “Restricted” accounts, are not allowed unless there is a spend down or customer Initiated spend down involved. Outbound transfers for “Closed” Accounts may or may not be allowed depending on product or program specific rules.
Scenario | Code | subCode | Description |
---|---|---|---|
If the user attempts a transfer while their account is in restricted or closed status, one of these responses will be returned. | 3 | 100 | This account is in a restricted state that does not allow inbound or internal transfers. |
If the user attempts a transfer while their account is in restricted or closed status, one of these responses will be returned. | 3 | 100 | This account is in a restricted state that does not allow outbound transfers. |
If the user attempts a transfer while their account is in restricted or closed status, one of these responses will be returned. | 3 | 105 | A transfer is not allowed for a closed account. |
Transfer exceeds monthly $20K limit | 3 | 212 | Exceeds rolling limit for subsequent ACH Pull monthly transfer. |
Transfer exceeds daily Ach Pull limit. | 3 | 216 | Transfer exceeds daily Ach Pull limit. |
Green Dot have prior received a Notice of Change for this account. Transfer not allowed with this information | 3 | 310 | The transfer was initiated by an account that has previously received a NOC return. Corrected account information must be submitted |
The accountNumber provided in the encrypted bankAccount data, does not meet the length requirement of 1 to 17 digits. | 3 | 201 | Invalid ACH Account Number |
All Transfer requests will be verified by the Green Dot fraud system. As a result, a transfer could be declined, and additionally, the accountStatus/statusReasons could be updated to potential or confirmed fraud state. In the latter case, an event notification/webhook (accountUpdate alert) would be published. See Webhooks for more details. In this scenario, the transfer is declined. | 3 | 110 | The transfer was declined by a fraud system check |
ACH Out transaction amount below minimum allowed Note: For some transfers, a minimum transfer amount is required - often $1.00. | 3 | 115 | ACH Out transaction amount below minimum allowed |
ACH Out maximum transaction amount exceeded | 3 | 114 | ACH Out maximum transaction amount exceeded |
ACH Out velocity limit exceeded | 3 | 113 | ACH Out velocity limit exceeded |
Retrieves the expected funding date and time (achDeliveryDate) for ACH Pull transfers. Requires transfer type, optional schedule date, and delivery type. Returns the expected funding date for the transfer.
API Call Structure
GET /programs/{programCode}
/DeliveryDate
This endpoint allows the retrieval of a list of transfers for an account.
Note: The maximum number of transfers in a list is 180 per request.
API Call Structure
GET /programs/{programCode}
/accounts/{accountIdentifier}
/ACHTransfers
Appendices
Direct Deposit Rules
When both debits and credits are allowed, there will not be a return code.
Value (Account Status) | Description | Allow DD (Credits) | Allow DD (Debits) | Return Code |
---|---|---|---|---|
Normal | Any Reason | Yes | Yes | |
Closed | Any Reason | No | No | R 02 |
Locked | Any Reason | No | No | R 02 |
Pending | Any Reason | No | No | R 03 |
Restricted | Account Under Review | Yes | Yes | |
Restricted | Potential Fraud | Yes | No | R 02 |
Restricted | Customer Initiated Spend Down | No | Yes | R 02 |
Restricted | Spend Down | No | No | R 02 |
Restricted | Write Off | Yes | No | R 02 |
Restricted | Changed by CSR | No | No | R 02 |
ACH Categories
ACH Category | Value Returned in Transaction Schema |
---|---|
State Tax Refund | str |
Federal Tax Refund | ftr |
Tax Refund Loan | trl |
Goverment Benefits | gb |
Child Support | cs |
Internet Transfer | it |
Payroll | pr |
Unknown | uk |
SPECIAL | spc |
Commercial | com |
Other Pay | opy |
Unemployment | ui |
Pension | pn |
ACH Return Codes
ACH Return Code | Description |
---|---|
1 | ACH Transaction exceed load limit |
2 | ACH Account was closed |
3 | ACH Transaction has invalid ACHTranCode |
4 | ACH Customer Account Not Found |
5 | ACH Direct Deposit Not Allowed on This Account |
6 | ACH Card Not Activated |
9 | ACH Transaction was Temp Card Without Perso |
10 | ACH Transaction was NPNR |
11 | ACH Transaction has CRV blocked |
12 | ACH Transaction was rejected by card processor |
13 | ACH Transaction debit funding response insufficient funds |
14 | ACH Debit funding response reject (General) |
15 | ACH Credit funding response reject (General) |
16 | ACH Debit Transaction was rejected per the Durbin Amendment |
17 | TaxRefundReject-IRS#800-829-1954 |
18 | TaxRefundReject-IRS#800-829-1954 |
19 | Tax Refund Reject: Non-Tax Season |
20 | Tax Refund Reject: Payee Deceased |
21 | ACH transaction is sent from prohibited sender |
22 | Invalid Routing Number |
23 | TaxRefundReject-IRS#800-829-1954 |
24 | ACH Transaction is voided and exported by rule |
25 | Invalid CardExternalId |
26 | ACH transaction exceeded the daily debit limit |
27 | AccountNow ACH Transaction is funding via FIS |
28 | ACH Transaction rejected due customer name/ssn mismatch |
29 | ACH Transaction rejected due customer name/ssn mismatch |
30 | ACH Transaction rejected during non-tax season |
31 | ACH Transaction rejected due to credit rating |
32 | Account Locked |
33 | Spend Down |
34 | Write Off |
35 | Changed by CSR |
Updated about 19 hours ago