Initiate Transfer Between Financial Accounts

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

FieldTypeRequiredDescription
fromFinancialAccountIdstringYesThe unique identifier of the source financial account. Minimum length: 1.
toFinancialAccountIdstringYesThe unique identifier of the destination financial account. Minimum length: 1.
amountinteger (int32)NoTransfer amount in the smallest currency unit (e.g., cents for USD). Must be between 1 and 4,294,967,295.
currencyCodeinteger (int32)NoISO 4217 numeric currency code. Currently supported value: 840 (USD).
memostringNoOptional 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

FieldTypeDescription
initiateTransferBetweenFinancialAccountsobjectThe transfer record returned after initiation.
initiateTransferBetweenFinancialAccounts.idstringUnique identifier of the transfer transaction.
initiateTransferBetweenFinancialAccounts.createdAtstring (date-time)ISO 8601 timestamp when the transfer was created.
initiateTransferBetweenFinancialAccounts.updatedAtstring (date-time)ISO 8601 timestamp when the transfer record was last updated.
initiateTransferBetweenFinancialAccounts.amountobjectAmount details of the transfer.
initiateTransferBetweenFinancialAccounts.amount.valueinteger (int64)Transfer amount in the smallest currency unit (e.g., cents).
initiateTransferBetweenFinancialAccounts.amount.currencyCodestringCurrency code string associated with the transfer amount.
initiateTransferBetweenFinancialAccounts.statusstringCurrent status of the transfer (e.g., PENDING, COMPLETED, FAILED).
initiateTransferBetweenFinancialAccounts.statusReasonstringHuman-readable explanation of the current status, especially for failed or pending states.
initiateTransferBetweenFinancialAccounts.memostringThe memo provided in the request, if any.
initiateTransferBetweenFinancialAccounts.errorsarrayList of field-level errors, if any occurred during processing.
mutationResultobjectTop-level mutation result wrapper.
mutationResult.errorsarrayList 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

CodeWhen it happens
400Missing required fields (fromFinancialAccountId or toFinancialAccountId), amount out of valid range, or memo contains disallowed characters
401Token missing, expired, or invalid
403Caller does not have permission to transfer from the specified source account
404Source or destination financial account not found
500Internal server error

Common Mistakes

  • Submitting amount as a decimal (e.g., 250.00) instead of the integer value in cents (e.g., 25000). The field is int32 and represents the smallest currency unit.
  • Using an unsupported currencyCode value. Currently only 840 (USD) is accepted.
  • Including disallowed characters in the memo field (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 amount of 0 — the minimum accepted value is 1.

Related Endpoints

  • POST /api/fundsMovement/v2/initiateACHTransfer — Initiate an ACH transfer using an externally linked account via Finicity or Plaid
  • POST /api/fundsMovement/v2/initiateScheduledTransfer — Schedule a recurring or future-dated transfer between financial accounts
  • POST /api/fundsMovement/v2/initiateBatchTransfer — Submit multiple transfer instructions in a single batch request
  • GET /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"
  }'
Body Params

Base class for all funds transfer (movement) request.

string | null
[\w. ]+
string
required
length ≥ 1
string
required
length ≥ 1
int32
1 to 4294967295
int32
enum
Allowed:
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