aplonHUB, Outgoing SEPA APIs Documentation
Table of contents
In this document, find the APIs that aplonHUB exposes so that core banking (or other upstream systems) need to call in order to work with outgoing ISO20022 or SEPA payments.
Credit Transfers
PUT /credit/transfer
Description:
This API is used to initiate a SEPA credit transfer.
Method: PUT
Endpoint: /credit/transfer
{ "achId": 1, "bankId": 1, "actionUser": { "email": "string", }, "creditorAddrLn1": "string", "creditorAddrLn2": "string", "creditorBIC": "string", "creditorCountryCode": "string", "creditorIBAN": "string", "creditorName": "string", "debtorAddrLn1": "string", "debtorAddrLn2": "string", "debtorCountryCode": "string", "debtorIBAN": "string", "debtorName": "string", "endToEndId": "string", "remInfo": "string", "sttlmAmt": 0, "sttlmDt": "string", "txId": "string" }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 150, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid creditor BIC : A" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid creditor IBAN : GR550140" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid creditor IBAN : GR550140" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid debtor country code : R" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid settlement amount is given : 0" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid creditor name length : Α" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid debtor name length : Α" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid creditor address length : B" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid debtor address length : B" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid settlement date given : 11/02/2020" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid txId : !" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid endToEndId : c8b66b47-2bd9-48fe-be90-9c2096f27ad2. The field should contain 35 chars max." ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "C03 - The number of decimal digits in the amount component is checked against the maximum allowed for the corresponding currency. ( occurrence: 1)" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid remInfo : Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment Test Payment . The field should contain 140 chars max." ] }
PUT /sepa/recall/request
Charges according to SEPA 2021 rulebook
Description:
This API is used to initiate a recall request for an outgoing SEPA transfer
Method: PUT
Endpoint: /sepa/recall/request
{ "actionUser": "string", "authUser": "string", "reasonCode": "string", "sepaTrnHedSn": 150 //outgoing pacs008 ID, "additionalInformation" : "string" //Allowed only for reasonCodes "FRAD", CUST", AM09", AC03", max length 105 characters }
Responses | |
---|---|
Code | Description |
200 | OK |
Recall Request Reason Codes | |
---|---|
CUST | Cancellation requested by the Debtor |
DUPL | Payment is a duplicate of another payment. |
AGNT | Agent in the payment workflow is incorrect. |
CURR | Currency of the payment is incorrect. |
UPAY | Payment is not justified. |
CUTA | Cancellation requested because an investigation request has been received and no remediation is possible. |
FRAD | Fraudulent Originated. |
TECH | Technical Problems |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reason.code.max.length.exceeded" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "invalid.recall.request.reason.code" ] }
PUT /sepa/recall/request/accept
Description:
This API accepts an incoming recall request
Method: PUT
Endpoint: /sepa/recall/request/accept
{ "actionUser": "string", "authUser": "string", "reasonCode": "string", "sepaTrnHedSn": 0, //incoming camt056 ID "charges" : 1.00 // in case the reasonCode is FOCR (Following Cancelation Request) you may want to add charges in the Payment Return message. }
Return Reason Codes | |
---|---|
Code | Description |
AC01 | Incorrect Account Number(AC01) |
AC04 | Closed Account Number(AC04) |
AC06 | Blocked Account(AC06) |
AG01 | Transaction Forbidden(AG01) |
AG02 | Invalid Bank Operation Code(AG02) |
AM05 | Duplication(AM05) |
BE01 | Inconsistent With End Customer(BE01) |
BE04 | Missing Creditor Address(BE04) |
BE06 | Unknown End Customer(BE06) |
DT01 | Invalid Date(DT01) |
FOCR | Return due to a Recall(FOCR) |
MD07 | End Customer Deceased(MD07) |
MS02 | Not Specified Reason Customer Generated(MS02) |
MS03 | Not Specified Reason Agent Generated(MS03) |
RC01 | Bank Identifier Incorrect(RC01) |
RR01 | Regulatory Reason(RR01) |
RR02 | Regulatory Reason(RR02) |
RR03 | Regulatory Reason(RR03) |
RR04 | Regulatory Reason(RR04) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.not.found.or.invalid.status" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.original.transaction.not.found" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.accept.failed" ] }
PUT /sepa/recall/request/reject
Description:
This API rejects an incoming recall request
Method: PUT
Endpoint: /sepa/recall/request/reject
{ "actionUser": "string", "authUser": "string", "reasonCode": "string", "sepaTrnHedSn": 0 //incoming camt056 ID }
Reject Reason Codes | |
---|---|
Code | Description |
LEGL | Legal Reason(LEGL) |
CUST | Beneficiary Refusal(CUST) |
AC04 | Account closed(AC04) |
AM04 | Insufficient Funds on the account(AM04) |
NOAS | No response from Beneficiary(NOAS) |
NOOR | Original Credit Transfer never received(NOOR) |
ARDT | Transaction has already been returned(ARDT) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.not.found.or.invalid.status" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.original.transaction.not.found" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "recall.request.reject.failed" ] }
PUT /sepa/update/payment/return
Description:
This API returns an incoming SEPA transfer. If userName
is not used, then SYSTEM
will be added.
Method: PUT
Endpoint: /sepa/update/payment/return
{ "reasonCode": "string", "sepaTrnHedSn": 0, //Incoming Pacs.008 internal ID "userName": "username" }
Return Reason Codes | |
---|---|
Code | Description |
AC01 | Incorrect Account Number(AC01) |
AC04 | Closed Account Number(AC04) |
AC06 | Blocked Account(AC06) |
AG01 | Transaction Forbidden(AG01) |
AG02 | Invalid Bank Operation Code(AG02) |
AM05 | Duplication(AM05) |
BE01 | Inconsistent With End Customer(BE01) |
BE04 | Missing Creditor Address(BE04) |
BE06 | Unknown End Customer(BE06) |
DT01 | Invalid Date(DT01) |
FOCR | Return due to a Recall(FOCR) |
MD07 | End Customer Deceased(MD07) |
MS02 | Not Specified Reason Customer Generated(MS02) |
MS03 | Not Specified Reason Agent Generated(MS03) |
RC01 | Bank Identifier Incorrect(RC01) |
RR01 | Regulatory Reason(RR01) |
RR02 | Regulatory Reason(RR02) |
RR03 | Regulatory Reason(RR03) |
RR04 | Regulatory Reason(RR04) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "return.payment.invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "generate.return.payment.failed" ] }
PUT /sepa/update/payment/reject
Description:
Use this endpoint to reject an incoming payment.
Payments should have an actionUser
and an authUser
in order to released from aplonHub. In case you call the api without any of them aplonHub will put SYSTEM
user on it.
In the rejectReason property you can put either a string max 35 chars, which will be displayed in the RejectReason Proprietary of the outgoing pacs.002 or one of the codes below which will be displayed in th RejectReason code of pacs.002
In the response, in the payload property you will get the updated records (which should always be 1).
Method: PUT
Endpoint: /sepa/update/payment/reject
{ "sepaTrnHedSn": 534, //Incoming pacs.008 Internal ID "rejectReason": "ED05", "actionUser" : "user1", "authUser" : "user2" }
Return Reason Codes | |
---|---|
Code | Description |
AM01 | Zero Amount |
AM02 | Not Allowed Amount |
AM05 | Duplication |
DT01 | Invalid Date |
ED05 | Settlement Failed |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reject.transaction.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reject.reason.length.invalid" ] }
PUT /sepa/update/payment/settled
Description:
Use this endpoint to mark an incoming payment as settled.
Payments should have an actionUser
and an authUser
in order to released from aplonHub. In case you call the api without any of them aplonHub will put SYSTEM
user on it.
Method: PUT
Endpoint: /sepa/update/payment/settled
{ "sepaTrnHedSn": 534, //Incoming pacs.008 Internal ID "actionUser" : "user1", "authUser" : "user2" }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "settled.transaction.failed" ] }
PUT /sepa/update/payment/claim/non/receipt
Description:
This API accepts the id of an outgoing pacs.008 and generates a camt.027 message for the given pacs.008.
Method: PUT
Endpoint: /sepa/update/payment/claim/non/receipt
{ "sepaTrnHedSn": 0 }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "update.transaction.claim.not.receipt.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Generated camt.027.001.06 has errors {ERRORS}" ] }
PUT /sepa/update/payment/request/to/modify/payment
Description:
This API accepts the id of an outgoing pacs.008 and a date and generates a camt.087 message for the given pacs.008.
Method: PUT
Endpoint: /sepa/update/payment/request/to/modify/payment
{ "newSttlmDt": "26/03/2021", "sepaTrnHedSn": 0 }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "update.transaction.request.to.modify.payment.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Invalid settlement date given : {NEW_DATE} as it needs to be after {PACS008_STTLDT}" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Generated camt.087.001.05 has errors {ERRORS}" ] }
PUT /sepa/update/payment/resolution/of/investigation
Charges according to SEPA 2021 rulebook
Description:
This API accepts the id of an incoming camt.027.001.06/camt.087.001.05/pacs.028.001.01 and generates a camt.029.001.08 for the given id.
Method: PUT
Endpoint: /sepa/update/payment/resolution/of/investigation
{ "charges": 1.09, //Optional "compensation": 2.23, //Optional "dateProcessed": "26/03/2021", "sepaTrnHedSn": 0, "status": "ACNR", "IBAN" : "string" //Valid IBAN required when charges and/or compensation are present, otherwise not allowed }
Status Codes | |
---|---|
Code | Description |
ACNR | Accepted Claim Non Receipt(ACNR) |
RJNR | Default. Rejected Claim Non Receipt(RJNR) |
ACVA | Accepted Value Date Adjustment(ACVA) |
RJVA | Rejected Value date Adjustment(RJVA) |
CVAA | Correct Value date Already Applied(CVAA) |
MODI | Modified As Per Request(MODI) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "update.transaction.resolution.of.investigation.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Generated camt.029.001.08 has errors {ERRORS}" ] }
PUT /sepa/status/inquiry
Description:
This API accepts the id of an outgoing camt.027.001.06/camt.087.001.05/camt.056 and generates a pacs.028.001.01 for the given id.
Method: PUT
Endpoint: /sepa/status/inquiry
{ "sepaTrnHedSn": 0 }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "update.transaction.status.inquiry.failed" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Generated pacs.028.001.01 has errors {ERRORS}" ] }
Direct Debits
POST /direct/debit
Description:
This API is used to initiate a SEPA Direct Debit (pacs.003).
Method: POST
Endpoint: /direct/debit
{ "dd_schema" : "CORE", //optional "sequence_type" : "FRST", //optional "mandate_id" : "mandateId", //optional "date_of_signature" : "2019/09/24", //optional "transaction_id" : "txId5", "end_to_end_id" : "endToendId", //optional "category_purpose_cd" : "cd", //optional "amount" : 23.00, "requested_collection_date" : "2021/05/27", //optional "amendment_indicator" : true, //optional "original_mandate_id" : "ornlMndId", //if amendment_indicator is true "original_creditor_scheme_name" : "orgnlCrNm", //if amendment_indicator is true "original_creditor_scheme_id" : "orgnlCrId", //if amendment_indicator is true "original_creditor_scheme_prtry" : "orgnlCrPrtry", //if amendment_indicator is true "original_debtor_account_iban" : "GR1601101250000000012300611", //if amendment_indicator is true "original_debtor_agent_bic" : "TESTBICAXXX", //if amendment_indicator is true "electronic_signature" : "signatureeeeee", //optional "creditor_scheme_id" : "crId", //optional "creditor_scheme_prtry" : "proprietary", //optional "creditor_name" : "Creditor Name", //either name, country or address should exist "creditor_country" : "PT", //either name, country or address should exist "creditor_address_line_1" : "Creditor Address 1", //either name, country or address should exist "creditor_address_line_2" : "Creditor Address 2", //either name, country or address should exist "creditor_iban" : "PT50006300010100104001066", //optional "creditor_agent_bic" : "TESTBICBXXX", "debtor_name" : "Debtor Name", //optional, at least one of debtor_* optional elements should exist "debtor_country" : "GR", //optional, at least one of debtor_* optional elements should exist "debtor_address_line_1" : "Debtor Address 1", //optional, at least one of debtor_* optional elements should exist "debtor_address_line_2" : "Debtor Address 2", //optional, at least one of debtor_* optional elements should exist "debtor_organization_bic" : "TESTBICAXXX", //optional, at least one of debtor_* optional elements should exist "debtor_iban" : "GR1601101250000000012300611", "debtor_bic" : "TESTBICA", "purpose_code" : "cd", //optional "remittance_info_unstructured" : "remInf", //optional "remittance_info_structured_cdtrrefinf_cd" : "SCOR", //optional "remittance_info_structured_cdtrrefinf_tp_issuer" : "issuer", //optional "remittance_info_structured_cdtrrefinf_ref" : "ref", //optional "actionUser": "john" //optional, 'SYSTEM' will be used }
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 150, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "Line: -1 -- cvc-complex-type.2.4.b: The content of element 'PmtId' is not complete. One of '{\"urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02\":TxId}' is expected." ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "inactive.mandate.status" ] }
PUT /sepa/direct/debit/return
Description:
This API returns an incoming SEPA Direct Debit
Method: PUT
Endpoint: /sepa/direct/debit/return
{ "sepaTrnHedSn" : 1529, "userName": "test@email.com", "reasonCode" :"AC01", "msgNmId": "pacs.003.001.02" }
Return Reason Codes | |
---|---|
Code | Description |
AC01 | Incorrect Account Number(AC01) |
AC04 | Closed Account Number(AC04) |
AC06 | Blocked Account(AC06) |
AG01 | Transaction Forbidden(AG01) |
AG02 | Invalid Bank Operation Code(AG02) |
AC13 | Private Consumer Account(AC13) |
AM04 | Insufficient funds(AM04) |
AM05 | Duplicate operation(AM05) |
BE05 | Bad Credit Identifier(BE05) |
MD01 | Invalid mandate(MD01) |
MD06 | Authorized Transaction Refund(MD06) |
MD07 | Deceased debtor(MD07) |
MS02 | Not Specified Reason Customer Generated(MS02) |
MS03 | Not Specified Reason Agent Generated(MS03) |
RC01 | Bank Identifier Incorrect(RC01) |
RR01 | Regulatory Reason(RR01) |
RR02 | Regulatory Reason(RR02) |
RR03 | Regulatory Reason(RR03) |
RR04 | Regulatory Reason(RR04) |
SL01 | Specific service offered by the Bank of Debtor(SL01) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "return.payment.invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "generate.return.payment.failed" ] }
PUT /sepa/direct/debit/reject
Description:
This API reject an incoming SEPA Direct Debit
Method: PUT
Endpoint: /sepa/direct/debit/return
{ "sepaTrnHedSn" : 1530, "userName": "test@email.com", "reasonCode" :"AC01", "msgNmId": "pacs.003.001.02" }
Reject Reason Codes | |
---|---|
Code | Description |
AC01 | Incorrect Account Number(AC01) |
AC04 | Closed Account Number(AC04) |
AC06 | Blocked Account(AC06) |
AG01 | Transaction Forbidden(AG01) |
AG02 | Invalid Bank Operation Code(AG02) |
AC13 | Private Consumer Account(AC13) |
AM04 | Insufficient funds(AM04) |
AM05 | Duplicate operation(AM05) |
BE05 | Bad Credit Identifier(BE05) |
MD01 | Invalid mandate(MD01) |
MD06 | Authorized Transaction Refund(MD06) |
MD07 | Deceased debtor(MD07) |
MS02 | Not Specified Reason Customer Generated(MS02) |
MS03 | Not Specified Reason Agent Generated(MS03) |
RC01 | Bank Identifier Incorrect(RC01) |
RR01 | Regulatory Reason(RR01) |
RR02 | Regulatory Reason(RR02) |
RR03 | Regulatory Reason(RR03) |
RR04 | Regulatory Reason(RR04) |
SL01 | Specific service offered by the Bank of Debtor(SL01) |
CNOR | Creditor Bank is not registered under this BIC in the CSM(CNOR) |
DNOR | Debtor Bank is not registered under this BIC in the CSM(DNOR) |
ED05 | Settlement of the collection failed(ED05) |
FF01 | File format incomplete or invalid(FF01) |
MD02 | Mandate related information data required by the scheme is missing(MD02) |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reject.payment.invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "generate.reject.payment.failed" ] }
PUT /direct/debit/reverse
Description:
This API reverses an outgoing SEPA Direct Debit
Method: PUT
Endpoint: /direct/debit/reverse
{ "sepaTrnHedSn" : 1530, "actionUser": "John", "reasonCode" :"AC01" }
Reject Reason Codes | |
---|---|
Code | Description |
AC01 | Incorrect account number (IBAN) |
AC04 | Account closed |
AC06 | Blocked account |
AC13 | Private Consumer Account |
AG01 | Direct Debit not allowed for this type of account |
AG02 | Operation code, transaction code or incorrect string type |
AM04 | Insufficient funds |
AM05 | Duplicate operation |
BE05 | Bad Credit Identifier |
MD01 | Invalid mandate |
MD06 | Authorized Transaction Refund |
MD07 | Deceased debtor |
MS02 | Refusal by Debtor |
MS03 | Reason not specified |
RC01 | Incorrect Bank Identification (BIC) invalid) |
RR01 | Regulatory reasons - account missing Debtor or identification |
RR02 | Regulatory reasons - name or name missing debtor's address |
RR03 | Regulatory reasons - name or name missing creditor's address |
RR04 | Regulatory reasons |
SL01 | Specific service offered by the Bank of Debtor |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reverse.direct.debit.invalid.reason.code" ] }
{ "status": "FAILURE", "payload": null, "errorCode": null, "errors": [ "reverse.direct.debit.failed" ] }
PUT /mandate/update/status
Description:
This API is used to update the status of a mandate.
Method: PUT
Endpoint: /mandate/update/status
{ "id": 234, "status": "PAUSED" //see table below }
Statuses | |
---|---|
ACTIVE | |
CANCELLED | |
PAUSED |
Responses | |
---|---|
Code | Description |
200 | OK |
{ "status": "OK", "payload": 1, "errorCode": null, "errors": null }