Initiate many transfers between financial accounts - Payee.

Initiate Many Transfers Between Financial Accounts - Payee

This endpoint enables users to submit multiple internal financial account transfers to various payees in a single API call. Each transfer in the batch is processed individually and returns its own success or failure result. This method is particularly useful for automating large-scale fund disbursements, such as paying multiple vendors or distributing payments to clients simultaneously.

Endpoint

POST /api/fundsMovement/PayeeTransferMany

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 business needs to disburse funds to multiple payees at once rather than issuing individual transfer requests. This is ideal for payroll-adjacent disbursements, vendor batch payments, or any workflow that requires high-volume fund movement in a single operation. Each transfer in the batch is tracked independently, allowing granular visibility into which transfers succeeded or failed.

Request Body

FieldTypeRequiredDescription
transferRequestsarrayNoArray of individual transfer request objects, each describing a single payee transfer
transferRequests[].fromFinancialAccountIdstringYesID of the source financial account to debit
transferRequests[].toFinancialAccountIdstringYesID of the destination financial account to credit
transferRequests[].amountinteger (int32)NoTransfer amount in the smallest currency unit (e.g., cents). Must be between 1 and 4,294,967,295
transferRequests[].currencyCodeintegerNoISO 4217 numeric currency code. Supported value: 840 (USD)
transferRequests[].memostringNoOptional memo or note for the transfer. Max 1024 characters. Alphanumeric characters, dots, and spaces allowed
oneTimeCodestringYes6-digit one-time verification code (exactly 6 digits, pattern: ^\d{6}$)
secureOperationTypestringYesMethod used to generate the one-time code. Allowed values: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode
{
  "transferRequests": [
    {
      "fromFinancialAccountId": "fa-source-001-abc123",
      "toFinancialAccountId": "fa-vendor-001-xyz789",
      "amount": 50000,
      "currencyCode": 840,
      "memo": "Vendor payment Q2"
    },
    {
      "fromFinancialAccountId": "fa-source-001-abc123",
      "toFinancialAccountId": "fa-vendor-002-def456",
      "amount": 75000,
      "currencyCode": 840,
      "memo": "Contractor payout June"
    }
  ],
  "oneTimeCode": "482917",
  "secureOperationType": "ShortMessageCode"
}

Response

200 OK

Returns an array of objects, one per submitted transfer request, each indicating the result of that individual transfer.

FieldTypeDescription
idstringUnique identifier of the created transfer, if successful
responsestringHuman-readable status message for this transfer
errorCodeintegerError code if the transfer failed; absent or null on success. See platform error code reference for values
[
  {
    "id": "txn-00a1b2c3-d4e5-6789-fghi-jklmnopqrstu",
    "response": "Transfer initiated successfully.",
    "errorCode": null
  },
  {
    "id": "txn-11b2c3d4-e5f6-7890-ghij-klmnopqrstuv",
    "response": "Transfer initiated successfully.",
    "errorCode": null
  }
]

Error Codes

CodeWhen it happens
400Missing required fields, invalid oneTimeCode format, or validation error on one or more transfer request fields
401Token missing, expired, or invalid
403Insufficient permissions to initiate transfers from the specified source account
404One or more financial account IDs not found
500Internal server error

Common Mistakes

  • Submitting an oneTimeCode that is not exactly 6 digits — the pattern ^\d{6}$ is strictly enforced and will cause a 400 error.
  • Using the wrong secureOperationType for the code you received — ensure the value matches the method that generated the OTP (e.g., use ShortMessageCode for SMS-delivered codes).
  • Setting amount to 0 or omitting it and assuming a default — amounts must be between 1 and 4,294,967,295 (in the smallest currency unit, i.e., cents for USD).
  • Reusing the same oneTimeCode across multiple requests — one-time codes are single-use and expire quickly.
  • Including an unsupported currencyCode — only 840 (USD) is currently accepted.

Related Endpoints

  • POST /api/fundsMovement/PayeeTransfer — Initiate a single transfer to a payee financial account
  • POST /api/fundsMovement/TransferMany — Initiate multiple transfers between internal financial accounts (non-payee)
  • POST /api/fundsMovement/Transfer — Initiate a single transfer between internal financial accounts
  • POST /api/auth/v2 — Obtain a Bearer authentication token

Example

curl -X POST https://api.banking.netevia.dev/api/fundsMovement/PayeeTransferMany \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transferRequests": [
      {
        "fromFinancialAccountId": "fa-source-001-abc123",
        "toFinancialAccountId": "fa-vendor-001-xyz789",
        "amount": 50000,
        "currencyCode": 840,
        "memo": "Vendor payment Q2"
      },
      {
        "fromFinancialAccountId": "fa-source-001-abc123",
        "toFinancialAccountId": "fa-vendor-002-def456",
        "amount": 75000,
        "currencyCode": 840,
        "memo": "Contractor payout June"
      }
    ],
    "oneTimeCode": "482917",
    "secureOperationType": "ShortMessageCode"
  }'
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