Validate CSV transfer file

Validate CSV Transfer File

This endpoint accepts a CSV file containing transfer instructions and validates each row for correctness before the transfers are submitted. It returns a validation result per row, including any errors found. Use this as a preflight check before executing a batch transfer to catch formatting and data issues early.

Endpoint

POST /Files/transfer/file

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 partner or business customer wants to execute multiple transfers at once from a CSV file. Call it before submitting the actual batch transfer to surface any row-level errors (wrong routing number length, missing fields, invalid account type) so they can be corrected without partial execution.

Request Body

This endpoint uses multipart/form-data.

FieldTypeRequiredDescription
Filebinary (file)YesThe CSV file containing transfer rows to validate
# multipart/form-data example — see curl below

Response

200 OK — Array of validation results, one object per CSV row.

FieldTypeDescription
typestringAccount type for this transfer: "Netevia" or "ACH"
amountintegerTransfer amount in cents (1–4294967295)
destination.idstringOptional destination identifier
destination.namestringRecipient name
destination.accountNumberstringDestination account number (min 9 chars)
destination.routingNumberstringRouting number (exactly 9 chars)
destination.last4stringLast 4 digits of account number
destination.typestringAccount type: "SAVINGS" or "CHECKING"
memostringOptional transfer memo
errorsobjectMap of field name → array of error codes; null if row is valid
[
  {
    "type": "ACH",
    "amount": 50000,
    "destination": {
      "name": "Jane Smith",
      "accountNumber": "XXXXXXXXXX",
      "routingNumber": "021000021",
      "last4": "1234",
      "type": "CHECKING"
    },
    "memo": "Payroll",
    "errors": null
  },
  {
    "type": "ACH",
    "amount": 10000,
    "destination": {
      "name": "Bob Jones",
      "accountNumber": "XXXXXXXXXX",
      "routingNumber": "12345",
      "last4": "5678",
      "type": "CHECKING"
    },
    "memo": null,
    "errors": {
      "routingNumber": [5]
    }
  }
]

Error Codes

CodeWhen it happens
400File is missing, empty, or not valid multipart/form-data
401Token missing, expired, or invalid
403Insufficient permissions
500Internal server error

Common Mistakes

  • Sending JSON instead of multipart/form-data — this endpoint requires a file upload, not a JSON body
  • Routing number not exactly 9 digits — the schema enforces minLength: 9 and maxLength: 9
  • Using a destination.type value other than SAVINGS or CHECKING — the pattern is strict
  • A 200 response with errors on rows does not mean validation passed — always check each row's errors field

Related Endpoints

  • POST /api/fundsMovement/v2/achtransfer — Execute a single ACH transfer
  • POST /api/fundsMovement/batch/transfer — Submit a validated batch transfer file
  • GET /Files/transfer/file — Download a transfer file template

Example

curl -X POST https://api.banking.netevia.dev/Files/transfer/file \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "[email protected]"
Body Params
file
required
Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

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