Skip to main content

Collection Files

In order to process collections, you will be required to upload collection files to Stitch's SFTP server. Stitch will validate the schema and data and send you a REPLY file containing validation results.

Once validation is completed, Stitch will process your valid collections. Once the processing is complete, Stitch will send you a final OUTPUT file detailing the results of the collections.

Validation

All valid collections will be processed. Should you have any validation errors, Stitch will send back a REPLY file with the collection items being processed and the failed collection items and their failure reasons. You will be required to correct the issues and submit only the collection requests that had errors as a new batch ( the valid collections would have been previously processed).

Example:
If you submitted 10 collections and 3 failed validation, Stitch will notify you via the REPLY file of validation errors of the 3 collections that failed validation. Stitch will process the 7 valid collections. You will only have to resubmit the 3 collections that failed validation as a new batch, once you have rectified the issues.

In the case of no validation errors on submitted collections, you will receive a REPLY file as an acknowledgement containing all collection items being processed.

File Types and Validation

Collections involve 3 file types: Outgoing, Reply and Output. They will all be in CSV format and all files will have 4 record types. These can be seen below:

Record typeDescription
PProduct Header record detailing client ID, product information and file type
HHeader record detailing overall information about the collection
DData record that contains the collection request details. All other records are metadata
TTrailer record that houses summary information

Outgoing Collection File

This is the CSV file containing all your collection requests. You are required to send this to Stitch to process your collections. The file structure is as follows:

FieldRecord typeDescriptionTypeExample value
CLIENT_IDPClient ID as issued during onboardingUUID399a7ed1-0617-40f1-a9b7-d66f07b3a29d
PRODUCTPProduct that the file is for. In this case, it will always be COLLECTIONSStringCOLLECTIONS
CHANNELPChannel within a specific product that the file is for. This will always be DEBICHECKStringDEBICHECK
FILE_TYPEPType of file indicating what contents should be expected. This will be COLLECTIONStringCOLLECTION
EXTERNAL_BATCH_REFERENCE
required
HClient specified reference to uniquely identify a collection batch.
(Maximum permissible length: 4096 characters)
StringMY_REF
SUBMISSION_DATETIME
required
HThe datetime the collection was submitted.ISO 86012023‐08‐31T12:11:20+07:00
NONCE
required
DA unique string per collection request.
(Minimum permissible length: 8 characters.
Maximum permissible length: 36 characters)
String14lji0cpjloigq
CONTRACT_REFERENCE
required
DContract reference for the authorised mandate as specified on the Payment Consent.StringMY_CONTRACT_REF
EXTERNAL_COLLECTION_REFERENCE
required
DClient specified reference to uniquely identify a collection.
(Maximum permissible length: 4096 characters)
StringMY_COLL_01
CONSENT_ID
required
DThe Payment Consent ID for the authorised mandate to collect againstStringbWFuZGF0ZS8zNjljY2RhMS1jZTQ0LTRiMmMtOThhMC05Mjk3ODNmYWY3NTU
VALUE
required
DThe amount to be collectedDecimal3000.00
COLLECTION_DATE
required
DThe collection date in line with what was agreed on in the mandate. Where dateAdjustmentAllowed has been enabled, this date could be differentISO 86012023-09-25
TRACKING_PERIODDThe number of days a collection needs to be tracked. Only required if, tracking was enabled at the time of mandate initiation. Value should be between 0 to 10Integer1
TOTAL_RECORDS
required
TTotal number of collection items within the fileInteger25
TOTAL_VALUE
required
TThe total value of all the collectionsDecimal10000.00
TOTAL_TRACKING_RECORDSTTotal number of collection items which have tracking enabled within the fileInteger1
TOTAL_TRACKING_VALUETThe total value of all the collections which have tracking enabled within the fileDecimal10000.00

Sample Incoming Collection File

Download sample incoming file

note
  • CONSENT_ID is the Payment Consent ID returned by the Stitch API during Payment Consent creation.
  • dateAdjustmentAllowed is as per your client configuration as setup during onboarding. This indicates that the collection date can differ from what's on the mandate.

Reply File

A REPLY file will inform you of validation results on your collection request and and will indicate which items within the collection batch were submitted, and which were not. Once you have submitted a collection batch file, Stitch will perform two types of validation:

Here are the columns in the REPLY file. The REPLY file communicates the outcome of all of the entries within the submitted collection file, both successes and failures.

FieldDescriptionTypeExample value
RECORD_TYPEThe type of record it is. Values can be P, H, D, or TStringD
LINEWhich line in the file this error pertains toInteger4
CONSENT_IDIn the case of a data validation error, the consent ID for the collection line itemStringbWFuZGF0ZS8zNjljY2RhMS1jZTQ0LTRiMmMtOThhMC05Mjk3ODNmYWY3NTU=
CONTRACT_REFERENCEContract reference for the authorised mandate as specified on the Payment ConsentStringMY_CONTRACT_REF
VALIDATION_RESULTThe status result from the validation. Value can be SUCCESS and FAILEDStringFAILED
STATUS_CODEIndicates whether the collection was submitted or not. In the case that it wasn't, indicates why the collection was not submitted. In the case of failure, the code can be either SCHEMA_VALIDATION_FAILED or DATA_VALIDATION_FAILED.StringSCHEMA_VALIDATION_FAILED
STATUS_REASONProvides detail information about the STATUS_CODEStringHEADER_RECORD_REQUIRED

Schema Validation

Schema validation will involve validating that the file that was sent to Stitch abides by the expected schema.

Failure would result in a SCHEMA_VALIDATION_FAILED error reason in the REPLY file header and, where possible, the data records that failed schema validation. When a file fails schema validation, no collections in that file will be processed.

The table below details possible values for STATUS_REASON in the case of a failure, indicating which part of the schema failed validation:

FieldRuleStatus reasonDescription
Product Header recordsProduct Header record requiredPRODUCT_HEADER_RECORD_REQUIREDProduct Header record required
Product Header recordsNumber of header record fieldsINVALID_PRODUCT_HEADER_RECORDIncorrect number of product header record fields provided
Product Header recordsValidate the titles of the product header rowsINVALID_PRODUCT_HEADER_RECORD_TITLEIncorrect product header titles provided
Header recordsHeader record requiredHEADER_RECORD_REQUIREDHeader record required
Header recordsValidate the titles of the header rowsINVALID_HEADER_RECORD_TITLEIncorrect header titles provided
Header recordsNumber of header record fieldsINVALID_HEADER_RECORDIncorrect number of header record fields provided
Data recordsValidate the titles of the detail rowsINVALID_DETAIL_RECORD_TITLEIncorrect detail titles provided
Data recordsNumber of detail record fieldsINVALID_DETAIL_RECORDIncorrect number of detail record fields provided
Data recordsAt least one detail record requiredDETAIL_RECORD_REQUIREDDetails record required
Trailer recordsValidate the titles of the trailer rowsINVALID_TRAILER_RECORD_TITLEIncorrect trailer titles provided
Trailer recordsTrailer record requiredTRAILER_RECORD_REQUIREDTrailer record required
Trailer recordsNumber of trailer record fieldsINVALID_TRAILER_RECORDIncorrect number of trailer record fields provided
GeneralIncorrect record type specified in the record type fieldINCORRECT_RECORD_TYPEIncorrect record type specified. This may be due to an unexpected ordering of the provided record types.
Example Invalid Reply File

Download sample REPLY file - Schema validation failure

Data Validation

Data validation is carried out on all "Data" (D) record types within the file.

  • Formatting rules are used to validate if the format or schema of the file adheres to the format rules.
  • Data rules are used to validate whether the data of each item in the file adheres to the data rules.

A validation failure would result in a DATA_VALIDATION_FAILED status code in the REPLY file header with each data validation status reason appearing alongside each collection row.

Validation failure
  • If the product header record of a collection file fails data validation, the entire collection file will not be processed!
  • If the header record of a collection file fails data validation, the entire collection file will not be processed!
  • If the product header and header record of a collection file pass data validation, but the data records fail data validation, the header will be processed and the data records that pass data validation will be processed.
  • The data records that fail data validation will be sent back for correction and resubmission in the REPLY file.
Formatting Rules
FieldRecord typeRuleStatus reasonDescription
EXTERNAL_BATCH_REFERENCEHBatch reference requiredBATCH_REFERENCE_REQUIREDMissing batch reference
SUBMISSION_DATETIMEHISO 8601 format for submission datetimeINVALID_SUBMISSION_DATEInvalid submission date provided
EXTERNAL_COLLECTION_REFERENCEDCollection reference requiredINVALID_VALUEMissing collection reference
NONCEDUnique nonce requiredINVALID_VALUEMissing nonce
CONSENT_IDDThe payment consent ID stringINVALID_IDInvalid ID provided
CONTRACT_REFERENCEDContract reference requiredINVALID_VALUEMissing contract reference
COLLECTION_DATEDISO 8601 format for dateINVALID_COLLECTION_DATEInvalid date provided
VALUEDDecimal format for valueINVALID_VALUEInvalid value provided
Data rules
FieldRuleStatus reasonDescription
CLIENT_IDClient ID as provided during onboardingINVALID_CLIENT_IDProvided Client ID doesn't match expected Client ID
PRODUCTAlways COLLECTIONSINVALID_PRODUCTUnexpected product provided
FILE_TYPEAlways COLLECTIONINVALID_FILE_TYPEInvalid file type provided
CHANNELAlways DEBICHECKINVALID_CHANNELInvalid channel provided
EXTERNAL_BATCH_REFERENCEBatch references should be unique for batches that pass schema validationDUPLICATE_BATCH_REFERENCEA batch with this reference already exists
CONTRACT_REFERENCEContract reference should correspond to an existing Payment ConsentINVALID_CONTRACT_REFERENCEContract reference does not match with an existing, GRANTED consent request
SUBMISSION_DATETIMEDate must be current dateINVALID_SUBMISSION_DATEInvalid submission date provided
NONCENonce should be unique per collectionINVALID_NONCECollection with this nonce already exists or has incorrect length
CONSENT_IDID should match an authorised mandateUNMATCHED_MANDATEInvalid consent ID provided
CONSENT_IDID should match an active mandateINACTIVE_MANDATEInvalid consent ID provided. Consent is in a status other than GRANTED
COLLECTION_DATEDate should match what's on the mandateINVALID_COLLECTION_DATEInvalid collection date provided
COLLECTION_DATEDate should be a date in the future (at least 3 days in the future)INVALID_COLLECTION_DATEInvalid collection date provided
COLLECTION_DATEDate should match the frequency and day as per mandate.INVALID_COLLECTION_DATEInvalid collection date provided
COLLECTION_DATEOnly one collection attempt can be created per mandate cycle.DUPLICATE_COLLECTION_ACTION_DATECollection with same collection date already exists
VALUEValue should match what's on the mandateINVALID_VALUEInvalid value provided
TRACKING_PERIODValue should be between 0 to 10.INVALID_TRACKING_PERIODInvalid tracking period provided. Tracking period should be between 0 and 10 day
TRACKING_PERIODOnly to be passed if tracking was enabled while mandate initiation.UNABLE_TO_TRACKUnable to track on this mandate
TOTAL_RECORDSShould be equal to the total count of the D recordsMISMATCHED_TOTAL_RECORDSTotal records does not match total details records provided
TOTAL_VALUEShould be equal to the sum of the value of the D recordsMISMATCHED_TOTAL_VALUETotal value does not match the sum of the value of the details records provided
TOTAL_TRACKING_VALUEShould be equal to the sum of the value of the D records where tracking_period is providedMISMATCHED_TOTAL_TRACKING_VALUETotal tracking value does not match the sum of the value of the details records with tracking period > 0 provided
TOTAL_TRACKING_RECORDSShould be equal to the sum of the total count of the D records where tracking_period is providedMISMATCHED_TOTAL_TRACKING_RECORDSTotal tracking records do not match the records with tracking period >0 provided
Sample Reply File

Download sample REPLY file - Data validation failure for the product header

Download sample REPLY file - Data validation failure for the header

Download sample REPLY file - Data validation failure for the data and trailer

Collection Request Statuses

Below are the possible statuses that can be received in a REPLY file when schema and data validation are successful. These are represented in the "Header" (H) record:

StatusRecord typeStatus codeDescription
SUBMITTEDHSUBMITTEDCollection batch has been submitted
NOT_SUBMITTEDHNOT_SUBMITTEDCollection batch has not been submitted due to schema or data validation errors

Output File

An OUTPUT file will be used to inform you of the collection results for all the valid collections that were submitted, as well as their associated settlement status. You will receive this file daily, and it will reflect any updates to collections that were processed during the day.

FieldRecord typeDescriptionTypeExample value
RECORD_TYPEP,H,D,TDenotes the record type. Either P,H,D or TStringD
CLIENT_IDPClient ID as issued during onboardingUUID399a7ed1-0617-40f1-a9b7-d66f07b3a29d
PRODUCTPProduct that the file is for. In this case, it will always be COLLECTIONSStringCOLLECTIONS
CHANNELPChannel within a specific product that the file is for. This will always be DEBICHECKStringDEBICHECK
FILE_TYPEPType of file indicating what contents should be expected. This will be either REPLY, OUTPUT, DISPUTE, SETTLEMENTStringREPLY
EXTERNAL_BATCH_REFERENCEDThe client specified batch reference, as it was supplied in the original collection file.StringMY_COLL_03
EXTERNAL_COLLECTION_REFERENCEDThe original external collection reference for the collection, as supplied by you in the Incoming fileStringMY_COLL_03
CONSENT_IDDThe Payment Consent IDStringbWFuZGF0ZS8zNjljY2RhMS1jZTQ0LTRiMmMtOThhMC05Mjk3ODNmYWY3NTU
CONTRACT_REFERENCEDContract reference of the mandateStringcontractRefernce1
COLLECTION_IDDThe unique ID for the collectionStringZGUxZGM5NDItMGNkYS00ZDgzLTkxYzctMzY0N2MxODJlNGE5
COLLECTION_DATEDDate on which the funds were collected, in ISO 8601 formatISO 86012023-09-25
VALUEDCollection valueDecimal653.04
COLLECTION_STATUSDThe status of the collection from the debtorStringFAILED
COLLECTION_REASONDReason for the associated failed collection statusStringIncorrect collection date
SETTLEMENT_STATUSDThe status of the settlement to the clientStringPENDING
SETTLEMENT_REFERENCEDThe reference for the settlement payment to the client (case-insensitive)StringHJ24GNBZC
TYPEDIndicates the type of DebiCheck. The value can either be RMS or DCStringDC
TOTAL_RECORDSTTotal # of collection items within the fileInteger25
TOTAL_COLLECTION_VALUETTotal value of the collections within the fileDecimal10000.00
TOTAL_COLLECTION_SUCCESS_RECORDSTTotal number of successful collectionsInteger15
TOTAL_COLLECTION_SUCCESS_VALUETTotal value of successful collectionsDecimal7856.00
TOTAL_COLLECTION_FAILED_RECORDSTTotal number of failed collectionsInteger10
TOTAL_COLLECTION_FAILED_VALUETTotal value of failed collectionsDecimal0.00
TOTAL_COLLECTION_PENDING_RECORDSTTotal number of collections in pending stateInteger2
TOTAL_COLLECTION_PENDING_VALUETTotal value of collections in pending stateDecimal0.00
TOTAL_COLLECTION_DISPUTED_RECORDSTTotal number of disputed collections (Only in case of DISPUTE file)Integer2
TOTAL_COLLECTION_DISPUTED_VALUETTotal value of disputed collections (Only in case of DISPUTE file)Decimal100.00
Sample Output file

Download sample OUTPUT file - OUTPUT file type

Download sample OUTPUT file - DISPUTE file type

Download sample OUTPUT file - SETTLEMENT file type


Daily files

OUTPUT files will be generated daily. They will include collections that were processed by the end of that specific day, as well as any collections whose settlement statuses have changed. An OUTPUT file can reflect collection results across different collection batches.

Below are the possible collection reason codes that can be received in an OUTPUT file per collection line item:

COLLECTION_STATUSRECORD_TYPECOLLECTION_REASONDescription
SUCCESSDPROCESSEDCollection was successful
FAILEDDPAYMENT_SUSPENDEDPayment stopped by account holder
FAILEDDINSUFFICIENT_FUNDSInsufficient funds in the debtors account
FAILEDDAUTHENTICATION_REQUIREDMandate needs to be re-authenticated
FAILEDDBANK_ERRORA system error occurred at the bank
FAILEDDBANK_PROCESSING_ERRORCreditor bank unable to process due to problem
FAILEDDINACTIVE_ACCOUNTAccount frozen, account in liquidation, account closed, or account holder deceased
FAILEDDINVALID_ACCOUNTDebits not allowed on this account, account not found, or debtor account number fails CDV routine
FAILEDDBENEFICIARY_BANK_PROCESSING_ERRORCreditor bank unable to process due to problem
FAILEDDMANDATE_SUSPENDEDMandate is suspended
FAILEDDINVALID_USER_REGISTRATIONUser not correctly registered
FAILEDDDUPLICATE_TRANSACTIONDuplicate transaction identified, there is another transaction already in progress with this consent ID
PENDINGDPENDINGCollection has been submitted to partner bank for collection and will be actioned on collection date
DISPUTEDDDISPUTEDCollection has been disputed by the customer and has been refunded by the bank. Amount will be deducted from the settlement.

Below are the possible settlement statuses that can be received in an OUTPUT file per collection line item:

StatusRecord typeDescription
PENDINGDSettlement will be submitted to the bank after funds have been successfully collected from the debtor. No action required.
SUCCESSDSettlement was successfully submitted, and confirmation has been received by the bank.

File naming

Outgoing

These are files you send to Stitch.

In order to easily distinguish between different files, you will be required to follow the below naming conventions for any files you send to Stitch via SFTP. You will be placing your files in the Collections folder.
The complete file name will be : <product>/<datettime>_<index>.csv.

Where:

  • product is always Collections
  • datetime is the current Datetime in ISO format excluding special characters and non-numeric characters, for example, 202401011200560123
  • index is an index generated by you to append to the end of the file name. This index ensures uniqueness across the files and should start at 0 and be incremented by 1 with each submission. There is no limit to the size of this index. No two indexes can be the same.

An example of this file name would be Collections/202401011200560123_1.csv

Incoming

These are files you can expect to receive from Stitch.

You wil receive files with the following naming convention, in your Collections folder. The complete file name will be: <product>/<datettime>_<fileType>.csv.

Where:

  • product is always Collections
  • datetime is the current Datetime in ISO format without special characters i.e. 202401021200560123
  • fileType is the file type that you are receiving. This will be either REPLY or OUTPUT.

An example of this file name would be Collections/202401011200560123_OUTPUT.csv

note
  • The product value corresponds with the PRODUCT value provided within the file as a part of the Product Header
  • The fileType value corresponds with the FILE_TYPE value provided within the file as a part of the Product Header
Collections Folder

Your files must be placed in the Collections folder. If your files aren't placed here, they will not be picked up.