Batch Uploading & Processing

This page is about understanding the v3 Batch file upload process via sFTP. Each template field provides specs and explanations for better understanding. The document has downloadable CSV templates for ordering, registering, and loading cards. Users can also find a look-up table for the error messages here: Error Messages. If you have any issues or questions, refer to our FAQs page.

Prerequisites

Access to Filezilla – Filezilla is an open-source, cross-platform FTP application for file transfers. Please get in touch with our backend engineer for access and more details.

Batch Processing Overview

Dash Batch Processing allows clients to submit large volumes of card orders and loads asynchronously via secure sFTP using a unified .csv template. Batch processing is asynchronous and returns results in two distinct response waves. Understanding this two‑wave model is critical to correctly interpreting response files and status suffixes.

Uploaded batch files first undergo file‑level validation (Wave 1: Pre‑processing). Files that pass pre‑processing are then routed to record‑level execution (Wave 2: Post‑processing). Each wave produces its own response files. A single uploaded batch file may generate multiple response files across both waves, depending on validation and record‑level outcomes.


Two‑Wave Processing Model

Wave 1: Pre‑processing (File‑Level Validation)

Pre‑processing validates the structure and integrity of the uploaded file before any records are sent to downstream processors.

Pre‑processing validates:

  • File format and encoding
  • Template structure and column order
  • Required fields
  • Duplicate file detection (based on filename)
  • Basic record‑level validation

Pre-processing tasks are handled by Dash to prepare and validate the file before further processing.

  • File Pickup and Validation:
    • Dash automatically picks up the file every 5 minutes for processing and validation.
      • If Validation is Successful:
        • The file is routed to the appropriate landing zone based on size and traffic:
          • Files with 4000 or more records are dropped in Landing Zone 3.
          • Smaller files are dropped in Landing Zone 1 or 2.
        • The status updates to “File Uploaded”.
    • If Validation Fails:
      • The file is placed in the processed folder with one of the following suffixes:
        • _Failed_: Indicates overall file failure.
          • Typical Scenarios
            • The template contains card loads, and there are not enough funds in the Virtual Funding account
            • The template is set up as “BulkShip”, all going to the same address, and if one record fails, we will fail the entire file
          • _Duplicate_: Indicates duplicate records.
          • _Invalid_: Indicates the file could not be parsed
          • _PartialProcessed_: Indicates partial validation success.
            • If a combination of failed and successful records is contained in a template.
              • A _PartiallyProcessed_ file that contains all records in the original file, and also indicates which records failed.
              • The successful records will be passed to Post-Processing

Wave 2: Post‑processing (Record‑Level Execution)

Post‑processing executes individual records that passed pre‑processing validation. This includes actions such as:

  • Card ordering
  • Card registration
  • Card loading

Post-processing tasks are managed by the processing platform to complete order processing and deliver record‑level results, including both successful and failed records from the same batch file.

  • File Processing at the Processing Platform:
    • Once a file is successfully routed to the processing platform, further validation and order processing begin.
      • Successful Processing:
        • If any records are processed successfully:
          • A return file is generated with the suffix _Completed_ and placed in the processed (or completed if configured by the customer) folder.
          • Additional columns such as DDA number, proxy card number, etc., are included in the return file.
          • Fetch PersonID, Exp Date, DDA, and TRN from the processing platform and store on the Dash.
          • Results are updated on the Dash portal, and the status changes to “Completed”.
        • If any records fail:
          • A return file is generated with the suffix _Failed_ddmmyyyy_hhmmss and placed in the processed (or failed if configured by the customer) folder.
          • If all records fail:
            • The status updates to “Failed”.

Note: Post-processing results may take some time to reflect on the Dash portal.

Batch processing via sFTP– Two-Wave Model


Understanding File Status Indicators

Pre‑processing Response Files (Wave 1)

Pre‑processing response files are generated shortly after upload and validation.

Suffix Meaning
_Processed_ File passed pre‑processing validation and was routed to the payment processor
_Failed_ File failed pre‑processing validation due to template issues, formatting errors, or structural problems. No records were processed
_Duplicate_ File was rejected because a file with the same filename was previously uploaded
_PartialProcessed_ Some records passed pre‑processing validation, while others failed, commonly due to duplicate records within the file

A pre‑processing response file is placed in the processed folder.


Post‑processing Response Files (Wave 2)

Post‑processing response files contain record‑level execution results.

Suffix Meaning
_Completed_ Records were successfully processed
_Failed_ Records failed during post‑processing
_Failed_ddmmyyyy_hhmmss Records failed during post‑processing. A date suffix is appended to prevent filename collisions

Note:
The date suffix is appended to some _Failed_ Files exist only to prevent naming collisions and do not represent processing time or SLA.


Mixed Post‑processing Results

A single uploaded batch file that passes pre‑processing (_Processed_) may generate both:

  • A _Completed_ response file and
  • A _Failed_ response file

This occurs when some records succeed and others fail during post‑processing.


File Pickup Timing

Uploaded files are automatically picked up for processing at regular intervals (approximately every 15 minutes). Processing time varies based on file size, system traffic, and downstream dependencies. We typically see about an hour, but it can be longer depending on traffic.  Mondays and Fridays are the heaviest traffic days


Downloadable Templates

Batch processing uses the Unified V3 Template. Always use the latest published version.

Do not modify column order or remove required fields.

sFTP Batch File Template

Users can use this template to upload batch files via sFTP to the Dash portal to order, register, and load cards. Each of these templates has a detailed view of the parameters involved, whether mandatory or not, as well as data type, size, and description. Some fields are conditional, meaning they may or may not be required.

A file is returned from Dash after successful processing. The file contains additional information from the processing, such as proxy card number, routing number, etc. The format of this file is noted below in the V3 Return Tab.

Note: We’ve provided tabs below with the data needed for common actions (Instant Issue Order, Personalized Order, Register, and Load). Use the V3 Unified Template for all orders, filling in only the necessary fields and leaving the rest empty.

V3 Unified Template Spec

Column Required Type Size Desc
CPID Yes Numeric 9 Customer Program ID
This unique ID is provided by Dash upon registration. CPID is used to determine the program for a customer.
name_first Yes String 50 First name of the person
name_last Yes String 50 Last name of the person
cardholder_external_identifier No String 60 used to store a unique identifier like employeeID stored with card holder data (Processing platform Other Field)
transaction_external_identifier No String 36 A unique ID is generated for each transaction, though it currently serves no specific purpose.
ssn_number Conditional Numeric 9 SSN of person, if required on program, OR nine digit identifier. Note that the last four digits would be the Access Code. Not needed for load only
dob Yes Date 10 date of birth in mm/dd/yyyy format
email Conditional A/N 50 Email id of the person. REQUIRED if using DIGITAL product.
Allowed characters: letters (A–Z, a–z), numbers (0–9), and symbols: ! # $ % & ‘ * + – / = ? _ \ { } ~
Restrictions:
. (dot) and other special characters (^ and |) are not allowed at the start, end, or consecutively.
Allowed special characters must be followed by a letter or number.
phone Yes Numeric 23 The phone number of the receiving person
Accepts international phone numbers in the format +<CountryCode>(<AreaCode>)-(<Prefix>)-(<LineNumber>), such as +1(555)-(555)-(5555), in a continuous numeric format without any symbols, e.g., 15555555555.
*If a phone number is not available, the field may be left empty or set to 9999999999 (ten 9s).
For any value other than 9999999999, we will validate phone numbers by parsing them with country-specific rules, checking that the number has a valid structure, length, and prefix for that country, and confirming it could be a real, dialable number. If a phone number fails validation an audit log entry is made noting the value that failed and the phone number is blanked out.
name_on_card No String 26 will be embossed on the card if passed, and the first name and last name will be bypassed
fourth_line No String 26 will be printed on the card if passed under the name.
proxy_number No Numeric 19 For card registrations and loads
card_holder_home_address1 Conditional A/N 50 residential address/street of the receiver. Not required for load only
card_holder_home_address2 Conditional A/N 50 additional information about the residential address. Not required for load only
card_holder_home_city Conditional String 35/18 residential city. Not required for load only. 35 Character Limit is the default, and 18 Characters is only enforced for Bulk Shipping
card_holder_home_state Conditional String 2 residential state code in abbreviated form, e.g. AL for Alabama, CA for California. Not required for load only
card_holder_home_zip Conditional Numeric 5 residential zip code. Not required for load only
qty No Numeric 10 Quantity for Instant Issue cards orders only
load_value No Decimal 10 Up to 2 positive decimal places to load the card, e.g., 1.20. We allow load with
Personalized order
Card registration
Load card.
card_type Yes String 10 Digital or Physical
order_type Yes String 25 Personalized, InstantIssue, CardRegistration, LoadCard, Reward
transaction_desc No A/N 40 This comment will be displayed in the transaction history/activity detail
shipping_type Conditional String 25 Bulkship Or IndividualShip
BulkShip – Cards will be shipped in bulk to a single (i.e. company) address.
IndividualShip – Cards will be shipped to the cardholder’s individual addresses.
Note: Required for personalized orders. For Personalized Digital orders pass IndividualShip
shipping_method Conditional String 50 For bulk shipping  – UPS Next Day Air, UPS Ground, UPS Second Day, FedEx Ground, FedEx 2nd Day, FedEx Next Day
For Individual ship – USPS First Class, UPS Next Day Air, UPS Ground, UPS Second Day, USPS w/ Tracking, FedEx Ground, FedEx 2nd Day, FedEx Next Day
Note: Required for personalized orders. For Personalized Digital orders pass: USPS First Class
shipping_addressee Conditional String 26 for card ordering/bulk shipping
shipping_attention Conditional String 18 for card ordering/bulk shipping
shipping_address1 Conditional A/N 50 shipping address/street of the receiver
shipping_address2 Conditional A/N 50 additional information about the shipping address
shipping_city Conditional String 18 shipping city
shipping_state Conditional String 2 shipping state code in abbreviated form, e.g. AL for Alabama, CA for California
shipping_zip Conditional Numeric 5 shipping zip code
order_custom_data_field1 No String 255 Custom data fields that will be associated to the Order Flow
order_custom_data_field2 No String 255  Custom data fields that will be associated to the Order Flow
order_custom_data_field3 No String 255  Custom data fields that will be associated to the Order Flow
order_custom_data_field4 No String 255 Custom data fields that will be associated to the Order Flow
order_custom_data_field5 No String 255 Custom data fields that will be associated to the Order Flow
reg_custom_data_field1 No String 255 Custom data fields that will be associated to the Registration Flow
reg_custom_data_field2 No String 255 Custom data fields that will be associated to the Registration Flow
reg_custom_data_field3 No String 255 Custom data fields that will be associated to the Registration Flow
reg_custom_data_field4 No String 255 Custom data fields that will be associated to the Registration Flow
reg_custom_data_field5 No String 255 Custom data fields that will be associated to the Registration Flow
load_custom_data_field1 No String 255 Custom data fields that will be associated to the Value Load transaction
load_custom_data_field2 No String 255 Custom data fields that will be associated to the Value Load transaction
load_custom_data_field3 No String 255 Custom data fields that will be associated to the Value Load transaction
load_custom_data_field4 No String 255 Custom data fields that will be associated to the Value Load transaction
load_custom_data_field5 No String 255 Custom data fields that will be associated to the Value Load transaction
discretionary_data_1 No String 50 Discretionary data fields used to dynamically pass data to Arrow eye
discretionary_data_2 No String 50 Discretionary data fields used to dynamically pass data to Arrow eye
discretionary_data_3 No String 50 Discretionary data fields used to dynamically pass data to Arrow eye

 

Batch Processing Flow