Initiate Many ACH Transfers from Own Account
This endpoint allows a customer to initiate multiple ACH transfers from their own Netevia financial account to external ACH-linked accounts in a single call. Each transfer in the batch is processed individually, and the response returns a result object per transfer. This endpoint requires two-factor authentication via a one-time code before any funds movement is executed.
Deprecated: This endpoint is marked as deprecated. Consider using the unified transfer endpoints for new integrations.
Endpoint
POST /api/fundsMovement/ACHTransferMany
Authentication
Bearer token required. Obtain via:
POST https://api.banking.netevia.dev/api/auth/v2
Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.
When to use
Use this endpoint when a customer needs to push funds from one of their Netevia financial accounts to multiple external ACH-linked accounts simultaneously, such as disbursing payroll, vendor payments, or other batch fund distributions. Because ACH transfers move funds out of the customer's account to external destinations, a one-time security code is required to authorize the batch. Each transfer is processed independently, so partial success is possible — always inspect each item in the response array.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| oneTimeCode | string | Yes | 6-digit numeric one-time security code used to authorize the operation. Must match pattern ^\d{6}$. |
| secureOperationType | string | Yes | The verification method used to generate the one-time code. Enum: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode. |
| transferRequests | array | No | Array of individual ACH transfer request objects. Each item is either a fundsWithdrawalACHTransferRequest or a unifiedTransferRequest. |
Each transfer request object (fundsWithdrawalACHTransferRequest) fields:
| Field | Type | Required | Description |
|---|---|---|---|
| fromFinancialAccountId | string | Yes | The ID of the Netevia financial account from which funds will be withdrawn. |
| toFinancialAccountId | string | Yes | The ID of the destination financial account (ACH-linked external account). |
| amount | integer | No | Transfer amount in cents (e.g., 5000 = $50.00). Must be between 1 and 4294967295. |
| currencyCode | integer | No | ISO 4217 numeric currency code. Only 840 (USD) is supported. |
| memo | string | No | Optional memo or note for the transfer. Maximum 1024 characters. |
Extended transfer request object (unifiedTransferRequest) additional fields:
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | No | Account type for the destination. Enum: Netevia, ACH. |
{
"oneTimeCode": "482916",
"secureOperationType": "ShortMessageCode",
"transferRequests": [
{
"fromFinancialAccountId": "fa_abc123def456",
"toFinancialAccountId": "fa_ext789ghi012",
"amount": 25000,
"currencyCode": 840,
"memo": "Vendor payment - Invoice #1042"
},
{
"fromFinancialAccountId": "fa_abc123def456",
"toFinancialAccountId": "fa_ext345jkl678",
"amount": 10000,
"currencyCode": 840,
"memo": "Contractor payout - June 2026",
"type": "ACH"
}
]
}Response
200 OK
Returns an array of result objects, one per transfer request submitted, in the same order as the input array.
| Field | Type | Description |
|---|---|---|
| id | string | The unique identifier of the created transfer, if successful. Null if the transfer failed. |
| response | string | A human-readable status or message describing the outcome of the individual transfer. |
| errorCode | integer | An error code integer if the transfer failed. Null or omitted on success. Refer to the platform error code table for meanings. |
[
{
"id": "txn_7x9mNqP3rLsW",
"response": "Success",
"errorCode": null
},
{
"id": null,
"response": "Insufficient funds",
"errorCode": 14
}
]Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields, invalid one-time code format, or validation error on one or more transfer fields |
| 401 | Bearer token missing, expired, or invalid |
| 403 | Insufficient permissions to initiate ACH transfers from the specified account |
| 404 | One or more financial account IDs not found |
| 500 | Internal server error |
Common Mistakes
- Providing a
oneTimeCodethat does not match the expected 6-digit numeric format — the pattern must be exactly^\d{6}$with no letters or spaces. - Submitting a
secureOperationTypethat does not match the method used to generate the one-time code (e.g., sendingTimeBasedCodebut the code was delivered via SMS asShortMessageCode). - Using a
fromFinancialAccountIdthat belongs to a different customer or does not have sufficient balance — each transfer is evaluated independently so the batch may partially succeed. - Setting
amountto zero or omitting it without confirming the platform default — the minimum valid amount is1(cent). - Not checking each item in the response array — a 200 status only means the request was received and processed; individual transfers may still have failed with their own
errorCode.
Related Endpoints
POST /api/fundsMovement/ACHTransfer— Initiate a single ACH transfer from own accountPOST /api/fundsMovement/InternalTransfer— Transfer funds between own Netevia financial accountsPOST /api/fundsMovement/InternalTransferMany— Initiate multiple internal transfers in a single requestPOST /api/auth/v2— Obtain a Bearer token for authenticationPOST /api/auth/refresh— Refresh an expiring Bearer token
Example
curl -X POST https://api.banking.netevia.dev/api/fundsMovement/ACHTransferMany \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"oneTimeCode": "482916",
"secureOperationType": "ShortMessageCode",
"transferRequests": [
{
"fromFinancialAccountId": "fa_abc123def456",
"toFinancialAccountId": "fa_ext789ghi012",
"amount": 25000,
"currencyCode": 840,
"memo": "Vendor payment - Invoice #1042"
},
{
"fromFinancialAccountId": "fa_abc123def456",
"toFinancialAccountId": "fa_ext345jkl678",
"amount": 10000,
"currencyCode": 840,
"memo": "Contractor payout - June 2026"
}
]
}'