This specification is a Payment Method specification for use with the PaymentRequest API [[PAYMENTREQUESTAPI]]. With it, merchants and payers can exchange information required for credit transfers across a variety of payment systems.

The working group maintains a list of all bug reports that the group has not yet addressed.

Introduction

This specification is a Payment Method Specification used by the PaymentRequest API [[!PAYMENTREQUESTAPI]] to support payment by credit transfer.

Dependencies

This specification relies on several other underlying specifications.

Payment Request API
The term PaymentRequest constructor is defined by the PaymentRequest API specification [[!PAYMENTREQUESTAPI]].
Payment Method Identifiers
The term payment method identifier is defined by the Payment Method Identifier specification [[!METHODIDENTIFIERS]].
Web IDL
The IDL in this specification is defined by Web IDL [[!WEBIDL]].
CLDR
Country codes used in this specification are only used for filtering; country information is not part of the payment message. We thus align with the choice of Payment Request API, which is to use [[!CLDR]].

Examples

Faster Payments UK and BACS

          
          const CreditTransferRequest = {
          supportedNetworks: ["BACS", "UKFasterPayments"],
          payeeAccountNumber: "12345678", // Bob Ltd.'s 8 digit UK bank account number 
          payeeName: "Bob Ltd.", // Merchant name
          payeeBankCode: "12-34-56", // Bob Ltd.'s 6 digit sort code
          payeePaymentIdentificationHumanReadable: "Payment from Alice, account number 87654321", // whilst payment reference is optional for BACS scheme, this text is used for reconciliation so the merchant can check they have been paid
          payeePaymentIdentifierMachineReadable: "abcdefgh123456789" // unique transaction reference, not used by BACS scheme, but Payment App can use to dedeplicate
          }
         
        

This example refers to two credit transfer systems:

SEPA

          const CreditTransferRequest =
              { supportedNetworks: ["SEPA"],
                payeeAccountNumber: "FR7617519500040080394739390", // Marcel S.A. 27 digit IBAN bank account number
                payeeName: "Marcel S.A.", // Merchant name
                payeeBankCode: "CEPAFRPP751", // Marcel S.A. BIC code
                payeePaymentIdentificationHumanReadable: "Achat Livre Victor Hugo ", // this information is for Alice to identify quickly her purchase. Alice's
        Bank could display this line on the statement
                payeePaymentIdentifierMachineReadable: "abcdefgh123456789" // unique transaction reference provided by merchant and used in the endtoEnd field in the SEPA Credit Transfer
               }
          

Payer-Initiated Credit Transfers

Payment Method Identifier

The payment method identifier string for Payer-Initiated Credit Transfer Payment is payer-credit-transfer.

Data for the PaymentRequest constructor

This section describes payment method specific data that is supplied as part of the data argument to the PaymentRequest constructor.

CreditTransferRequest dictionary

          dictionary CreditTransferRequest {
             sequence<DOMString> requiredResponseFields;
             sequence<DOMString> supportedNetworks;
             sequence<DOMString> supportedCountries;
             required DOMString payeeAccountNumber;
             DOMString payeeName;
             DOMString payeeAddress;
             required DOMString payeeBankCode;
             DOMString payeeIdentificationCode;
             DOMString payeePaymentIdentificationHumanReadable;
             required DOMString payeePaymentIdentificationMachineReadable;
             DOMString sellerName;
             DOMString sellerIdentificationCode;
             DOMString purposeCode;
             DOMString categoryPurposeCode;
             DOMString chargeBearer;
             DOMString preferredProcessingDate;
             DOMString notificationURL;
          };
        
requiredResponseFields member
Contains the list of fields that the Payment App must attempt to return, if this requirements cannot be met, e.g., the payment instrument must fail as this is a push payment.

supportedNetworks member
The supportedNetworks field contains a sequence of identifiers for credit transfer networks that the merchant accepts. This field is optional. If a value is not provided then the merchant accepts credit transfers from any credit transfer network. Note: The Web Payments Working Group is still discussing whether and how to maintain a database of supported network identifiers.
supportedCountries member
The supportedCountries field contains a sequence of [[!CLDR]] identifiers of countries from which the merchant accepts credit transfers. This field is optional. If a value is not provided then the merchant accepts credit transfers from any country.
payeeAccountNumber member
This field indicates the account number of the payee (the merchant) that will be used for the credit transfer. This will typically be an IBAN number, or a domestic account number for those countries that do not use IBAN.
payeeBankCode member
The Bank code of the payee that should be used along the “payeeAccountNumber” in order to send the Credit Transfer.
payeeName member
The name of the payee known to the bank that holds the account describe by “payeeAccountNumber”.
payeeAddress member
The address of the payee known by the bank that holds the account describe by “payeeAccountNumber”.
payeeIdentificationCode member
An identification code provided by the payee.
payeePaymentIdentificationHumanReadable member
Human-readable remittance information explaining to the payer what is being paid for.
payeePaymentIdentificationMachineReadable member
Remittance information used for automatic matching upon receipt of the credit transfer.

sellerName member
The name of a person or company in relation to whom a Beneficiary receives a payment.
sellerIdentificationCode member
A code related to “sellerName”.
purposeCode member
The purpose of the credit transfer is the underlying reason for the credit transfer transaction, i.e. information on the nature of such transaction. Values are drawn from ISO20022 External Code Sets.
categoryPurposeCode member
The category purpose of the credit transfer is information on the high level nature of transaction. Values are drawn from ISO20022 External Code Sets.
chargeBearer member
The chargeBearer member indicates how the charge of the credit transfer will be split between the payee. Legal values are:
  • OUR: payer pays
  • SHARED: fees are split
  • BENE: payee pays
preferredProcessingDate member
The merchant's preferred processing date expressed as "YYYY-MM-DD". See also SelectedProcessingDate in the CreditTransferResponse.
notificationURL member
An end point for payment status updates. This specification does not define how such endpoints will work.

Payment Method Response

This section describes the response from the PaymentRequest API when a user accepts payment with a Credit Transfer payment method.

CreditTransferResponse dictionary

The CreditTransferResponse message means that a message has been submitted to the Payee's Bank, not that funds transfer has occurred. The merchant should wait for notification from its Bank that the payment has cleared.

 
          dictionary CreditTransferResponse {
          required      DOMString selectedProcessingDate;
          required      DOMString payerPaymentIdentification;
          required      DOMString payerBankCode;
          required      DOMString selectedNetwork;
          DOMString     payerIdentificationCode;
          DOMString     payerName;
          DOMString     buyerIdentificationCode;
          DOMString     buyerName;
          DOMString     statusInformation;
          };
        
selectedProcessingDate member
The date for commencing the execution of the payment request. This date may be different from that requested by the Payee, either because of a business rule (e.g., non business day, or a preference from the payee to defer payment
payerPaymentIdentification member
A unique identifier for a given payer each Credit Transfer Transaction presented to the payer Bank. This number will be transmitted in the entire process of the handling of the credit transfer transactions from acceptance until the finality of the transaction. It must be returned in any exception handling process-step by any party involved. The payer cannot request for any other referencing information to be returned to him, in order to identify a credit transfer. The payer must define the internal structure of this reference; it can only be expected to be meaningful to the payer.
payerBankCode member
The code of the bank which send the Credit Transfer. It could be the BIC, like for SEPA, or any other Bank code
selectedNetwork member
The network used by the originator to send the credit transfer
payerIdentificationCode member
A code supplied by the payer.
payerName member
The name of the payer.
buyerIdentificationCode member
The buyer reference. The buyer may be a 3rd party to the payer, if the payer is paying on behalf of another party.
buyerName member
The buyer name. The buyer may be a 3rd party to the payer. If the payer is paying on behalf of another party.
statusInformation member
Payment status information (e.g., whether a payment is pending or has completed).

Payer-Initiated Through Payee Credit Transfers

In this credit transfer method, the payee (or third party) initiates the credit transfer. In some jurisdictions, credit transfers may be initiated by a regulated third party such as the the payee's bank or, under PSD2 in Europe, a Payment Initiation Service Provider (PISP).

Payment Method Identifier

The payment method identifier string for Payer-Initiated through Payee Credit Transfer Payment is payee-credit-transfer.

Data for the PaymentRequest constructor

The data supplied as part of the data argument to the PaymentRequest constructor is the same as for payer-credit-transfer.

Payment Method Response

This section describes the response from the PaymentRequest API when a user accepts payment with a Payee Credit Transfer payment method.

PayeeCreditTransferResponse dictionary

 
          dictionary PayeeCreditTransferResponse: CreditTransferResponse {
             DOMString     authorizationToken;
          };
        
authorizationToken member
The authorizationToken enables the payee (or third party) to initiate the credit transfer.

Security and Privacy Considerations

Owners of web sites SHOULD NOT store the payer's information except where warranted, such as storage for future and recurring payments. When information is stored, web site owners SHOULD take measures to prevent its disclosure.

Appendix: Mappings to SEPA

Here we map fields in this specification to Customer to Bank Credit Transfer Initiation (DS-01) fields defined in SEPA Credit Transfer Rulebook Version 8.1. The SEPA Rulebook may impose additional implementation restrictions (e.g., number of characters) not defined in the current specification.

CreditTransferRequest Fields and SEPA

SEPA
supportedNetworks AT-40: Identification code of the Scheme
payeeAccountNumber AT-20: The IBAN of the account of the Beneficiary.
payeeBankCode AT-23: the BIC code of the beneficiary. Note: Even if the BIC could be derived from the IBAN in most of SEPA country, it may be not the case in others, so this field is important. The merchant should know the BIC of his account. This field could be also used with another format of “bank identification code” for countries not using BIC.
payeeName AT-21: The name of the Beneficiary
payeeAddress AT-22: The address of the Beneficiary
payeeIdentificationCode AT-24: The Beneficiary identification code
payeePaymentIdentificationHumanReadable AT-05: The Remittance Information sent by the Originator to the Beneficiary in the Credit Transfer Instruction only if the payeePaymentIdentificationMachineReadable is not provided.
payeePaymentIdentificationMachineReadable AT-05: The Remittance Information sent by the Originator to the Beneficiary in the Credit Transfer Instruction.
sellerName AT-28: The name of the Beneficiary Reference Party
sellerIdentificationCode AT-29: The identification code of the Beneficiary Reference Party
purposeCode AT-44: The purpose of the credit transfer
categoryPurposeCode AT-45: The category purpose of the credit transfer
preferredProcessingDate ...
notificationURL ...

CreditTransferResponse Fields and SEPA

SEPA
selectedProcessingDate AT-07: The Requested Execution Date of the instruction
payerPaymentIdentification AT-41: The Originator’s reference of the Credit Transfer Transaction (End to End Identification in ISO20022 definition)
payerBankCode AT-06: The BIC of the Originator
selectedNetwork AT-40: Identification code of the Scheme
payerIdentificationCode AT-10: The Originator identification code
payerName AT-02: The Name of the Originator
buyerIdentificationCode AT-09: The identification code of the Originator Reference Party
buyerName AT-08: Name of the Originator Reference Party of the Originator Reference Party
statusInformation None?

Appendix: Mappings to ISO 20022

Here we map fields in this specification to ISO 20022 fields defined in the Payments Dashboard.

CreditTransferRequest Fields and ISO 20022

ISO 20022
supportedNetworks None?
payeeAccountNumber pain.001.PaymentInformation.CreditTransferTransactionInformation.CreditorAccount.Identification.IBAN
payeeBankCode None?
payeeName pain.001.PaymentInformation.CreditTransferTransactionInformation.Creditor.Name
payeeAddress None?
payeeIdentificationCode pain.001.PaymentInformation.CreditTransferTransactionInformation.Creditor.Identification.*
payeePaymentIdentificationHumanReadable None?
payeePaymentIdentificationMachineReadable None?
sellerName pain.001.PaymentInformation.CreditTransferTransactionInformation.UltimateCreditor.Name
sellerIdentificationCode pain.001.PaymentInformation.CreditTransferTransactionInformation.UltimateCreditor.Identification.*
purposeCode pain.001.PaymentInformation.CreditTransferTransactionInformation.Purpose
categoryPurposeCode pain.001.PaymentInformation.CreditTransferTransactionInformation.PaymentType.CategoryPurpose
preferredProcessingDate pain.001.PaymentInformation.RequestedExecutionDate
notificationURL pain.001.PaymentInformation.CreditTransferTransactionInformation.RelatedRemittanceInformation.RemittanceLocationDetails.ElectronicAddress

CreditTransferResponse Fields and ISO 20022

ISO 20022
selectedProcessingDate pain.002.OriginalPaymentInformationAndStatus.TransactionInformationAndStatus.OriginalTransactionReference.RequestedExecutionDate
payerPaymentIdentification pain.002.OriginalPaymentInformationAndStatus.TransactionInformationAndStatus.OriginalEndToEndId
payerBankCode None?
selectedNetwork None?
payerIdentificationCode pain.002.OriginalPaymentInformationAndStatus.TransactionInformationAndStatus.OriginalTransactionReference.Debtor.Identification.*
payerName None?
buyerIdentificationCode pain.002.OriginalPaymentInformationAndStatus.TransactionInformationAndStatus.OriginalTransactionReference.UltimateDebtor.Identification.*
buyerName None?

Appendix: Design Considerations

The following are design considerations for this specification.

Appendix: Flow Diagrams

Payer-initiated

This diagram illustrates a payer-initiated SEPA transfer.

Push credit transfer flow, SEPA example

This diagram illustrates a payer-initiated instant SEPA transfer.

Push credit transfer flow, SEPA example

Payer-Initiated Through Payee

This diagram illustrates a SEPA transfer initiated by the payer through the payee's payment service provider.

Pull credit transfer flow, SEPA example

Acknowledgments

Laurent Castillo (Gemalto), Kris Ketels (Swift), Frédéric Meignien (Canton Consulting).