Initiate Batch Transfer

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

FieldTypeRequiredDescription
oneTimeCodestringYes6-digit numeric one-time verification code. Must match pattern ^\d{6}$.
secureOperationTypestringYesVerification method used. Enum: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode.
transferRequestsarrayNoArray of individual transfer request objects. See transfer request fields below.

Transfer Request Object (transferRequests[])

FieldTypeRequiredDescription
fromFinancialAccountIdstringYesID of the source financial account.
toFinancialAccountIdstringYesID of the destination financial account.
amountinteger (int32)NoTransfer amount in the smallest currency unit (e.g., cents). Minimum: 1, Maximum: 4294967295.
currencyCodeintegerNoISO 4217 numeric currency code. Currently supported value: 840 (USD).
typestringNoTransfer type. Enum: Netevia (internal transfer between Netevia accounts), ACH (external bank transfer).
memostringNoOptional 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.

FieldTypeDescription
idstringThe ID of the created transfer, if successful. Null if the transfer failed.
responsestringHuman-readable status message for the transfer (e.g., success confirmation or error description).
errorCodeintegerNumeric 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

CodeWhen it happens
400Missing required fields (oneTimeCode, secureOperationType), invalid one-time code format (not 6 digits), or validation failure on a transfer request
401Bearer token missing, expired, or invalid
403Insufficient permissions to perform transfers on the specified accounts
404One or more financial account IDs not found
500Internal server error

Common Mistakes

  • Sending oneTimeCode in a non-6-digit format — it must be exactly 6 numeric digits matching ^\d{6}$.
  • Using a secureOperationType value other than ShortMessageCode, TimeBasedCode, or LegacyTimeBasedCode (case-sensitive enum).
  • Setting amount to 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 — only 840 (USD) is currently accepted.
  • Mixing up type values: use Netevia for internal account-to-account transfers and ACH for transfers involving externally linked bank accounts.
  • Using an expired or already-consumed oneTimeCode — codes are single-use and time-limited.
  • Submitting an empty transferRequests array — 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 date
  • 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/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"
      }
    ]
  }'
Body Params
string
required
length ≥ 1
^\d{6}$
string
enum
required
Allowed:
transferRequests
array of objects | 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