Developer Resources
Details
SoapAction | http://jackhenry.com/ws/XferAdd |
Input Name | XferAdd |
Output Name | XferAddResponse |
Input Namespace | http://jackhenry.com/jxchange/TPG/2008 |
Group Name | Transaction |
Container | TPG_TransactionMaster.xsd |
Operation Summary
Transfer Add (XferAdd) provides the ability to transfer funds between accounts, make a loan payment, schedule a future transaction, create recurring transactions and transfer funds to an account held at another institution using ACH which requires the ACHXferRec complex to be included in the request.
The <XferType>
element identifies the type of transfer operation. Canonical values are:
Values | Description |
---|---|
Xfer | Intra-Financial Institution transfer |
ACH | Inter-Financial Institution transfer |
Fut | Future transfer |
It designates whether the transfer is between accounts within the financial institution, between separate institutions, or to be performed in the future.
The <AcctIdFrom>
and <AcctIdTo>
complexes represent the account id and type of the source and destination accounts intended for the transfer.
If the transfer will be moving funds within the financial institution, then the <XferRec>
complex will need to be included. This is the complex that details the transfer.
The <XferSrcType>
element indicates the source of the transfer request. Canonical values are:
Values | Description |
---|---|
ATM | ATM |
InPerson | Teller |
Intnet | Internet |
Tele | Telephone |
Trancodes are parameter driven and can vary institution to institution. To retrieve the list of possible TranCodes from a service provider for a given institution, the ParmValSrch operation should be called with TranCodeCode for the <ParmName>
element value.
The FutXferRec complex provides a method for scheduling a transfer to occur between accounts on a semi-monthly basis by utilizing the following elements:
Element Name | Description |
---|---|
SemiDay1 | This is the day of month for first semi-monthly payment. |
SemiDay2 | This is the day of month for second semi-monthly payment. |
FutXferFirstDt | This is the first date to start a future transfer request. |
FutXferExpDt | This is the expiration date of the transfer request. |
FutXferFreqUnits | The units of frequency for the transfer request. |
The Transfer Add API also provides the ability to transfer funds to an account held at another institution using ACH. The ACHXferRec complex will need to be included in the request. This complex defines a transfer through an ACH transaction.
The XferAdd API response will contain an <RsStat>
element indicating the result of the operation, with a value of Success when completed normally or the operation will return an HdrFault if the service provider was unable to complete the transfer. It will also return a value in the <XferKey>
element, which will be needed to modify or delete the transfer.
Special Considerations
The <RedPrinc>
element is used to determine what transaction code should be used to post the transaction to a loan. If the transaction code is not furnished a transaction code is assigned that indicates the transaction is a transfer from DDA or from Savings-depending on the type of from account being debited.
If the transaction code is furnished in the incoming message and the <RedPrinc>
element is “Y”, the program verifies the transaction code is set up for principal reduction. If it is not set up as a credit that affects the principal an error of 500044 (Tran Code must affect credit to principal) is returned. If the transaction code supplied in the message is not a credit or a transaction code that allows the system to determine how to apply the transaction an error of 500045 (Tran code must affect credit to Q ) will be returned.
If the transfer to account is a loan then the value must be true or false. If it is not, an error 500016 (Principal reduction code must be Y or N when the to account is a loan) will be returned.
If the to account for the transfer is not a loan, then the value must be false or error 500036 (Principal reduction code must be N when the to account is not a loan) will be returned.
Depending on the transaction behavior indicated by the trancode, certain transaction requests may result in one or more faults. Faults that are categorized as a Fault can be overridden by specifying them in the complex, while those categorized as an Error cannot be overridden.
The API, Transfer Source Destination Search XferSrcDestSrch, provides consumers with a listing of accounts/drafts/loans that may be on the source and/or destination side of a transfer request. The response includes elements that could be of interest to the consumer in establishing the identity of the accounts/drafts/loans in a transfer relationship.
The XferSrcDestType element provides a filter by passing one of the following canonical values:
Values | Description |
---|---|
Src | Source account that is the source of the funds transfer. |
Dest | Destination account that is to receive the funds transfer. |
Both | Both source and destination accounts. |
The core provider will return all Transfer Source Destination Types (XferSrcDestType) when the element is absent from the request.
The Transfer Add Validate XferAddValidate API allows the validation of the information without the creation of the actual transactions within the provider.
Additional Concerns
- XferAdd does not provide support for either the target or source accounts to be a Time Deposit or General Ledger Type. If a Time Deposit or GL transaction is required by the use case, the Transaction Add TrnAdd API will need to be used instead.
- XferAdd, XferMod and XferSrch APIs implement a store/forward function for in-house transfers only. If nightly process is in a state that prevents the current transfer from completing successfully, the transactions will be stored by SilverLake and CIF 20/20 and applied to the next business day. This will be transparent to the customer and to the consumer if the values pass the validation process with a Success will be returned in the response.
XML Examples
XferAdd Future-MultipleDays Request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<XferAdd xmlns="http://jackhenry.com/jxchange/TPG/2008">
<MsgRqHdr>
<jXchangeHdr>
<JxVer/>
<AuditUsrId></AuditUsrId>
<AuditWsId></AuditWsId>
<AuthenUsrId/>
<ConsumerName/>
<ConsumerProd/>
<Ver_1/>
<jXLogTrackingId>{Insert}</jXLogTrackingId>
<Ver_2/>
<InstRtId>011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId/>
<Ver_4/>
<WorkflowCorrelId/>
<Ver_5/>
<ValidConsmName>{Insert}</ValidConsmName>
<ValidConsmProd>{Insert}</ValidConsmProd>
<Ver_6/>
</jXchangeHdr>
<Ver_1/>
<Ver_2/>
<Ver_3/>
</MsgRqHdr>
<ErrOvrRdInfoArray>
<ErrOvrRd>
<ErrCode>500000</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500005</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500006</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500011</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500014</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500019</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500029</ErrCode>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>500031</ErrCode>
</ErrOvrRd>
</ErrOvrRdInfoArray>
<AcctIdFrom>
<FromAcctId>357459</FromAcctId>
<FromAcctType>D</FromAcctType>
</AcctIdFrom>
<AcctIdTo>
<ToAcctId>357384</ToAcctId>
<ToAcctType>D</ToAcctType>
</AcctIdTo>
<Ver_1/>
<XferType>Fut</XferType>
<Ver_2/>
<FutXferRec>
<Amt>1.34</Amt>
<TrnCodeCode>641</TrnCodeCode>
<FutXferFirstDt>2020-07-14</FutXferFirstDt>
<FutXferFreq>7</FutXferFreq>
<FutXferFreqUnits>Days</FutXferFreqUnits>
<Ver_1/>
<FutXferOccr>6</FutXferOccr>
</FutXferRec>
<Ver_3/>
</XferAdd>
<Custom/>
<Ver_1/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XferAdd Future-MultipleMonths Request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<XferAdd xmlns="http://jackhenry.com/jxchange/TPG/2008">
<MsgRqHdr>
<jXchangeHdr>
<JxVer/>
<AuditUsrId></AuditUsrId>
<AuditWsId></AuditWsId>
<AuthenUsrId/>
<ConsumerName/>
<ConsumerProd/>
<Ver_1/>
<jXLogTrackingId>{Insert}</jXLogTrackingId>
<Ver_2/>
<InstRtId>011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId/>
<Ver_4/>
<WorkflowCorrelId/>
<Ver_5/>
<ValidConsmName>{Insert}</ValidConsmName>
<ValidConsmProd>{Insert}</ValidConsmProd>
<Ver_6/>
</jXchangeHdr>
<Ver_1/>
<Ver_2/>
<Ver_3/>
</MsgRqHdr>
<ErrOvrRdInfoArray>
<ErrOvrRd>
<ErrCode/>
<Ver_1/>
</ErrOvrRd>
</ErrOvrRdInfoArray>
<AcctIdFrom Rstr="">
<FromAcctId>28399</FromAcctId>
<FromAcctType>D</FromAcctType>
<Ver_1/>
</AcctIdFrom>
<AcctIdTo Rstr="">
<ToAcctId>810</ToAcctId>
<ToAcctType>S</ToAcctType>
<Ver_1/>
</AcctIdTo>
<Custom/>
<Ver_1/>
<XferType>Fut</XferType>
<Ver_2/>
<FutXferRec>
<Amt>2</Amt>
<RedPrinc>false</RedPrinc>
<TrnCodeCode/>
<PrtRcpt>false</PrtRcpt>
<FutXferFirstDt>2020-09-02</FutXferFirstDt>
<FutXferDayOfMonth>2</FutXferDayOfMonth>
<FutXferFreqUnits>Months</FutXferFreqUnits>
<FutXferFreq>3</FutXferFreq>
<EftDescArray>
<EftDescInfo>
<EftDesc>Just a transfer</EftDesc>
<Ver_1/>
</EftDescInfo>
<EftDescInfo>
<EftDesc/>
<Ver_1/>
</EftDescInfo>
</EftDescArray>
<SvcPrvdInfo/>
<Ver_1/>
<FutXferOccr>0</FutXferOccr>
<Ver_2/>
<FutXferMatPmtCode/>
<Ver_3/>
<RcptDlvryMthd/>
<PrtPartRcpt/>
<Ver_4/>
<FutXferDayOfWeek/>
<FutXferDayOfWeekOccur/>
<Ver_5/>
</FutXferRec>
<Ver_3/>
</XferAdd>
<Custom/>
<Ver_1/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XferAdd Future-OneTime Request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<XferAdd
xmlns="http://jackhenry.com/jxchange/TPG/2008">
<MsgRqHdr>
<jXchangeHdr>
<JxVer/>
<AuditUsrId>Test</AuditUsrId>
<AuditWsId>Test</AuditWsId>
<AuthenUsrId/>
<ConsumerName/>
<ConsumerProd/>
<Ver_1/>
<jXLogTrackingId>9876543211</jXLogTrackingId>
<Ver_2/>
<InstRtId>011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId/>
<Ver_4/>
<WorkflowCorrelId/>
<Ver_5/>
<ValidConsmName>Redacted</ValidConsmName>
<ValidConsmProd>Redacted</ValidConsmProd>
<Ver_6/>
</jXchangeHdr>
<Ver_1/>
<Ver_2/>
<Ver_3/>
</MsgRqHdr>
<ErrOvrRdInfoArray>
<ErrOvrRd>
<ErrCode>500019</ErrCode>
<Ver_1/>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode>100239</ErrCode>
<Ver_1/>
</ErrOvrRd>
</ErrOvrRdInfoArray>
<AcctIdFrom>
<FromAcctId>402719</FromAcctId>
<FromAcctType>D</FromAcctType>
<Ver_1/>
</AcctIdFrom>
<AcctIdTo>
<ToAcctId>98198</ToAcctId>
<ToAcctType>D</ToAcctType>
<Ver_1/>
</AcctIdTo>
<Ver_1/>
<XferType>Fut</XferType>
<Ver_2/>
<FutXferRec>
<Amt>0.99</Amt>
<FutXferFirstDt>2024-05-28</FutXferFirstDt>
<FutXferNextDt>2024-05-28</FutXferNextDt>
<FutXferFreq>1</FutXferFreq>
<FutXferFreqUnits>Days</FutXferFreqUnits>
<Ver_1/>
<Ver_2/>
<Ver_3/>
<Ver_4/>
<Ver_5/>
</FutXferRec>
<Ver_3/>
</XferAdd>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XferAdd ACH Request
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<XferAdd xmlns="http://jackhenry.com/jxchange/TPG/2008">
<MsgRqHdr>
<jXchangeHdr>
<JxVer></JxVer>
<AuditUsrId></AuditUsrId>
<AuditWsId></AuditWsId>
<AuthenUsrId></AuthenUsrId>
<ConsumerName></ConsumerName>
<ConsumerProd></ConsumerProd>
<Ver_1/>
<jXLogTrackingId>{Insert}</jXLogTrackingId>
<Ver_2/>
<InstRtId JHANull="" Rstr="">011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId></BusCorrelId>
<Ver_4/>
<WorkflowCorrelId></WorkflowCorrelId>
<Ver_5/>
<ValidConsmName>{Insert}</ValidConsmName>
<ValidConsmProd>{Insert}</ValidConsmProd>
<Ver_6/>
</jXchangeHdr>
<Ver_1/>
<AuthenUsrCred>
<ns1:Security xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"></ns1:Security>
</AuthenUsrCred>
<Ver_2/>
<AuthenProdCred>
<ns2:Security xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"></ns2:Security>
</AuthenProdCred>
<Ver_3/>
</MsgRqHdr>
<ErrOvrRdInfoArray>
<ErrOvrRd>
<ErrCode></ErrCode>
<Ver_1/>
</ErrOvrRd>
<ErrOvrRd>
<ErrCode></ErrCode>
<Ver_1/>
</ErrOvrRd>
</ErrOvrRdInfoArray>
<AcctIdFrom Rstr="">
<FromAcctId SrchType="" MaskVal="">28399</FromAcctId>
<FromAcctType>D</FromAcctType>
<Ver_1/>
</AcctIdFrom>
<AcctIdTo Rstr="">
<ToAcctId SrchType="" MaskVal="">810</ToAcctId>
<ToAcctType>S</ToAcctType>
<Ver_1/>
</AcctIdTo>
<XferRec/>
<Custom></Custom>
<Ver_1/>
<XferType>ACH</XferType>
<ACHXferRec>
<ACHDrName>John Doe</ACHDrName>
<ACHDrRtNum>011001276</ACHDrRtNum>
<ACHDrAcctId>28399</ACHDrAcctId>
<ACHDrAcctType>D</ACHDrAcctType>
<ACHCrRtNum>011001276</ACHCrRtNum>
<ACHCrAcctId>810</ACHCrAcctId>
<ACHCrAcctType>S</ACHCrAcctType>
<ACHXferAmt>1.0</ACHXferAmt>
<ACHOneTime>Y</ACHOneTime>
<ACHTermCnt>1</ACHTermCnt>
<ACHTermUnits>Days</ACHTermUnits>
<ACHNextXferDt>2020-09-22</ACHNextXferDt>
</ACHXferRec>
</XferAdd>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XferAdd IntraFITransfer Request
<!-- The following example shows how to perform an Intra-Financial -->
<!-- Institution transfer between two DDA accounts belonging to -->
<!-- two separate customers. -->
<XferAdd xmlns="http://jackhenry.com/jxchange/TPG/2008">
<MsgRqHdr>
<jXchangeHdr>
<JxVer/>
<AuditUsrId>PA</AuditUsrId>
<AuditWsId>IDG</AuditWsId>
<AuthenUsrId/>
<ConsumerName/>
<ConsumerProd/>
<Ver_1/>
<jXLogTrackingId/>
<Ver_2/>
<InstRtId JHANull="" Rstr="">011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId/>
<Ver_4/>
<WorkflowCorrelId/>
<Ver_5/>
<ValidConsmName>CONSUMER NAME</ValidConsmName>
<ValidConsmProd>CONSUMER PRODUCT</ValidConsmProd>
<Ver_6/>
</jXchangeHdr>
</MsgRqHdr>
<ErrOvrRdInfoArray>
<ErrOvrRd>
<ErrCode>500019</ErrCode>
</ErrOvrRd>
</ErrOvrRdInfoArray>
<AcctIdFrom>
<FromAcctId>46635</FromAcctId>
<FromAcctType>D</FromAcctType>
</AcctIdFrom>
<AcctIdTo>
<ToAcctId>2645</ToAcctId>
<ToAcctType>D</ToAcctType>
</AcctIdTo>
<XferRec>
<Amt>1.00</Amt>
<RedPrinc>N</RedPrinc>
<Ver_1/>
<TrnCodeCode>9</TrnCodeCode>
<Ver_2/>
<DrTrnCodeCode>1</DrTrnCodeCode>
</XferRec>
</XferAdd>
XferAdd Response
<XferAddResponse
xmlns="http://jackhenry.com/jxchange/TPG/2008"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MsgRsHdr>
<jXchangeHdr>
<JxVer>R2016.2</JxVer>
<AuditUsrId>PA</AuditUsrId>
<AuditWsId>IDG</AuditWsId>
<AuthenUsrId/>
<ConsumerName/>
<ConsumerProd/>
<Ver_1/>
<jXLogTrackingId>7AA9492C-237E-CA75-EFD2-1E1A5E98C70D</jXLogTrackingId>
<Ver_2/>
<InstRtId>011001276</InstRtId>
<InstEnv>TEST</InstEnv>
<Ver_3/>
<BusCorrelId>577287da-e725-4fca-9568-40f0458e4f58</BusCorrelId>
<Ver_4/>
<WorkflowCorrelId/>
<Ver_5/>
<ValidConsmName></ValidConsmName>
<ValidConsmProd></ValidConsmProd>
</jXchangeHdr>
<Ver_1/>
</MsgRsHdr>
<XferKey>JV26ADEFXT</XferKey>
<RsStat>Success</RsStat>
<Ver_1/>
</XferAddResponse>
XferAdd FAQ
General Questions
Question: (SilverLake and CIF 2020) What account types work with XferAdd?
Answer: D, S, X, L, O
Question Changed the <RedPrinc>
to “Y” when using the code 7 (principal only) and it worked, but for code 30 (escrow only) still not working.
Answer: The XferAdd message isn’t designed to support all payment types. It’s the JX version of Telephone Transfer. Normally a person wouldn’t call the bank and ask to have their mortgage escrow balance increased. XferAdd will support a regular loan payment and a principal only, but that’s all it should be used for. Anything beyond those two loan transaction types need to use the TrnAdd message. TrnAdd is one sided, meaning it does not support both the credit and debit information in one message call so you’ll need to make two calls to the service.
Question We are worried about ensuring the data integrity. I know we have a Batch Number property available in the TrnInfo_CType inside the TrnAddRequest. For this use case we could end up having 6 transfer calls:
- Regular Payment Debit
- Regular Payment Credit
- Principal Debit
- Principal Credit
- Escrow Debit
- Escrow Credit
- Is it safe to assume that we can/should set the same batch number for those 6 transactions? Is there a way to determine this number?
- If one of the transactions fail, do we need do something in our side to undo the ones that worked or this is handled correctly in JxChange side?
- Is there another mechanism to group those 6 transactions?
Answer: Yes, you can use the same batch number. Batch numbers are not assigned so you can use any numeric value. The type of failure would determine next steps. These are just a few examples. You will want to think through others so you have a complete set of un-happy path behaviors.
- If the transaction failed due to SilverLake Business Service validation, then the values could be corrected and the message resent. If it continues to fail, then you can either keep retrying or you can use TrnMod to delete the first transaction.
- If there is an interruption in communication, then you’ll want to verify if the transaction made it to SilverLake and if it was successful or not, then determine next steps.
There isn’t any current message that would allow you to group all transactions into one method call. I would recommend using the <BusCorrelId>
element. This allows you to group items according to a unit of work. It doesn’t impact the core values nor provide any grouping mechanism there but if there is a situation where you need to search for associated transactions in the JX or iAdapter logs, this would provide a list of all the messages with that value.
Question I noticed in the XfrAdd Request that there is a field <RedPrinc>
for principal payment. Is that used for PrincipalOnly? If we would like to make a regular payment with an addition to principal in a single transfer, is that supported and how should we formulate the request?
Answer: Yes, <RedPrinc>
is the element for PrincipalOnly. Making an additional Principal payment would require 2 calls because there’s no way to distinguish in one test that a portion of the amount should be split between principal and the rest to regular payment which would include late fees, interest, etc. For more information see the Operation Summary tab.
Question Can you tell us whether it is possible the use the <XferAdd>
operation but memopost the two account instead of “hard-posting”? The <TrnAdd>
operation allows us to specify “MemoPostOnly” but we do not see the same capability for <XferAdd>
Transfer Funds.
Answer: Unfortunately the XferAdd operation does not have MemoPostOnly capability. The XferAdd transaction will memo post until the EOD occurs for the bank, then it is hard posted. Only TrnAdd has the MemoPostOnly option.
Question So just to confirm. The XferAdd will turn into a hard post without requiring a posting file?
Answer: Yes, XferAdd will hard post without requiring a posting file.
Question SilverLake We are attempting to do a loan payment and we are receiving a 500045 error “Tran code must affect credit to ‘Q’”. How can we fix this?
Answer: The XferRec.RedPrinc element is used to determine what transaction code should be used to post the transaction to a loan. If the transaction code is not furnished a transaction code is assigned that indicates the transaction is a transfer from DDA or from Savings-depending on the type of from account being debited.
- If the transaction code is furnished in the incoming message and the RedPrinc element is ‘Y’ the program verifies the transaction code is set up for principal reduction. If it is not set up as a credit that affects the principal an error of 500044 (Tran Code must affect credit to principal) is returned. If the transaction code supplied in the message is not a credit or a transaction code that allows the system to determine how to apply the transaction an error of 500045 (Tran code must affect credit to ‘Q’) will be returned.
- If the transfer to account is a loan then the value must be true or false. If it is not an error 500016 (Principal reduction code must be Y or N when the to account is a loan) will be returned.
- If the to account for the transfer is not a loan then the value must be false or error 500036 (Principal reduction code must be N when the to account is not a loan) will be returned.
Question After performing a XferAdd doing a loan payment, the information in AcctInq for the loan remains the same. Does the EOD need to process for the information to be updated?
Answer: As for AcctInq, I am seeing balances change when I run the same XferAdd. The date of next payment stayed the same because of the transaction code used is a 349 (which defaulted in because TrnCodeCode was set to 0). A 349 transaction code in LNPAR3 has field ‘Affect Next Pmt Date’ set to No, so that’s why next payment date stayed the same.
Question Can we use XferAdd to make escrow payment to the loan?
Answer: Short answer is they can’t use XferAdd for escrow-only debits/credits. The only tran codes from LNPAR3 (Loan Transaction Code Parameter file) that can be used for one-time transfers must have Affects Code (L3AFFT) of either P (Principal), I (Interest), or Q (Regular Payment-Computer Split).
Based on what I’m seeing available in business services, <TrnAdd>
would be the only way I can see making escrow-only payments.
Question Can I use XferAdd to pay Credit Card?
Answer: No, you would need to use the CrCardTrnAdd service (listed under the CPS RTP provider).
Question I get errors when doing a XferAdd with a General Ledger (GL) account. What do I need to do to correct the errors?
Answer: XferAdd does not work with General Ledger accounts. You MUST use <TrnAdd>
.
Question Core Director What fields in XferAdd operation do we use to pass the debit trans code description and credit trans code description?
Answer: For XferType = Xfer we currently parse the description out of the EftDescArray. We place the first entry in the array in the 1st suspense description and the second entry in the array in the 2nd suspense description, for example:
<AcctIdFrom>
<FromAcctId >10003606</FromAcctId >
<FromAcctType>10</FromAcctType>
<Ver_1 />
</AcctIdFrom>
<AcctIdTo>
<ToAcctId>2110011</ToAcctId>
<ToAcctType>10</ToAcctType>
<Ver_1 />
</AcctIdTo>
<XferRec>
<Amt>1.23</Amt>
<EftDescArray>
<EftDescInfo>
<EftDesc>Test Description 1</EftDesc>
<Ver_1 />
</EftDescInfo>
<EftDescInfo>
<EftDesc>Test Description 2</EftDesc>
<Ver_1 />
</EftDescInfo>
</EftDescArray>
Question When we use XferAdd (Intra-FI example) to transfer money from an account of Saving type to another account of DepositType the AvlBal property on the Saving account is not updated immediately (on deposit acct it is updated immediately). Can you tell us what transfer codes (TrnCodeCode and DrTrnCodeCode) should we use so the AvlBal property will be updated immediately and the transfer will be processed with success?
Answer: There are bank settings that affect certain types of credits and debits that the bank can select that will allow the AvailBal to be updated or not when those events occur. Items such as Add Memo Credits, Add ACH Credits, Add POD Credits, etc. This is basically a Y/N switch. Since it is configurable at the bank level, you may need to be prepared to handle a scenario where you will not see updates to AvailBal elements if certain events occur. Since the effect is set at the core level, you will not be able to affect a change via the jX calls to reverse the effect. This may be something you will need to discuss with each bank to understand their settings. If the bank is unfamiliar with the settings, inform them that it is found on the Service Charge Parameter Maintenance core screens.
Question If we want to transfer money from one Deposit account to another Deposit account, can we use the same codes, or do we need to use some other codes? If not what codes should we use for these kinds of transfers?
Answer: As a vendor, normally the bank will inform you what transfer codes for you to use. If they do not, you are able to pass in the operation with those fields blank and the system will enter the codes that are set as default into the operation.
Question Core Director It is my understanding that the DrTrnCodeCode field is the tran code that will be used to withdraw (debit) the money from the “from” account. True or False?
Answer: Yes, the DrTrnCodeCode relates to the from account.
Question Core Director If I only pass the TrnCodeCode (aka the credit TranCode), what TranCode will be used on the debit side? Once I get a list of the defined TranCodes to use for this instance of Core Director, can I pass both fields (DrTrnCodeCode and TrnCodeCode), with proper values, in the same request?
Answer: You can send both the TrnCodeCode and the DrTrnCodeCode. But if you do not, there are parameters that can be defined for that interface/vendor in MNTJXC for default TranCode’s (both debit and credit). If defined, these defaults will be used if the TrnCodeCode/DrTrnCodeCode is not sent in on the request.
ACH Questions
Question How do I get values for the ACHStdEntryClass element?
Answer: The ACHStdEntryClass is a parameterized element. You may obtain the values by utilizing the ParmValSrch operation passing in ParmName = ACHStdEntryCode.
Question Still get the same error “Next transfer date is invalid” by substituting <ACHNextXferDt JHANull="" Rstr="">2019-02-13</ACHNextXferDt> with <ACHNextXferDay xsi:nil="true"/>
Answer: ACHOneTime is throwing us off here. It’s mapped to ACTMST/ACTARC and the description for this field is “Auto Recurring entry”. So by putting a Y in this element we are saying ‘Yes’ this is an auto-recurring entry. There’s reverse logic here, so this element needs to be set to N for one time transfers. When you run the test with ACHOneTime changed to N, another error will occur saying that ACHTermUnits needs to be blank. If you input NA for ACHTermUnits, then run the test, you should get a success.
Incorrect:
<ACHXferRec>
<ACHDrName>John Doe</ACHDrName>
<ACHDrRtNum>161788444</ACHDrRtNum>
<ACHDrAcctId>332456</ACHDrAcctId>
<ACHDrAcctType>D</ACHDrAcctType>
<ACHCrAcctId>1717</ACHCrAcctId>
<ACHCrAcctType>D</ACHCrAcctType>
<ACHXferAmt>0.01</ACHXferAmt>
<ACHFeeAmt>0.01</ACHFeeAmt>
<ACHOneTime>Y</ACHOneTime>
<ACHNextXferDt JHANull="" Rstr="">2019-02-13</ACHNextXferDt>
<ACHFeeDrAcctId>332456</ACHFeeDrAcctId>
<ACHFeeDrAcctType>D</ACHFeeDrAcctType>
</ACHXferRec>
Correct:
<ACHXferRec>
<ACHDrName>John Doe</ACHDrName>
<ACHDrRtNum>11001276</ACHDrRtNum>
<ACHDrAcctId>1234</ACHDrAcctId>
<ACHDrAcctType>D</ACHDrAcctType>
<ACHCrAcctId>1717</ACHCrAcctId>
<ACHCrAcctType>D</ACHCrAcctType>
<ACHXferAmt>0.01</ACHXferAmt>
<ACHFeeAmt>0.01</ACHFeeAmt>
<ACHOneTime>N</ACHOneTime>
<ACHTermCnt>0</ACHTermCnt>
<ACHTermUnits>NA</ACHTermUnits>
<ACHNextXferDay xsi:nil="true"/>
<ACHFeeDrAcctId>1234</ACHFeeDrAcctId>
<ACHFeeDrAcctType>D</ACHFeeDrAcctType>
</ACHXferRec>
Question Sometimes there is an error with the message “Master account number cannot be duplicated”, but we are not sure what it means.
Answer: The AcctIdFrom.FromAcctId in XferAdd for ACH represents the ACH master account number that will be used to create the actual ACH entries when the core processes ACH. It is a number that will be used for modifications in the ACH Master file. It is not necessarily the debit account number in the transfer (ACHXferRec.ACHDrAcctId), however many banks use the on-us account number for this value.
Since this is the key to the ACH Master file it must be unique for each transfer that is set up in the ACH master and can only occur in the file one time. If this number is not unique the business service will issue the “Master account number cannot be duplicated” error you see. It might be helpful to think of FromAcctId being used as a primary key for the ACH transfer.
If you have multiple ACH entries for the same transaction account already, you could use a sequential method for assigning these number. Maybe start out with the first one being the account number (10987654321) and then append a ‘1’, ‘2’, ‘3’ . . . . on the next entries (109876543211, 109876543212, . . .).
Question SilverLake We are trying to add a new ACH transfer using XferAdd. The response has errors for fields ACHCompEntryDesc, ACHCompName and ACHCompId (They cannot be blank). We check the SvcDictSrch and these fields are set as not required. We tested this same request in the test environment and XferAdd accepts blank for these fields. Is there any configuration to change that behavior in the XferAdd? Or what would be valid values for these fields in this case?
Answer: These fields can be used to match a company setup in ACH Company Maintenance for those entities that send ACH transfers frequently. These fields must be populated regardless of whether the ACH is coming from a company or not. If the ACH is coming from a company, they may want to use ACHCompMultiInq or ACHCompSrch to obtain the values for these elements. If not coming from a company they can input any value they want. If the values passed in do not match a company setup in ACH Company Maintenance the records will still be processed, they just wouldn’t cross-reference a company setup in ACH Company Maintenance. In ACH General Parameters, those fields can be used to match against a company for purposes such as item counters and exposure limits.
Question SilverLake One of our customer requirement is to implement the indefinite recurring transfers. Can we achieve this by sending end date as empty data elements?
Answer: Yes, in order to achieve an indefinite transfer the user would not populate ACHXferExpireDt (for ACH) or FutXferExpDt (AFT).
Question SilverLake Can federal tax payments be sent via ACH through the XferAdd service? And if so, are there any special parameters etc. that need to be passed into the request?
Answer: No, the XferAdd – ACH does not support ACH Federal Tax Payments entries via this operation. Core does not allow/support ACH Federal Tax Payments entered via the ACH Auto Transfers which is equivalent to the XferAdd – ACH operation. There are special codes and information that has to be entered to build the ACH NACHA record that is not supported within ACH Auto Transfers.
Question When we send ACH transfers using XferAdd API or sending NACHA file using ACHFileAdd API how are they processed to send to ACH network? Is there a daily cutoff time for this processing?
Answer: Please refer to the ACHFileAdd FAQ for information.
Question What values do I use for FromAcctId and ToAcctId for ACH transfer types?
Answer: When it comes to ACH transfer types, the FromAcctId is considered a unique record identifier and should be a unique value for every transfer request. There is a maximum of 15 digits to be used in this field. The ToAcctId should be omitted. The account numbers for the debit and credit accounts are supplied in the ACHXferRec.
Question Core Director We are trying to execute transactions that require override through xferAdd API. Is there documentation on the override transaction codes?
Answer: XferAdd has a number of override codes available:
- Closed – If Account Status is “C” error returned in 1004.
- Dormant - If Account Status is “D” error returned is 1005.
- Inactive - If Account Status is “I” error returned is 1006.
- Employee - If Employee Code is 1 thru 5 error returned is 1007.
- Charged Off - If the DDA/SAV/LON is charged off error returned is 1008.
- Stop Payment - If Stop Payments exist on the account error returned is 1009.
- Hold - If Holds exist on the account error returned is 1010.
- Warning - If Warnings exist on the account error returned is 1011.
- Message - If Messages exist on the account error returned is 1012.
- Ach Stop Payment- If ACH Stop Pays exist on the account error returned is 1013.
- No Post Debit - If No Post Debits exist on the account error returned is 1014.
- No Post - If No Post exists on the account error returned is 1015.
- No Post Credit - If No Post Credits exist on the account error returned is 1016.
- Insufficient - If Account is Insufficient error returned is 1017.
There are host parameters that control if the specific vendor/product has the ability to override the error codes listed above (these are located in the MNTJXC vendor parameters). If they are setup as capable of override, then they can simply include the ErrCode that was returned in the response in the ErrOvrRdInfoArray in the request to override.
Question Is there a way to add remarks that will get sent to receiving FI?
Answer: There is not a way for the ACH to be created with remarks that would be sent to the receiving FI through a 7 record following the 6 record in the NACHA format. The remarks that can be passed in the XferAdd are for the account that is at the originating FI.
Question: How do you obtain a list of valid ACHCrTrnCodeCode and ACHDrTrnCodeCode values?
Answer: ACHCrTrnCodeCode and ACHDrTrnCodeCode relate to the NACHA standard trancodes, not the core application transaction codes. To retrieve these ACH Transaction Codes you can use the ParmValSrch API while passing in <ParmName>
ACHTrnCode</ParmName>
.
Question: (SilverLake) When using the XferAdd with XferType ACH we are getting the error 100364-Bank Routing Number is not valid . What is causing the error?
Answer: The ABA that is being passed in the XML path returned in the ErrElem needs to pass the checksum/check digit validation. The first eight digits are used to calculate what the nineth digit should be and then compared. This is not unique to JHA and can be researched to make your own check digit routine or how the calculation is performed.