Initiate many ACH transfers from own account

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

FieldTypeRequiredDescription
oneTimeCodestringYes6-digit numeric one-time security code used to authorize the operation. Must match pattern ^\d{6}$.
secureOperationTypestringYesThe verification method used to generate the one-time code. Enum: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode.
transferRequestsarrayNoArray of individual ACH transfer request objects. Each item is either a fundsWithdrawalACHTransferRequest or a unifiedTransferRequest.

Each transfer request object (fundsWithdrawalACHTransferRequest) fields:

FieldTypeRequiredDescription
fromFinancialAccountIdstringYesThe ID of the Netevia financial account from which funds will be withdrawn.
toFinancialAccountIdstringYesThe ID of the destination financial account (ACH-linked external account).
amountintegerNoTransfer amount in cents (e.g., 5000 = $50.00). Must be between 1 and 4294967295.
currencyCodeintegerNoISO 4217 numeric currency code. Only 840 (USD) is supported.
memostringNoOptional memo or note for the transfer. Maximum 1024 characters.

Extended transfer request object (unifiedTransferRequest) additional fields:

FieldTypeRequiredDescription
typestringNoAccount 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.

FieldTypeDescription
idstringThe unique identifier of the created transfer, if successful. Null if the transfer failed.
responsestringA human-readable status or message describing the outcome of the individual transfer.
errorCodeintegerAn 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

CodeWhen it happens
400Missing required fields, invalid one-time code format, or validation error on one or more transfer fields
401Bearer token missing, expired, or invalid
403Insufficient permissions to initiate ACH transfers from the specified account
404One or more financial account IDs not found
500Internal server error

Common Mistakes

  • Providing a oneTimeCode that does not match the expected 6-digit numeric format — the pattern must be exactly ^\d{6}$ with no letters or spaces.
  • Submitting a secureOperationType that does not match the method used to generate the one-time code (e.g., sending TimeBasedCode but the code was delivered via SMS as ShortMessageCode).
  • Using a fromFinancialAccountId that belongs to a different customer or does not have sufficient balance — each transfer is evaluated independently so the batch may partially succeed.
  • Setting amount to zero or omitting it without confirming the platform default — the minimum valid amount is 1 (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 account
  • POST /api/fundsMovement/InternalTransfer — Transfer funds between own Netevia financial accounts
  • POST /api/fundsMovement/InternalTransferMany — Initiate multiple internal transfers in a single request
  • POST /api/auth/v2 — Obtain a Bearer token for authentication
  • POST /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"
      }
    ]
  }'
Body Params
string
required
length ≥ 1
^\d{6}$
string
enum
required
Allowed:
transferRequests
array | null
transferRequests
Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
string
enum
Defaults to application/json

Generated from available request content types

Allowed:
Response

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
text/plain
application/json
text/json