Initiate ACH Transfer to Own Account
This endpoint enables users to deposit funds into their own Netevia financial account via an ACH (Automated Clearing House) transfer. It supports secure, automated internal fund movements by requiring a one-time verification code alongside the transfer details. The operation is designed for both business and personal customers who have linked external accounts.
Endpoint
POST /api/fundsMovement/v2/DepositACHTransfer
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 customer wants to pull funds from a linked external bank account into their Netevia financial account via ACH. This is the appropriate method for deposit-type ACH transfers where both the source and destination accounts are owned by the same user. Ensure the customer has completed external account linking (via Finicity or Plaid) and passed underwriting verification before initiating the transfer.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| fromFinancialAccountId | string | Yes | The ID of the source financial account (linked external account) funds are being pulled from |
| toFinancialAccountId | string | Yes | The ID of the destination Netevia financial account to deposit funds into |
| amount | integer (int32) | No | Transfer amount in the smallest currency unit (e.g., cents). Must be between 1 and 4294967295 |
| currencyCode | integer (int32) | No | ISO 4217 numeric currency code. Only 840 (USD) is supported |
| oneTimeCode | string | Yes | Six-digit numeric verification code used to authorize the transfer (e.g., from SMS or authenticator app). Must match pattern ^\d{6}$ |
| secureOperationType | string | Yes | The type of verification used to generate the one-time code. Allowed values: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode |
| memo | string | No | Optional memo or note for the transfer. Maximum 1024 characters |
{
"fromFinancialAccountId": "ext-acct-a1b2c3d4e5",
"toFinancialAccountId": "fin-acct-f6g7h8i9j0",
"amount": 50000,
"currencyCode": 840,
"oneTimeCode": "482916",
"secureOperationType": "ShortMessageCode",
"memo": "Monthly savings deposit"
}Response
200 OK
A 200 response indicates that the ACH transfer was successfully initiated. The response body confirms the operation completed without errors.
| Field | Type | Description |
|---|---|---|
| (success indicator) | object | A success response confirming the ACH transfer has been queued for processing |
{
"success": true,
"message": "ACH transfer initiated successfully"
}Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields (fromFinancialAccountId, toFinancialAccountId, oneTimeCode, or secureOperationType), invalid oneTimeCode format (must be exactly 6 digits), amount out of range, or unsupported currency code |
| 401 | Bearer token is missing, expired, or invalid |
| 403 | The authenticated user does not have permission to transfer from the specified account |
| 404 | One or both financial account IDs not found or not associated with the authenticated user |
| 500 | Internal server error during transfer processing |
Common Mistakes
- Sending
amountin dollars instead of cents — theamountfield expects the smallest currency unit (e.g.,5000for $50.00, not50) - Providing an invalid or expired
oneTimeCode— the code must be exactly 6 digits and must match the type specified insecureOperationType - Using an external account that has not completed underwriting verification as the
fromFinancialAccountId - Confusing the direction of the transfer — this endpoint deposits INTO a Netevia account; use the appropriate withdrawal endpoint to move funds out
- Omitting
secureOperationTypeor sending a value not in the allowed enum:ShortMessageCode,TimeBasedCode,LegacyTimeBasedCode
Related Endpoints
POST /api/fundsMovement/v2/WithdrawACHTransfer— Initiate an ACH withdrawal from the user's own Netevia account to a linked external accountPOST /api/fundsMovement/v2/InternalTransfer— Transfer funds between two Netevia financial accounts owned by the same userPOST /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/v2/DepositACHTransfer \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fromFinancialAccountId": "ext-acct-a1b2c3d4e5",
"toFinancialAccountId": "fin-acct-f6g7h8i9j0",
"amount": 50000,
"currencyCode": 840,
"oneTimeCode": "482916",
"secureOperationType": "ShortMessageCode",
"memo": "Monthly savings deposit"
}' 200Success
