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.
| Field | Type | Required | Description |
|---|---|---|---|
| File | binary (file) | Yes | The CSV file containing transfer rows to validate |
# multipart/form-data example — see curl belowResponse
200 OK — Array of validation results, one object per CSV row.
| Field | Type | Description |
|---|---|---|
| type | string | Account type for this transfer: "Netevia" or "ACH" |
| amount | integer | Transfer amount in cents (1–4294967295) |
| destination.id | string | Optional destination identifier |
| destination.name | string | Recipient name |
| destination.accountNumber | string | Destination account number (min 9 chars) |
| destination.routingNumber | string | Routing number (exactly 9 chars) |
| destination.last4 | string | Last 4 digits of account number |
| destination.type | string | Account type: "SAVINGS" or "CHECKING" |
| memo | string | Optional transfer memo |
| errors | object | Map 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
| Code | When it happens |
|---|---|
| 400 | File is missing, empty, or not valid multipart/form-data |
| 401 | Token missing, expired, or invalid |
| 403 | Insufficient permissions |
| 500 | Internal 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: 9andmaxLength: 9 - Using a
destination.typevalue other thanSAVINGSorCHECKING— the pattern is strict - A 200 response with
errorson rows does not mean validation passed — always check each row'serrorsfield
Related Endpoints
POST /api/fundsMovement/v2/achtransfer— Execute a single ACH transferPOST /api/fundsMovement/batch/transfer— Submit a validated batch transfer fileGET /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]"