Initiate a secure funds transfer between two financial accounts within the Netevia platform.
Initiate Transfer Between Financial Accounts
This endpoint initiates a secure transfer of funds between two financial accounts within the Netevia Banking platform. The caller specifies the source account, destination account, transfer amount, and an optional memo to describe the transaction. Upon success, the API returns a transaction reference ID and status that can be used to track the transfer.
Endpoint
POST /api/fundsMovement/v2/initiateTransferBetweenFinancialAccounts
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 move funds between two financial accounts that are already registered on the Netevia platform — for example, transferring money between a customer's checking and savings accounts, or between accounts belonging to the same business entity. This endpoint supports both personal and business account transfers. For transfers involving externally linked accounts (via Finicity or Plaid), use the appropriate ACH transfer endpoints instead.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| fromFinancialAccountId | string | Yes | The unique identifier of the source financial account. Minimum length: 1. |
| toFinancialAccountId | string | Yes | The unique identifier of the destination financial account. Minimum length: 1. |
| amount | integer (int32) | No | Transfer amount in the smallest currency unit (e.g., cents for USD). Must be between 1 and 4,294,967,295. |
| currencyCode | integer (int32) | No | ISO 4217 numeric currency code. Currently supported value: 840 (USD). |
| memo | string | No | Optional description or note for the transfer. Maximum length: 1,024 characters. Allowed characters: alphanumeric, periods, and spaces ([\w. ]+). |
{
"fromFinancialAccountId": "fa_source_account_id_here",
"toFinancialAccountId": "fa_destination_account_id_here",
"amount": 25000,
"currencyCode": 840,
"memo": "Monthly savings transfer"
}Response
200 OK
| Field | Type | Description |
|---|---|---|
| initiateTransferBetweenFinancialAccounts | object | The transfer record returned after initiation. |
| initiateTransferBetweenFinancialAccounts.id | string | Unique identifier of the transfer transaction. |
| initiateTransferBetweenFinancialAccounts.createdAt | string (date-time) | ISO 8601 timestamp when the transfer was created. |
| initiateTransferBetweenFinancialAccounts.updatedAt | string (date-time) | ISO 8601 timestamp when the transfer record was last updated. |
| initiateTransferBetweenFinancialAccounts.amount | object | Amount details of the transfer. |
| initiateTransferBetweenFinancialAccounts.amount.value | integer (int64) | Transfer amount in the smallest currency unit (e.g., cents). |
| initiateTransferBetweenFinancialAccounts.amount.currencyCode | string | Currency code string associated with the transfer amount. |
| initiateTransferBetweenFinancialAccounts.status | string | Current status of the transfer (e.g., PENDING, COMPLETED, FAILED). |
| initiateTransferBetweenFinancialAccounts.statusReason | string | Human-readable explanation of the current status, especially for failed or pending states. |
| initiateTransferBetweenFinancialAccounts.memo | string | The memo provided in the request, if any. |
| initiateTransferBetweenFinancialAccounts.errors | array | List of field-level errors, if any occurred during processing. |
| mutationResult | object | Top-level mutation result wrapper. |
| mutationResult.errors | array | List of errors returned by the mutation, if any. |
{
"initiateTransferBetweenFinancialAccounts": {
"id": "txn_0a1b2c3d4e5f6a7b8c9d0e1f",
"createdAt": "2026-06-08T14:32:00Z",
"updatedAt": "2026-06-08T14:32:01Z",
"amount": {
"value": 25000,
"currencyCode": "USD"
},
"status": "PENDING",
"statusReason": "Transfer is being processed",
"memo": "Monthly savings transfer",
"errors": []
},
"mutationResult": {
"errors": []
}
}Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields (fromFinancialAccountId or toFinancialAccountId), amount out of valid range, or memo contains disallowed characters |
| 401 | Token missing, expired, or invalid |
| 403 | Caller does not have permission to transfer from the specified source account |
| 404 | Source or destination financial account not found |
| 500 | Internal server error |
Common Mistakes
- Submitting
amountas a decimal (e.g.,250.00) instead of the integer value in cents (e.g.,25000). The field isint32and represents the smallest currency unit. - Using an unsupported
currencyCodevalue. Currently only840(USD) is accepted. - Including disallowed characters in the
memofield (e.g., hyphens, slashes, or special symbols). Only alphanumeric characters, periods, and spaces are permitted. - Attempting to transfer to/from an account that belongs to a different customer without proper authorization.
- Providing an
amountof0— the minimum accepted value is1.
Related Endpoints
POST /api/fundsMovement/v2/initiateACHTransfer— Initiate an ACH transfer using an externally linked account via Finicity or PlaidPOST /api/fundsMovement/v2/initiateScheduledTransfer— Schedule a recurring or future-dated transfer between financial accountsPOST /api/fundsMovement/v2/initiateBatchTransfer— Submit multiple transfer instructions in a single batch requestGET /api/fundsMovement/v2/getTransferStatus— Retrieve the current status of a previously initiated transfer
Example
curl -X POST https://api.banking.netevia.dev/api/fundsMovement/v2/initiateTransferBetweenFinancialAccounts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fromFinancialAccountId": "fa_source_account_id_here",
"toFinancialAccountId": "fa_destination_account_id_here",
"amount": 25000,
"currencyCode": 840,
"memo": "Monthly savings transfer"
}'