Initiate Batch Transfer
The Batch Transfer endpoint allows you to submit multiple individual transfer requests in one API call, each processed independently. Transfers can be either internal (between Netevia financial accounts) or ACH (to/from externally linked accounts). Each transfer in the batch requires source and destination account IDs, an amount, and a currency code. The entire batch request must be authenticated with a one-time verification code.
Endpoint
POST /api/fundsMovement/batch/transfer
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 you need to execute several transfers simultaneously — for example, disbursing funds to multiple business subprofile accounts, processing payroll distributions, or settling balances across a set of accounts in a single operation. Each transfer in the batch is evaluated independently, so partial success is possible. This endpoint requires step-up authentication via a one-time code, making it suitable for high-value or sensitive bulk operations.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| oneTimeCode | string | Yes | 6-digit numeric one-time verification code. Must match pattern ^\d{6}$. |
| secureOperationType | string | Yes | Verification method used. Enum: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode. |
| transferRequests | array | No | Array of individual transfer request objects. See transfer request fields below. |
Transfer Request Object (transferRequests[])
| Field | Type | Required | Description |
|---|---|---|---|
| fromFinancialAccountId | string | Yes | ID of the source financial account. |
| toFinancialAccountId | string | Yes | ID of the destination financial account. |
| amount | integer (int32) | No | Transfer amount in the smallest currency unit (e.g., cents). Minimum: 1, Maximum: 4294967295. |
| currencyCode | integer | No | ISO 4217 numeric currency code. Currently supported value: 840 (USD). |
| type | string | No | Transfer type. Enum: Netevia (internal transfer between Netevia accounts), ACH (external bank transfer). |
| memo | string | No | Optional memo or note for the transfer. Maximum 1024 characters. |
{
"oneTimeCode": "847291",
"secureOperationType": "ShortMessageCode",
"transferRequests": [
{
"fromFinancialAccountId": "fa_source_account_001",
"toFinancialAccountId": "fa_destination_account_002",
"amount": 5000,
"currencyCode": 840,
"type": "Netevia",
"memo": "Monthly fee reimbursement"
},
{
"fromFinancialAccountId": "fa_source_account_001",
"toFinancialAccountId": "fa_external_linked_account_003",
"amount": 12500,
"currencyCode": 840,
"type": "ACH",
"memo": "Vendor payment batch June"
}
]
}Response
200 OK
Returns an array of results, one per transfer request submitted. Each result indicates success or failure for that individual transfer.
| Field | Type | Description |
|---|---|---|
| id | string | The ID of the created transfer, if successful. Null if the transfer failed. |
| response | string | Human-readable status message for the transfer (e.g., success confirmation or error description). |
| errorCode | integer | Numeric error code if the transfer failed. Absent or null on success. |
[
{
"id": "txn_7f3a2c1e4b8d9f0a",
"response": "Transfer initiated successfully.",
"errorCode": null
},
{
"id": "txn_9b1d4e7f2c3a8e05",
"response": "Transfer initiated successfully.",
"errorCode": null
}
]Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields (oneTimeCode, secureOperationType), invalid one-time code format (not 6 digits), or validation failure on a transfer request |
| 401 | Bearer token missing, expired, or invalid |
| 403 | Insufficient permissions to perform transfers on the specified accounts |
| 404 | One or more financial account IDs not found |
| 500 | Internal server error |
Common Mistakes
- Sending
oneTimeCodein a non-6-digit format — it must be exactly 6 numeric digits matching^\d{6}$. - Using a
secureOperationTypevalue other thanShortMessageCode,TimeBasedCode, orLegacyTimeBasedCode(case-sensitive enum). - Setting
amountto zero or omitting it when the receiving system expects a non-null value — minimum valid amount is 1 (smallest currency unit). - Providing an unsupported
currencyCode— only840(USD) is currently accepted. - Mixing up
typevalues: useNeteviafor internal account-to-account transfers andACHfor transfers involving externally linked bank accounts. - Using an expired or already-consumed
oneTimeCode— codes are single-use and time-limited. - Submitting an empty
transferRequestsarray — include at least one transfer object to obtain meaningful results.
Related Endpoints
POST /api/fundsMovement/transfer— Initiate a single funds transfer (non-batch)POST /api/fundsMovement/scheduled/transfer— Schedule a transfer for a future datePOST /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/batch/transfer \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"oneTimeCode": "847291",
"secureOperationType": "ShortMessageCode",
"transferRequests": [
{
"fromFinancialAccountId": "fa_source_account_001",
"toFinancialAccountId": "fa_destination_account_002",
"amount": 5000,
"currencyCode": 840,
"type": "Netevia",
"memo": "Monthly fee reimbursement"
},
{
"fromFinancialAccountId": "fa_source_account_001",
"toFinancialAccountId": "fa_external_linked_account_003",
"amount": 12500,
"currencyCode": 840,
"type": "ACH",
"memo": "Vendor payment batch June"
}
]
}'