Last updated

Step 4: Receive Inbound Credit Transfer Completion

Overview

After receiving an Inbound Credit Transfer Response from you, Electrum finalises the transfer on the payment network. Following this, Electrum notifies you that the transaction is complete via an inboundCreditTransferCompletion request. This serves as confirmation of the final state of the payment.

Financial Impact

The completion step has a possible financial impact. Be sure to consider these important factors when handling this step:

  • Electrum treats the inboundCreditTransferCompletion as a must-deliver message and will repeatedly send it until you acknowledge receipt.
  • Once Electrum has received your acknowledgement to the inboundCreditTransferCompletion, then it is assumed that the transaction is final.
  • Refer to the status.outcome field to determine whether or not funds should be credited.
  • In rare circumstances, Electrum may be unable to determine the final state of the transaction from the payment network. In this case you will not receive an inboundCreditTransferCompletion and no action is required from you. Any discrepancy between your view of the transaction and that of the sending participant will need to be resolved during reconciliation.

Implementing the API

Receive Request

Electrum sends an inboundCreditTransferCompletion request to your /transactions/inbound/credit-transfer-completion endpoint. The request will conform to the following schema:

messageIdentifiersobject(MessageIdentifiers)required

Holds a point-to-point unique message identification string as well as a message's creation date time.

messageIdentifiers.​creationDateTimestring(date-time)required

The date and time at which the message was created, in senders local timezone or UTC. The date must be formatted as defined by date-time in RFC3339

messageIdentifiers.​messageIdentificationstring<= 35 charactersrequired

A reference used to unambiguously identify the message between the sending and receiving party. Take note that this uniquely identifies a single message in a potentially multi-message exchange to complete a payment.

supplementaryDataobject(SupplementaryData)

A list of key-value pairs to support adding any supplementary/additional data to an Electrum Regulated Payments API message.

originalMessageIdentifiersobject(MessageIdentifiers)required

Holds a point-to-point unique message identification string as well as a message's creation date time.

originalMessageIdentifiers.​creationDateTimestring(date-time)required

The date and time at which the message was created, in senders local timezone or UTC. The date must be formatted as defined by date-time in RFC3339

originalMessageIdentifiers.​messageIdentificationstring<= 35 charactersrequired

A reference used to unambiguously identify the message between the sending and receiving party. Take note that this uniquely identifies a single message in a potentially multi-message exchange to complete a payment.

transactionIdentifiersobject(TransactionIdentifiers)required

Holds a series of identifiers to identify the transaction or an individual message that is part of a transaction.

transactionIdentifiers.​endToEndIdentificationstring<= 35 charactersrequired

Unique identification, as assigned by the initiating party, to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain. Note: this is distinct from the UETR.

transactionIdentifiers.​instructionIdentificationstring<= 35 characters

Unique identification, as assigned by an instructing party for an instructed party, to unambiguously identify the instruction. The instruction identification is a point to point reference that can be used between the instructing party and the instructed party to refer to the individual instruction. It can be included in several messages related to the instruction.

transactionIdentifiers.​transactionIdentificationstring<= 35 characters

Unique identification, as assigned by the first instructing agent, to unambiguously identify the transaction that is passed on, unchanged, throughout the entire interbank chain. Usage: The transaction identification can be used for reconciliation, tracking or to link tasks relating to the transaction on the interbank level. Usage: The instructing agent has to make sure that the transaction identification is unique for a pre-agreed period.

transactionIdentifiers.​uetrstring(UUID)required

Universally unique identifier to provide an end-to-end reference of a payment transaction. This identifier remains the same for all messages related to the same transaction.

instructedAgentobject(InstitutionIdentification)
instructingAgentobject(InstitutionIdentification)
statusobject(Status)required
status.​outcomestringrequired
  • APPROVED: The instruction has been approved.
  • CANCELLED: The instruction has been cancelled.
  • PENDING: The instruction is pending.
  • REJECTED: The instruction has been rejected.
Enum"APPROVED""CANCELLED""PENDING""REJECTED"
status.​reasonInfoArray of objects(StatusReasonInfo)non-empty

A list of StatusReasonInfo values providing detailed reason information for the outcome.

originalTransactionDataobject(OriginalTransactionData)

Contains key elements related to the original transaction that is being referred to.

paymentSchemeobject(PaymentStatusReportPaymentScheme)required

Designates which scheme a payment status report is associated with and describes scheme-specific information for the payment status report.

paymentScheme.​schemastringrequired
Discriminator
schemastringrequired
Value"PaymentStatusReport"

Respond With Success

If you receive the request successfully and are able to process it, then respond with an HTTP 202 status.

Respond With An Error

If you experience an error while handling the request and are unable to process it, then respond with an appropriate error response.

When to Credit the Beneficiary's Account

The final status of the transaction is communicated in the status.outcome field of the request. The table below indicates what action is required for the respective outcomes.

StatusFinancial ImpactAction
APPROVEDYesCredit the beneficiary's account
CANCELLEDNoNone
PENDINGNoNone
REJECTEDNoNone

In the case that the inbound payment is related to an outbound Request-To-Pay, an outboundRefundInitiation operation may be performed. See here for implementation details.