Initiate ACH transfer to own account

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

FieldTypeRequiredDescription
fromFinancialAccountIdstringYesThe ID of the source financial account (linked external account) funds are being pulled from
toFinancialAccountIdstringYesThe ID of the destination Netevia financial account to deposit funds into
amountinteger (int32)NoTransfer amount in the smallest currency unit (e.g., cents). Must be between 1 and 4294967295
currencyCodeinteger (int32)NoISO 4217 numeric currency code. Only 840 (USD) is supported
oneTimeCodestringYesSix-digit numeric verification code used to authorize the transfer (e.g., from SMS or authenticator app). Must match pattern ^\d{6}$
secureOperationTypestringYesThe type of verification used to generate the one-time code. Allowed values: ShortMessageCode, TimeBasedCode, LegacyTimeBasedCode
memostringNoOptional 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.

FieldTypeDescription
(success indicator)objectA success response confirming the ACH transfer has been queued for processing
{
  "success": true,
  "message": "ACH transfer initiated successfully"
}

Error Codes

CodeWhen it happens
400Missing required fields (fromFinancialAccountId, toFinancialAccountId, oneTimeCode, or secureOperationType), invalid oneTimeCode format (must be exactly 6 digits), amount out of range, or unsupported currency code
401Bearer token is missing, expired, or invalid
403The authenticated user does not have permission to transfer from the specified account
404One or both financial account IDs not found or not associated with the authenticated user
500Internal server error during transfer processing

Common Mistakes

  • Sending amount in dollars instead of cents — the amount field expects the smallest currency unit (e.g., 5000 for $50.00, not 50)
  • Providing an invalid or expired oneTimeCode — the code must be exactly 6 digits and must match the type specified in secureOperationType
  • 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 secureOperationType or 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 account
  • POST /api/fundsMovement/v2/InternalTransfer — Transfer funds between two Netevia financial accounts owned by the same user
  • 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/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"
  }'
Body Params

Base class for all funds transfer (movement) request.

string
required
length ≥ 1
^\d{6}$

Code for passing verification

string
enum
required
Allowed:
string | null
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 request content types

Allowed:
Response
200

Success

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here!