Bulk Account Close Process

The Bulk Account Close Process is essentially a batch version of calling /account/close repeatedly. To issue several requests to close accounts, use this process. Throttling mechanisms exist in the Helix API to ensure timely responses. See Batch Processing Overview for more information.

Basic Workflow

  1. You upload a Bulk Account Close Request File
  2. Helix processes it then uploads a Bulk Account Close Response File containing the results

Detailed Workflow

  1. You upload a properly formatted Bulk Account Close Request File to sftp.corepro.io
  2. Open a support ticket to request the file to be processed.
  3. Within four days of receiving the request, Helix calls the /account/close functionality for each content row in the file, but in a vastly more efficient manner
  4. Helix writes the results to a Bulk Account Close Response File and uploads it to sftp.corepro.io
  5. You inspect this response file for success and failed counts, and process accordingly. NOTE: Only failed account close operations will appear in the content section of the response file

Bulk Account Close Request File Definition

The Bulk Account Close Request File is a file created by the client to perform the equivalent of several requests to the /account/close endpoint. Multiple files per day can be processed, typically on an hourly basis. It has the following properties:

  1. Fixed-length
  2. ANSI encoded
  3. Line endings are Windows-style CarriageReturn + LineFeed (\r\n, or 0x0D0A)
  4. File must be uploaded to the relative directory of /BulkAccountClose/Request
  5. File name follows a specific, case-insensitive pattern of: yyyyMMddhhmm_BULKACCOUNTCLOSE.txt
    • The date in the file name should be the creation date of the file.
    • For example, if the file name is 201501080015_BULKACCOUNTCLOSE.TXT, the data it contains will apply to Jan 8, 2015.
    • The header record contains an EffectiveDate field. This should be the same value as the CreatedDate field.

🚧

Format Disclaimer
Helix reserves the right to append new field(s) to the end of any Header or Content line without notice. This is to allow new data points to be added as needed in a timely fashion.

Implementation Note
Your code should be written such that unexpected characters after the "last" field but prior to the end of each line should be ignored. That is, if the file is documented as being 872 bytes per line, receiving a file with 984 bytes per line should not disrupt your processing. This applies to both Header and Content lines.

File Name Disclaimer
The date in file name should be used as a guideline for human eyes only. Any date-related programmatic dependencies should rely on the FileCreatedDate or FileEffectiveDate contained within the header line of each file, as these will be precise to the second and will be in the appropriate timezone.

Header Row

PropertyData Type (Length)AlignmentStart PositionDescription
RecordTypestring (1)Left1The flag for the header row. Will always be H.
FileNamestring (50)Left2The name of response file.
RecordCountinteger (10)Right52The number of records. This field is zero-padded on the left side.
FileCreatedDatedatetime (34)Left62The date the file was created. Follows same format as API.
Example: 2014-10-20T10:30:31.456-05:00
See data format guidelines
FileEffectiveDatedatetime (34)Left96The date to which the data in the file pertains. Follows same format as API. Example: 2014-10-20T23:59:59.999-05:00
See data format guidelines
ReferenceIdstring (50)Left130A client-supplied unique identifier that will be included in the header row of the response file after Helix has processed this file. This allows correlation of the request and response files.

Content Row

PropertyData Type (Length)AlignmentStart PositionDescription
CustomerIdinteger (10)Right1The Helix-assigned unique ID for a customer. This field is zero-padded on the left side.
Example: 0000000872
AccountIdinteger (10)Right11The Helix-assigned unique ID for an account to be closed. This field is zero-padded on the left side.
Example: 0000000112
AccountCloseReasonstring (50)Left21Valid values include:
- Fraud
- Never Funded
- BSA Reasons
- Relationship Ended
- Deceased
- Other
CloseToAccountIdinteger (10)Right71The Helix-assigned unique ID for an account where any remaining funds should be transferred. This can be an accountId of an account, externalAccountId of an externalAccount or an accountId of a Petty Cash programAccount.
Note: If there is a balance on this account OR this is an interest-bearing account and interest is owed, closeToAccountId is a required parameter.
TransactionTagstring (50)Left81A program-wide unique identifier supplied by the caller that is to be associated with the transaction created to move any funds out of the account being closed.
CustomerArchiveReasonstring (50)Left131Use this field if you also want to archive the customer who owns the account. Valid values include:
- FirstPartyFraud: When someone uses his/her own identity to obtain products and services with no intent to fulfill their payment obligation.
- ThirdPartyFraud: When someone uses a stolen identity to commit fraud. Refers to fraud that is committed without the knowledge of the person whose identity is used to commit the fraud.
- SyntheticIdFraud: When someone uses a possible combination of real and phony attributes, including possible real attributes that don’t correlate to each other, in order to assemble a phony identity. This information is then used to open fraudulent accounts and/or obtain goods and services.
- AccountTakeoverFraud: When someone uses another person's account information to make purchases or withdraw money and often involves changing credentials and/or personal profile information.
- NonActivity: Non-Activity.
- BankDiscretion: Bank chose to archive for a non-fraud reason.
- Other
Notesstring (256)Left181Optional. Notes displayed on the customer page of Helix Admin Console
CloseFromAccountIdinteger (10)Right437Optional. The accountId of the customer account or program account where funds will be transferred from in order to bring the negative balance account to zero.


Bulk Account Close Response File Definition

The Bulk Account Close Response File is created by Helix after Helix processes a Bulk Account Close Request File. It has the following properties:

  1. Fixed-length
  2. ANSI encoded
  3. Line endings are Windows-style CarriageReturn + LineFeed (\r\n, or 0x0D0A)
  4. File will appear in the relative directory of /BulkAccountClose/Response
  5. File name follows a specific, case-sensitive pattern of: yyyyMMddhhmm_BULKACCOUNTCLOSERESPONSE.TXT
    • This file is an exception in the naming convention used by other files. The date in the file name is the exact same date as the one in the corresponding Bulk Account Close Request File. It is NOT the CreatedDate of the file.
    • For example, if the Bulk Account Close Request File name is 201501080015_BULKACCOUNTCLOSE.txt, the response file name will be 201501080015_BULKACCOUNTCLOSE.txt regardless of the actual CreatedDate or EffectiveDate
  6. Only failed transactions will appear in the Content Row section. Successful transactions will not be represented with a content row but will be included in the SuccessCount tally.

🚧

Format Disclaimer
Helix reserves the right to append new field(s) to the end of any Header or Content line without notice. This is to allow new data points to be added as needed in a timely fashion.

Implementation Note
Your code should be written such that unexpected characters after the "last" field but prior to the end of each line should be ignored. That is, if the file is documented as being 872 bytes per line, receiving a file with 984 bytes per line should not disrupt your processing. This applies to both Header and Content lines.

File Name Disclaimer
The date in file name should be used as a guideline for human eyes only. Any date-related programmatic dependencies should rely on the FileCreatedDate or FileEffectiveDate contained within the header line of each file, as these will be precise to the second and will be in the appropriate timezone.

Header Row

PropertyData Type (Length)AlignmentStart PositionDescription
RecordTypestring (1)Left1The flag for the header row. Will always be H.
FileNamestring (50)Left2The name of this file excluding path.
Format: yyyyMMddhhmm_BULKACCOUNTCLOSERESPONSE.TXT
Example: 201407162348_BULKACCOUNTCLOSERESPONSE.TXT
NOTE: File name will not contain the CreatedDate. It will consist of the same file name as the Bulk Account Close Request File that caused this file to be generated but with "RESPONSE" appended to the end of the file name prior to the file extension.
RecordCountinteger (10)Right52The number of Content lines in this file. This field is zero-padded on the left side.
Example: 0000000003
FileCreatedDatedatetime(34)Left62The date the file was created. Follows same format as API.
Example: 2014-10-20T10:30:31.456-05:00
See data format guidelines
FileEffectiveDatedatetime (34)Left96The date to which the data in the file pertains. Follows same format as API. Example: 2014-10-20T23:59:59.999-05:00
See data format guidelines
ReferenceIdstring (50)Left130The client-supplied unique identifier that was supplied in the corresponding request file.
SuccessCountinteger (10)Right180The number of records successfully processed by Helix. This field is zero-padded on the left side.
Example: 0000000001
FailedCountinteger (10)Right190The number of records that failed processing by Helix. This field is zero-padded on the left side.
Example: 0000000003
ProcessedCountinteger (10)Right200The number of records processed (either successfully or unsuccessfully) by Helix. Should always match the number of content rows in the corresponding request file and this response file. This field is zero-padded on the left side
Example: 0000000004

Content Row

PropertyData Type (Length)AlignmentStart PositionDescription
CustomerIdinteger (10)Right1The Helix-assigned unique ID for a customer. This field is zero-padded on the left side.
Example: 0000000872
AccountIdinteger (10)Right11The Helix-assigned unique ID for an account. This field is zero-padded on the left side.
Example: 0000000112
CloseFailReasonstring (255)Left21The reason the requested account close failed. Possible values include:
- Invalid CustomerId {1}.
- Invalid AccountId {0}.
- AccountId {0} is already closed.
- Account balance > 0 and no external account.
- Account balance < 0.
- Account balance > 0 and external account not verified. Possible fraud.
- Account balance > 0 and no external account provided.
- Pending Transactions.
- Error in attempting to unlock Customer Id {customerId} : {exceptionMessage}.
- Error in attempting to archive Card ID {cardId} for {accountId} : {exceptionMessage}.
- Error in attempting to close Account Id {accountId} : {exceptionMessage}.
- Error in attempting to archive Customer Id {customerId}: {exceptionMessage}.
- Cannot close an account with Negative Balance without closedAccountFromId.
- Cannot close an account because closedAccountFromId can not be an external account.
- Error in attempting to transfer negative balance funds to Account Id {accountId} : {exceptionMessage}.

{ "file_type": "fixed_length" }